Python动态爬虫爬取京东商品评论

本文介绍如何利用Python爬取京东商品的动态评论数据。通过分析京东评论页面动态加载机制,找到评论JSON文件URL并进行爬取。文章提供完整代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 动态爬虫爬取京东商品评论

1. 概述

京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法。

动态爬虫,即针对动态加载JSON文件网页的爬虫,其原理与静态爬虫没有本质区别,只是不爬取所见的静态目标网页,而是寻找该网页所加载的JSON文件,爬取JSON文件中的内容。

2.目标观察

观察京东具体商品评论页面:

<京东商品详情页>

点击商品评价页:

<评价>

发现商品评价翻页的url不改变,可推测出其采用动态加载的方式,同时,会发现直接获取该页面并没有评论的内容。

因此我们寻找其动态加载文件。

右键打开检查模式,点击network按钮:

<network按钮>

在网页中点击下一页,观察右侧栏中新加载出来的文件:

在这里插入图片描述

发现可能是评论内容文件,点击查看,发现确实如此,复制下该文件的url:

<json文件>

3. 具体爬取

从上文中我们获取到了商品评论的动态加载文件的url,接下来我们至需要对该文件进行get爬取即可。

同静态爬虫类似,构造header,输入网址,并使用get进行请求,下载其文本内容。

header = {"user-agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
url = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100021400874&score=0&sortType=5&page=2&pageSize=10&isShadowSku=0&rid=0&fold=1"
time.sleep(random.random())
content = requests.get(url = url,headers = headers).text

然后我们观察get到的content内容,发现并不是静态网页的HTML,而是一种类似于字典的文本内容,这即是JSON文本格式,但京东获取到的JSON文本有干扰,不是一个完全的类似字典类型文本,因此我们需要去除掉花括号前后的无意义字符串:

if content != None:
                content = content.strip('fetchJSON_comment98vv385();')

然后我们使用json模块对其进行解析,并从中提取我们需要的信息:

jbs = json.loads(content)
comments = jbs["comments"]
for comment in comments:
    print(comment["id"],":",comment["content"])

从而我们就得到了京东商品评论。

4. 全部代码:

header = {"user-agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
url = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100021400874&score=0&sortType=5&page=2&pageSize=10&isShadowSku=0&rid=0&fold=1"
time.sleep(random.random())
content = requests.get(url = url,headers = headers).text
if content != None:
                content = content.strip('fetchJSON_comment98vv385();')、
        jbs = json.loads(content)
comments = jbs["comments"]
for comment in comments:
    print(comment["id"],":",comment["content"])
### 使用Python爬虫获取京东商品评论数据 为了从京东平台抓取商品的用户评价,需先准备好相应的开发环境[^1]。这通常意味着安装必要的库文件,比如`requests`用于发起HTTP请求,`BeautifulSoup`或`lxml`用于解析HTML文档,还有可能需要`pandas`处理和保存数据。 在实际操作过程中,当访问特定的商品详情页时,可以通过浏览器开发者工具(F12)监控网络活动来识别加载评论区所使用的API接口及其传递参数[^2]。这些参数一般包括但不限于产品ID、分页索引等信息,它们帮助定位到具体的评论记录集合。 一旦确定了API端点URL模式及所需查询字符串后,就可以利用Python脚本来模拟发送GET/POST请求,并接收服务器返回的内容。由于返回的是JSON格式的数据流,因此要调用`.json()`方法将其转换成易于处理的对象结构以便后续提取有用字段,如用户名、评分星级、发表时间戳以及具体内容描述等[^4]。 下面是一个简化版的例子展示如何构建这样的爬虫: ```python import requests from pandas import DataFrame def fetch_reviews(product_id, page=0): url = f"https://api.m.jd.com/comment/skuProductPageComments?callback=fetchJSON_comment98&productId={product_id}&score=0&sortType=5&page={page}&pageSize=10" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Referer': f'https://item.jd.com/{product_id}.html' } response = requests.get(url=url, headers=headers).text.replace('fetchJSON_comment98(', '').replace(');', '') data = eval(response) reviews = [] for item in data['comments']: review = { "username": item["nickname"], "rating": item["score"], "date": item["creationTime"], "content": item["content"] } reviews.append(review) return reviews if __name__ == "__main__": product_id = input("请输入想要抓取评论的产品编号:") all_reviews = [] try: for i in range(10): # 假设只抓取前十页 new_reviews = fetch_reviews(product_id, i) if not new_reviews: break all_reviews.extend(new_reviews) df = DataFrame(all_reviews) df.to_csv(f"{product_id}_reviews.csv", index=False, encoding='utf_8_sig') print("成功导出了CSV文件.") except Exception as e: print(e) ``` 此代码片段展示了基本的工作流程:定义函数`fetch_reviews`接受商品ID和其他可选参数;设置合适的HTTP头以模仿真实用户的浏览行为;向指定地址发出请求并解析得到的结果;最后将收集来的多条评论汇总至列表再转存为CSV表格形式供进一步分析使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值