[Python]python+selenium抓取京东商品数据(商品名称,售
价,店铺,分类。。。
⽬录
⼀、环境
win10 + python 3.7 + pycharm64 + selenium
⼆、简介
抓取京东商品页⾯信息:商品名称,售价,店铺,分类,订单信息,好评率,评论等----这⾥以'每周⼀花'为例
三、京东⽹页分析
采集思路如下:
此次主要采集以下字段数据:
java中synchronized的用法title:商品名称
price:售价
brand:品牌
shop_name:店名
weight:商品重量
user:适⽤⼈
classify:商品分类
comment_num:系列商品总评论数
praise_degree:系列商品总好评度
tag_list:系列商品总评价标签
single_comment_num:当前商品评论条数
single_tags:当前商品评价标签
member:顾客会员级别
star:评星等级
comment:评语
pic_num:评论图⽚数/视频数
order:订单详情(包含订单形式、下单⽇期等)
1.获取商品信息⼊⼝--商品列表链接获取
爬取
php编程实例代码
商品信息⾸先得有商品信息⼊⼝,这⾥直接从京东的分类中进⼊商品列表页⾯,没有对搜索关键词进⾏处理,仅处理了商品的页码。
翻看⽹页,发现共有16页,想⽤点击下⼀页(click()的⽅式)实现翻页,获取每⼀个商品列表链接。
这⾥有个坑需要注意:class='pn-next disabled',在第16页依旧可以到,如果以此设置click() 在第16页后依旧会执⾏,抓取到别
的类⽬的链接。
踩坑后⽤设置url的⽅式获取商品列表链接。
翻看多页发现url⾥的页码关键字:
page:页码(奇数递增)
s:sku数(page*60+1)
构建请求url:
url='search.jd/Search?keyword=%E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%AF%8⽹页对搜索关键词进⾏了加密,将 ‘ 每周⼀花 ’ 转化为 ' %E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1 '
可以⽤ request.unquote()对其解密
⼀共16页,⽤for循环获取所有商品列表链接:⽤urltrue_list接收数据
#获得京东每周⼀花的16个商品列表链接这⾥可以定义函数,传⼊要抓取的关键字或页数,使其更加灵活
urltrue_list=[]
for i in range(16):
url='search.jd/Search?keyword=%E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%AF%8F%E    urltrue=request.unquote(url)flutter热更新
urltrue_list.append(urltrue)
2.获取商品信息⼊⼝--商品详情链接获取
打开商品列表链接,每⼀页都有60个商品,如果直接抓取会发现只能抓到30个,原因是:后30条信息是动态加载的
我的解决办法是设置拖拽,使其将页⾯加载完整
#定义函数缓慢拖拽页⾯,使其加载完成
def buffer():
for i in range(50):
time.sleep(0.3)
这样就可以获取到⼀页⾥的60个商品详情链接了,同样⽤for循环获取所有的商品详情链接:
detail_urls = []
def get():
for each in urltrue_list:
<(each)  # 遍历每个列表链接
time.sleep(5)
global detail_urls
buffer() # 缓冲,使页⾯加载完整
info = browser.find_elements_by_class_name('gl-i-wrap')# 寻商品链接的⽗阶
for line in info:电脑新手入门必学
# 获取商品列表页所有的商品链接
detail_url = line.find_element_by_class_name('p-img').find_element_by_tag_name('a').get_attribute('href')            detail_urls.append(detail_url)
time.sleep(3)
print(len(detail_urls)) # 查看长度确认是否抓取了60个连接
return detail_urls  # 返回商品列表页所有的商品链接组成的列表
get()
3.商品详情获取
有了商品详情链接就有了真正的数据采集⼊⼝。
要采集下⾯截图橘黄框中的信息。
在线文档转普通文档
⼀开始是⽤request抓取信息的,但是抓取时发现⼀些例如价格,评论条数等动态的数据抓取不到,所以改⽤selenium抓取
for each detail_urls: # 获取商品详情链接
browser.maximize_window()# 最⼤化窗⼝
<(each)
time.sleep(3)
京东python入门教程buffer()
#获取商品名称
title = browser.find_element_by_class_name('sku-name').text
#获取价格(当前商品价格)
price = browser.find_element_by_class_name('p-price').find_elements_by_xpath('span')[1].text
#获取系列商品总评论条数(有不同规格)
comment_num = browser.find_element_by_id('comment-count').find_element_by_tag_name('a').text
#获取品牌
brand = browser.find_element_by_id('parameter-brand').find_element_by_tag_name('a').text
#获取店名
shop_name = browser.find_element_by_class_name('p-parameter').find_elements_by_tag_name('li')[3].get_attribute(
'title')
#获取商品重量
weight = browser.find_element_by_class_name('p-parameter').find_elements_by_tag_name('li')[4].get_attribute('title')
#获取适⽤⼈
user = browser.find_element_by_class_name('p-parameter').find_elements_by_tag_name('li')[5].get_attribute('title')
#获取分类
classify = browser.find_element_by_class_name('p-parameter').find_elements_by_tag_name('li')[6].get_attribute('title')
buffer()
#获取系列商品总好评度(有不同规格)
praise_degree=browser.find_element_by_class_name('percent-con').text
#获取系列商品总评价标签(有不同规格)
tag_list = []
tags = browser.find_elements_by_class_name(' tag-1')
for tag in tags:
tag_list.)
browser.find_element_by_id('comm-curr-sku').send_keys(Keys.SPACE)  # 只看当前商品评价
# 当前商品评论条数(单个)
single_comment_num = browser.find_element_by_class_name('filter-list').find_elements_by_tag_name('em')[0].text
# 当前商品评价标签
single_tags = browser.find_element_by_class_name('filter-list').find_elements_by_tag_name('li')[1:7]
single_tag_list = []
for each in single_tags:
det = each.find_element_by_tag_name('a').text
single_tag_list.append(det)
4.商品评论获取
这个部分主要⽤来抓取评论详情,查看了多个商品详情,发现不管评论有多少条,最多只显⽰50页的数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。