爬虫案例:python爬取京东商品数据||京东商品详情SKU价格
网址:https://www.jd.com/
基于当下的淘宝网站反扒机制太严格,即使通过模拟浏览来获取,依旧比较难,因此选择京东这个平台来练习一下通过模拟浏览器来进行数据获取。
1、爬取思路
(1)本次爬取的内容为京东商城(https://www.jd.com/)上手机商品信息,如下图:
(2)本次是模拟浏览器的搜索操作,获取相应的网页,并不是请求网页,因此需要找到搜索位置,填写搜索商品名称进行搜索,“检查”搜索框元素,如下图:
发现这个搜索框的id=key,因此,先清理元素默认的搜索产品,然后填写搜索商品手机,模拟相关动作的代码如下:
from selenium import webdriver
driver.find_element_by_id('key').clear()
driver.find_element_by_id('key').send_keys('手机')
然后,还需要点击搜索,具体的位置如下:
找到按钮的属性后,可以使用如下代码模拟按钮动作,才能打开手机的搜索页面,代码如下:
driver.find_element_by_class_name('button').click()
(3)过去都是通过观察不同页面的URL规律,来构造URL。但是模拟浏览器就不一样的, 可以看到页面底部有翻页按钮,需要做的是找到按钮路径处,然后模拟翻页动作,找到新页面的URL。
选中开发者模式里面的红框,右键选择copy->copy Xpath,可以找到翻页的路径,可以通过如下代码模拟点击:
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)
备注:很多时候经常会遇到报错是浏览器的驱动和现有的浏览器不对应,因此需要去下载相对应的驱动后才能正常模拟浏览器进行数据获取。
运行结果如下: