青出于蓝 发表于 2022-7-23 17:44:28

(育碧福利)爬取京东商品信息并保存为表格

本帖最后由 青出于蓝 于 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 *****


青出于蓝 发表于 2022-7-23 17:46:07

文章是10个月以前写的,当时的代码与呈现的代码有一点出入,功能也有一些区别,所以小部分文章可能与实际代码不符

青出于蓝 发表于 2022-7-23 17:46:52

@小甲鱼 @不二如是 申精{:10_268:}

柿子饼同学 发表于 2022-7-23 21:36:51

{:10_275:}

小甲鱼 发表于 2022-7-23 22:00:01

{:10_256:} 排版还需要加强一下~

BGM在逃123 发表于 2022-7-24 06:04:20

多些分享

kerln888 发表于 2022-7-24 09:08:28

{:10_256:}{:10_256:}{:10_256:}

不二如是 发表于 2022-7-24 09:28:46

申精#文章格式建议【官方指导】
https://fishc.com.cn/thread-146275-1-1.html
(出处: 鱼C论坛)

青出于蓝 发表于 2022-7-24 09:59:47

@小甲鱼 @不二如是 重新编辑了一下,再看看?

tiger20100907 发表于 2022-7-24 10:13:11

{:10_256:}

1molHF 发表于 2022-7-24 13:21:46

{:10_275:}

2022xsy 发表于 2022-7-24 15:37:28

{:10_254:}

小伤口 发表于 2022-7-24 16:35:20

厉害,厉害{:9_236:}

Rosaaa 发表于 2022-7-24 17:00:54

{:10_254:}

chenmingfan 发表于 2022-7-24 18:44:19

{:10_249:}

kkl44stupid 发表于 2022-7-24 20:52:51

{:5_97:}

两仪凯露 发表于 2022-7-24 22:02:37

N781791878 发表于 2022-7-24 23:05:02

{:10_254:}

rnm4000 发表于 2022-7-25 09:05:39

{:10_275:}厉害

theS 发表于 2022-7-25 09:23:32

{:10_254:}厉害呀
页: [1] 2 3 4 5 6 7
查看完整版本: (育碧福利)爬取京东商品信息并保存为表格