爬虫案例5:python爬取京东商品数据
现这个搜索框的id=key,因此,先清理元素默认的搜索产品,然后填写搜索商品手机,模拟相关动作的代码如下: 1 2 3 from selenium import webdriver
基于当下的淘宝网站反扒机制太严格,即使通过模拟浏览来获取,依旧比较难,因此选择京东这个平台来练习一下通过模拟浏览器来进行数据获取。
1、爬取思路
(1)本次爬取的内容为京东商城(https://www.jd.com/)上手机商品信息,如下图:
(2)本次是模拟浏览器的搜索操作,获取相应的网页,并不是请求网页,因此需要找到搜索位置,填写搜索商品名称进行搜索,“检查”搜索框元素,如下图: 发现这个搜索框的id=key,因此,先清理元素默认的搜索产品,然后填写搜索商品手机,模拟相关动作的代码如下: 1 2 3 from selenium import webdriver driver.find_element_by_id('key').clear() driver.find_element_by_id('key').send_keys('手机') 然后,还需要点击搜索,具体的位置如下:
找到按钮的属性后,可以使用如下代码模拟按钮动作,才能打开手机的搜索页面,代码如下: 1 driver.find_element_by_class_name('button').click()
(3)过去都是通过观察不同页面的URL规律,来构造URL。但是模拟浏览器就不一样的, 可以看到页面底部有翻页按钮,需要做的是找到按钮路径处,然后模拟翻页动作,找到新页面的URL。
选中开发者模式里面的红框,右键选择copy->copy Xpath,可以找到翻页的路径,可以通过如下代码模拟点击:
1 driver.find_element_by_xpath('//*[@id="J_bottomPage"]').click()
(4)本次简单爬取一下手机的价格和店铺名称来模拟浏览器数据获取,商品的其它信息有兴趣的同学可以根据自己需要自行补充。
备注:针对要爬取商品名称的,建议获取有效的商品链接,进入详情页面,可以根据需要获取更多的商品基础信息。
2、爬取代码
from selenium import webdriver from lxml import etree import time driver=webdriver.Chrome() driver.maximize_window() def get_info(url,page): page = page + 1 driver.get(url) driver.implicitly_wait(10) selector=etree.HTML(driver.page_source) infos = selector.xpath('//*[@id="J_goodsList"]/ul') for info in infos: price = info.xpath('li/div/div[3]/strong/i/text()') print(price) shop = info.xpath('li/div/div[7]/span/a/text()') print(shop) if page <= 5: NextPage(url, page) else: pass def NextPage(url, page): driver.get(url) driver.implicitly_wait(10) driver.find_element_by_xpath('//*[@id="J_bottomPage"]').click() time.sleep(10) driver.get(driver.current_url) driver.implicitly_wait(10) get_info(driver.current_url, page)
if __name__=='__main__': page=1 url='https://www.jd.com/' driver.get(url) driver.implicitly_wait(10) driver.find_element_by_id('key').clear() driver.find_element_by_id('key').send_keys('手机') driver.find_element_by_class_name('button').click() time.sleep(3) get_info(driver.current_url, page)
备注:很多时候经常会遇到报错是浏览器的驱动和现有的浏览器不对应,因此需要去下载相对应的驱动后才能正常模拟浏览器进行数据获取。
运行结果如下:

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)