爬取京东商品评价

导入库

import requests 
import json
from urllib.parse import urlencode;

通过观察的到商品评价的真实URL

在这里插入图片描述

查看json文件的previews

检验后我们的想法是正确地!

整理一下思路:

首先我们找到了商品评论的真实的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中的数据信息

这里返回了正确的信息

接着进行json解析

对上面获得的res.text进行json解析
data = json.loads(res.text)  # 这里会报错

在这里插入图片描述
在我们进行json解析时,对传入的数据是要严格满足json格式的。json数据是由键值对组成的数据
,类似于python中的字典形式。

再看一下之前返回的数据,发现确实有些毛病。在对数据进行json解析时大家应该多观察观察解析的对象满足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('---------')

这里得到了10页评论。

注意事项:

1 、注意请求头的设置
2、进行json解析时需要注意数据格式

结语

这是我第一次写博客,代码书写方面如有不规范或者不正确的地方,望大家多指教,以上的内容希望对大家有所帮助。

一名普通的本科在读生。

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值