python爬虫(爬取京东商品评论)

前言

如果只需要代码可以跳转到最后一步(记着更换商品ID和评论页的的页数

话不多说,直接开干!

文章所提供的代码不能用于商业用途 仅建议学习交流使用 否则后果自负
部分代码来源于网络 如有侵权私我立删 谢谢

今天要干的活

京东某口罩产品的全部评价,要爬取的数据

最终结果

遇到问题(重点!!)

今天使用的方法就是用requests请求获取页面数据 返回并且分析其结果。

今天的重点在于京东商品全部评价的问题。我们今天要爬取的这个商品评论显示的数据为10w+的 但是我们会发现 一个页面只有10条 就算显示全部页面也只有100页 那么就是1000多条 那么!剩下的数据 去了哪里呢??你品 你细品??

我在网上查阅了很多资料 发现很多博主都是直接爬取100页,这样将会导致数据的不完整。

我总结下此文章的内容!

假如一个商品全部评论数据为20w+ 默认好评15w+ 这15w+的默认好评就会不显示出来。那么我们可以爬取的数据就只剩下5w+ 接下来 我们就分别爬取全部好评 好评 中评 差评 追加评价 但是就算这些数据加起来 也仍然不足5w+ 上文的博主猜测可能有两点原因:

1.出现了数据造假,这个数字可能是刷出来的(机器或者水军)
2.真的有这么多的评论,但这时候系统可能只显示其中比较新的评论,而对比较旧的评论进行了存档。

在博主理论的基础上我也进行了很多相应的测试,就是说无论如何 我们最终都爬不到剩下的5w条数据 只能爬取一部分但这一部分数据也将近上千多条 如果有小伙伴能爬取下更多欢迎补充。

整体思路

全部评价 好评 中评 差评 追加评价的网址都是涉及到一定的参数的 只要修改网页的数据, 修改遍历页码 即可完成全部的爬取。

分析URL

我们首先解析全部数据中的url 其实大家爬虫写多了就会知道 东京 淘宝这些页面的数据绝对不可能requests请求获取完毕的 所以我们将从json文件中下手。

先复制一条全部评论的数据–》F12–》网络–》Ctrl+f 粘贴一条评论上去 可以发现显示出一个对应的网址 打开其url查看数据

其实这是一个特别的json文件 所以浏览器的json插件没给我们直接按标准格式显现出来。需要我们手动打开http://json.cn网址 将这些内容复制上去 注意因为不是标准格式所以需要删除开头的fetchJSON_comment98(【注意 !!这里也要删除那个小括号】和结尾的);

真的亲妈级的教程了, 手把手教(忽略我的不要脸)

所以我们发现https://club.jd.com/comment/productPageComments.action?&productId=100008054085&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1这个就是对应评论的url了 。

接下来我将解释其中的重要参数。

productid相当于,你在京东买XR苹果手机 有黑色 白色 银色等 一个颜色分类就对应一个ID,但其实这个并不重要,无论产品分类id如何,都不影响数据的多少。

page为其对应的页码数,需要注意的是,不是所有评价页面都有100页的

score表示为评论的数据类型,如 0全部评价 1好评 2中评 3差评 5追加评价

说到这一部分 相信大家聪明的小脑瓜子应该知道怎么写了吧。我们只需要依次修改score抓取其下全部数据即可

# 函数:发起请求到京东并获取特定页面的数据``def start(page):`    `# 构建京东商品评论页面的URL`    `url = ('https://club.jd.com/comment/productPageComments.action?'`           `'&productId=100041430694'  # 商品ID`           `f'&score=0'  # 0表示所有评论,1表示好评,2表示中评,3表示差评,5表示追加评论`           `'&sortType=5'  # 排序类型(通常使用5)`           `f'&page={page}'  # 要获取的页面数`           `'&pageSize=10'  # 每页评论数`           `'&isShadowSku=0'`           `'&fold=1')``   `    `# 设置headers以模拟浏览器请求`    `headers = {`        `"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36"`    `}``   `    `time.sleep(2)`    `# 发送GET请求获取数据`    `response = requests.get(url=url, headers=headers)`    `# 将返回的JSON数据解析为字典`    `data = json.loads(response.text)`    `return data

解析页面

大家其实写多了就会知道 其实json格式下数据的提取是很容易的 这里就不解释啦。有问题可以评论区告诉我

处理好的数据,为标准json格式

# 解析函数:从返回的数据中提取所需信息``def parse(data):`    `items = data['comments']`    `for i in items:`        `yield (`            `i['id'],`            `i['creationTime'],`            `i['content']`        `)

写入文件

# CSV函数:将数据写入CSV文件``def csv(items, file_path='建水紫陶.csv'):`    `# 如果文件不存在,创建文件并写入列名`    `try:`        `pd.read_csv(file_path)`    `except FileNotFoundError:`        `df = pd.DataFrame(columns=['id', '时间', '内容'])`        `df.to_csv(file_path, index=False, encoding='utf-8')``   `    `# 将数据写入CSV文件,header参数用于控制是否写入列名`    `df = pd.DataFrame(items, columns=['id', '时间', '内容'])`    `df.to_csv(file_path, index=False, mode='a', header=False, encoding='utf-8')

总代码

# 导入必要的库``import requests``import json``import time``import pandas as pd``   ``   ``# 函数:发起请求到京东并获取特定页面的数据``def start(page):`    `# 构建京东商品评论页面的URL`    `url = ('https://club.jd.com/comment/productPageComments.action?'`           `'&productId=100041430694'  # 商品ID`           `f'&score=0'  # 0表示所有评论,1表示好评,2表示中评,3表示差评,5表示追加评论`           `'&sortType=5'  # 排序类型(通常使用5)`           `f'&page={page}'  # 要获取的页面数`           `'&pageSize=10'  # 每页评论数`           `'&isShadowSku=0'`           `'&fold=1')``   `    `# 设置headers以模拟浏览器请求`    `headers = {`        `"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36"`    `}``   `    `time.sleep(2)`    `# 发送GET请求获取数据`    `response = requests.get(url=url, headers=headers)`    `# 将返回的JSON数据解析为字典`    `data = json.loads(response.text)`    `return data``   ``   ``# 解析函数:从返回的数据中提取所需信息``def parse(data):`    `items = data['comments']`    `for i in items:`        `yield (`            `i['id'],`            `i['creationTime'],`            `i['content']`        `)``   ``   ``# CSV函数:将数据写入CSV文件``def csv(items, file_path='建水紫陶.csv'):`    `# 如果文件不存在,创建文件并写入列名`    `try:`        `pd.read_csv(file_path)`    `except FileNotFoundError:`        `df = pd.DataFrame(columns=['id', '时间', '内容'])`        `df.to_csv(file_path, index=False, encoding='utf-8')``   `    `# 将数据写入CSV文件,header参数用于控制是否写入列名`    `df = pd.DataFrame(items, columns=['id', '时间', '内容'])`    `df.to_csv(file_path, index=False, mode='a', header=False, encoding='utf-8')``   ``   ``# 主函数:控制整个爬取过程``def main():`    `total_pages = 4  # 设置要爬取的总页数``   `    `for j in range(total_pages):`        `time.sleep(1.5)`        `current_page = j + 1`        `# 发起请求并获取数据`        `data = start(current_page)`        `# 解析数据`        `parsed_data = parse(data)`        `# 将数据写入CSV文件`        `csv(parsed_data)`        `print('第' + str(current_page) + '页抓取完毕')``   ``   ``# 如果作为独立脚本运行,则执行主函数``if __name__ == '__main__':`    `main()``   

最后,理性交流学习,看到这里了,麻烦动动你的小手给我点点赞吧!

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员二飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值