(育碧福利)爬取京东商品信息并保存为表格
本帖最后由 青出于蓝 于 2024-7-18 19:27 编辑前言
0.1 作品信息
写作时间: 1天
代码行数: 88行
使用方法详见下个板块!
0.2 效果展示
这个小程序可以把京东上有关商品的名称,价格,好评数,好评率,中评数,差评数都放到一个表格里
效果图附上:
https://xxx.ilovefishc.com/album/202207/23/161201flxylznylrmn8rkm.png
敲代码不易,还请各位评分支持!
https://xxx.ilovefishc.com/forum/202009/21/195438p422dq87ljj2jklr.gif
p.s 请点击目录切换内容 。
使用指南
1.1使用前准备
程序调用了几个第三方库,需要在cmd(终端)中下载
1.1.1lxml(解析html)
请输入pip install lxml
1.1.2 requests (获取html)
请输入pip install requests
1.2输入信息
用户需要输入要查询的商品名称 以及 关键字信息 (店铺等等)
ps:一页30行,本程序只爬取一页数据(即30个商品信息) 但是要注意,爬取过多会因为请求过于频繁被封
1.3 查看结果
程序运行完后,结果会保存程序同级目录下,文件名为: 商品名称 京东筛查结果.xlsx
再次附上效果图
https://xxx.ilovefishc.com/album/202207/23/161201flxylznylrmn8rkm.png
这个表格里会呈现30行的数据。打开列表,可以看到单元格有各种颜色,分别代表 最高价,最低价,最多评论,100%好评率
1.4易出问题
1.4.1 程序报错
很有可能是爬取过于频繁导致验证,等一段时间即可
1.4.2时效性
爬虫有时效性,如果失效,还请@我
获取源码,初步解析
2.1 爬取价格
2.1.1 获取源码
获取源码,这里用的requests板块,火狐浏览器User-Agent伪装
html=requests.get(url,headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0"}).text
去掉不必要的参数 网址可简化为:https://search.jd.com/Search?keyword=商品名称
https://xxx.ilovefishc.com/album/202108/06/204733klni2l4fuiu96voi.png
2.1.2 爬取价格
如图,京东每一个商品都在li标签里,我们从这里开始匹配,用contains来匹配class为gl-item。
下一级为div标签,还是要匹配class为p-price的标签
https://xxx.ilovefishc.com/album/202108/06/210125zkcl11ha0ulvh3uq.png
price=etree.HTML(html).xpath('//li/div/div//i/text()')
2.2爬取商品名称
按照常规思路
一页有30个商品,而解析出来的列表元素却有40多个?而且每个页面爬出来的元素个数还不一样。
后来把网站源码保存到本地,发现了问题。
如图:
https://xxx.ilovefishc.com/album/202108/07/072722loz8z5s8kkdxo8sr.png
中间还有一个font,则一个商品可能会爬出多个文本!
解决方法:
我们可以把每个em标签遍历,获取其中文本,如果它>1,就把他们拼接,把拼接后的文本内容放到name2列表里(em标签的列表名称是name)
代码:
**** Hidden Message *****
再次实验,发现name2元素数量为30,核对内容也符合,商品名称也就爬取完毕了。
爬取评论数据写入
3.1 网页分析
大多数时间都耗在了这里,F12开发者工具是能看到评论数量的,但爬下来就不行了
后来知道是动态信息,需要抓包
https://xxx.ilovefishc.com/album/202207/23/163408kbo9o6zano00yoza.png
rt,找到有关好评数,差评数,好评率等等信息的包
分析这个网址(已经去掉了不必要的参数)
https://club.jd.com/comment/productCommentSummaries.action?referenceIds=5775105,10050213314591,100022384826,10028950066440,100039318870,10054677363968,10028075826893,100011178096,100026629591,10030888665202,100024901358,10053671761577,4107193,10026531039827,42612339450,100010799914,10050985331675,4639353,100035985122
发现后边有一串数字,每个数字对应一件商品
那这串数字大概就是标签
https://xxx.ilovefishc.com/album/202207/23/164056u20b3co2xwxo3nz2.png
看看 a标签,易得,这个标签就是链接
sign_re=[]
url2='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='
for i in sign:
sign_re.append(i)
抓包完成!
3.2写入数据
3.2.1 染色
后期有需求需要找出最大评论数与最大最小的好评数
有些好评数是 1万+ 2万+
那就需要处理一下
op=),min()]
new=[]
input()
for i in good:
if i[-2:]=='万+':
new.append(str(float(i[:-2])*10000))
elif i[-1]=='+':
new.append(i[:-1])
else:
new.append(i)
og=max()
openpyxl
这里数据呈现使用openpyxl
官方教程:传送
使用
源代码
**** Hidden Message *****
文章是10个月以前写的,当时的代码与呈现的代码有一点出入,功能也有一些区别,所以小部分文章可能与实际代码不符 @小甲鱼 @不二如是 申精{:10_268:} {:10_275:} {:10_256:} 排版还需要加强一下~ 多些分享 {:10_256:}{:10_256:}{:10_256:} 申精#文章格式建议【官方指导】
https://fishc.com.cn/thread-146275-1-1.html
(出处: 鱼C论坛)
@小甲鱼 @不二如是 重新编辑了一下,再看看? {:10_256:} {:10_275:} {:10_254:} 厉害,厉害{:9_236:} {:10_254:} {:10_249:} {:5_97:} 牛 {:10_254:} {:10_275:}厉害 {:10_254:}厉害呀