Chr_小屋 - 硒
type: channel
link: https://blog.chrxw.com/tag/硒/
items: 使用Selenium爬取京东

使用Selenium爬取京东
type: item
date: 2019-11-15T19:36:00+08:00
description: 前言 又是受某老师之托……鸽了俩礼拜我都忘了他一催我才想起来 由于我看不懂懒得分析京东的Pjax，直接拿Selenuim爬取京东 安装依赖 pip3 install selenium bs4 pymysql 代码 头部声明： from selenium import webdriver from selenium.webdriver import ActionChains from bs4 import BeautifulSoup import requests import pymysql import pymysql.cursors import logging # logging.basicConfig(level=logging.INFO,format="[%(asctime)s][%(levelname)s]%(message)s", datefmt='%Y-%m-%d %H:%M:%S') # #创建webdriver对象 chrome = webdriver.Chrome() # #数据库设置 DB_HOST = '127.0.0.1' DB_PORT = 3306 DB_USER = 'user' DB_PASS = 'password' DB_NAME = 'dbname' DB_CHAR = 'utf8mb4' TB_NAME = 'jdspider' 抓取搜索页： def JD_Search_Single(keyword:str,page:int=1) -> list: ''' 京东搜索单次 参数： 关键词 页码,1=第一页,3=第二页,5=第三页以此类推 返回： [(商品名,价格,链接),……] ''' chrome.get(f'https://search.jd.com/Search?keyword={keyword}&enc=utf-8&page={page}') chrome.implicitly_wait(7) goodlist = Htmt_2_GoodList(chrome.page_source) return(goodlist) def Htmt_2_GoodList(html:str) -> list: ''' 搜索页Html解析成商品列表 参数： 搜索页Html 返回： (商品名,价格,链接) ''' bs = BeautifulSoup(html,'lxml') goodslist = bs.find(name='div',attrs={'id':'J_goodsList'}) goods = [] for good in goodslist.find_all(name='div',attrs={'class':'gl-i-wrap'}): try: #不会处理商品搜索页上有tab的情况 price = good.find(name='div',attrs={'class':'p-price'}).strong.i.get_text() name = good.find(name='div',attrs={'class':'p-name'}).a.em.get_text() link = good.find(name='div',attrs={'class':'p-name'}).a.attrs.get('href','null') link = f'https:{link}' if link[0] == '/' else link logging.info(f'爬取商品列表[{price.rjust(6)}][{name}][{link}]') goods.append((name,price,link)) except Exception as e: logging.error(f'**遇到未知错误[{e}]') Error_Alert(f'Htmt_2_GoodList-{e}') return(goods) 分析详情页： def JD_Good_Detail(link:str) -> list: ''' 京东商品详情页 参数： 商品链接 返回： (商品名,[商品简介]) ''' try: chrome.switch_to_window(chrome.window_handles[0]) chrome.execute_script(f'window.open("{link}")') chrome.switch_to_window(chrome.window_handles[1]) chrome.implicitly_wait(5) chrome.execute_script("scroll(0, 100000);") chrome.implicitly_wait(30) tr…