import requests
import json
from urllib.parse import urlencode;
首先我们找到了商品评论的真实的url,通过requests库得到了网页源代码,在通过解析json文件得到了商品评价
// An highlighted block
#
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv13370&productId=100004323294&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
res = requests.get(url, headers=headers)
print(res.status_code) # 返回的状态码是200
print(res.text) # 返回的内容是空,与我们在网页上看到的内容不一致,说明我们这个代码是有问题的。
在请求头中加入了’referer'参数,使得返回正确的内容。
// An highlighted block
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv13370&productId=100004323294&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
'referer':'https://item.jd.com/100004323294.html'
}
res = requests.get(url, headers=headers)
print(res.status_code) # 查看状态码
print(res.text) # 返回res中的数据信息
对上面获得的res.text进行json解析
data = json.loads(res.text) # 这里会报错
在我们进行json解析时,对传入的数据是要严格满足json格式的。json数据是由键值对组成的数据
,类似于python中的字典形式。
再看一下之前返回的数据,发现确实有些毛病。在对数据进行json解析时大家应该多观察观察解析的对象满足json格式吗?
// An highlighted block
html = res.text
data = html.replace(callback,'') # 发现多出来的字符串是url中的callback参数,
data = data.replace('(','')
data = data.replace(')','')
data = data.replace(';','')
data = json.loads(data) #将处理的数据进行解析
pritn(data) # 打印下来
打印结果
for i in data['comments']:
print(i['content']) #将内容打印出来。
print('------------')
以上的工作做好后将代码整理一下,并且使用for循环爬取更多的评论
import requests
import json
from urllib.parse import urlencode
callback = 'fetchJSON_comment98vv13370'
def get_url(page): # 获得每一页评论的url
url_ = 'https://sclub.jd.com/comment/productPageComments.action?'
params = {
'callback': 'fetchJSON_comment98vv13370',
'productId': 100004323294,
'score': 0,
'sortType': 5,
'page': page,
'pageSize': 10,
'isShadowSku': 0,
'fold': 1
}
url = url_ + urlencode(params)
print(url)
return url
def get_html(url): # 返回评论真实的网页内容
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
'referer':'https://item.jd.com/100004323294.html'
}
res = requests.get(url, headers=headers)
return res.text
def get_json(html,callback): # 得到评论的json数据
data = html.replace(callback,'')
data = data.replace('(','')
data = data.replace(')','')
data = data.replace(';','')
data = json.loads(data)
return data
for i in range(10): # 爬取10页评论
url = get_url(i)
html = get_html(url)
data = get_json(html, callback)
for i in data['comments']:
print(i['content'])
print('---------')
1 、注意请求头的设置
2、进行json解析时需要注意数据格式
这是我第一次写博客,代码书写方面如有不规范或者不正确的地方,望大家多指教,以上的内容希望对大家有所帮助。
一名普通的本科在读生。