Python爬虫--京东商品评论



京东网站是我经常去购物的网站,现在来爬京东商品的评论。有时候网速慢,打开评论的时候还要等一会,一直在加载,也证明了其评论是网页动态加载的。
而去爬取动态加载的网页,无非就是查看其 js 请求和使用 selenium 工具,这里使用了前者的方法,比较简单。


查看动态 js 请求

先打开开发者工具,然后再打开京东商品 iPhone X 评论页面,可以看到,请求列表中有一个 productPageComments 文件,打开它,点击 Preview 标签,下面的数据是 json 形式,再点击 Comments ,查看其中正是需要的评论数据。

js 文件网址 : https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv75398&productId=5089253&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1

对 js 文件进行请求

1
2
3
4
5
6
7
8
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
}

url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv75398&productId=5089253&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
response = requests.get(url, headers=headers)
print(response.text)

在这段代码中,先查看对 js 文件网址请求之后,得到的数据是什么。

输出的数据为 json 形式,但是数据首尾都有一些多余数据,为了把它变成正常的 json 形式,我们用 replace 方法替换掉多余部分。

1
2
3
4
result = response.replace('fetchJSON_comment98vv75398(', '')
result = result.replace(');', '')
json_so = json.loads(result)
print(json_so)

这样我们输出的数据就是正常的 json 格式,可以进行提取信息的操作了。

提取数据并构造翻页网址

把上一步输出的数据放入 json在线解析 网页中进行解析,得到如下图。

证明我们上一步操作没问题,接下来提取数据。

1
2
3
4
5
6
7
8
items = json_so.get('comments')
for item in items:
id = item.get('id')
content = item.get('content')
create_time = item.get('creationTime')
nick_name = item.get('nickname')
client = item.get('userClientShow')
print(id, nick_name, content, create_time, client)

这样就可以得到商品评论的 id, 内容,评论时间,评论人昵称和评论人客户端信息,如下图。

接下来要构造翻页网址,通过观察每一评论页网址,发现其参数中有个 page 参数,这个是页码参数,所以我们只要对 url 中传入不同的 page 值,就可以进行翻页。

1
2
for page in range(10):
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv75398&productId=5089253&score=0&sortType=5&page=' + str(page) + '&pageSize=10&isShadowSku=0&fold=1'

整理数据

最后把评论信息都写入文件中,如下图。

保存至本地文本文件

保存至MongoDB数据库

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import requests
import json
import pymongo

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
}

file = open('jd_com.txt', 'w', encoding='utf-8')
client = pymongo.MongoClient('localhost', 27017)
db = client['jd']
collection = db['jdcom_spider']

for page in range(10):
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv75398&productId=5089253&score=0&sortType=5&page=' + str(page) + '&pageSize=10&isShadowSku=0&fold=1'
response = requests.get(url, headers=headers)
html = response.text
result = html.replace('fetchJSON_comment98vv75398(', '')
result = result.replace(');', '')
json_so = json.loads(result)
items = json_so.get('comments')
for item in items:
id = item.get('id')
content = item.get('content')
create_time = item.get('creationTime')
nick_name = item.get('nickname')
client = item.get('userClientShow')
data = {
'id': id,
'内容': content,
'评论时间': create_time,
'昵称': nick_name,
'客户端': client
}
# 保存至本地文本文件
file.write(str(data) + '\n')
# 保存至MongoDB数据库
if collection.insert(data):
print('保存至MongoDB成功')

-------------本文结束感谢您的阅读-------------

本文标题:Python爬虫--京东商品评论

文章作者:Tang

发布时间:2018年04月15日 - 20:04

最后更新:2019年01月20日 - 18:01

原始链接:https://tangx1.com/jd_comments/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%