识别假货有绝招,先用python抓淘宝评论(附视频教程)

浏览: 1633

之前我水平有限,对于淘宝评论这种动态网页,由于数据在网页源码中是找不到的,所以无法抓取数据,只能使用selenium模仿人操控浏览器来抓数据,

优点是可见容易且不宜被淘宝公司封锁;缺点是速度太慢。

经过今天一天的钻研,终于学会分析数据包,而且淘宝评论的数据包都是以json格式传输的。除了学会抓包,还要会从json中提取出想要的评论数据才行。

本文实现难点:

一、分析数据包,找到淘宝评论传输用的网址,分析网址特点

二、如何从找到的数据包中,从json格式内容中得到想要的数据

案例

德国博朗oralb/oral b 欧乐b电动牙刷 成人充电式家用 D12清亮

网址如下

https://v.qq.com/x/page/a03841rsxnu.html

打开该网址,点击评论

如图中红色圈中的评论,分析发现,在网页源码中查找不到。



找啊找,找啊找,圈中的评论就是不在网页源码中。那只有一种可能,在我们看不到的方式传送。

Clipboard Image.png

用火狐浏览器,打开开发者工具,点击网络


真的找到了啊

接下来我们要知道这个包传递信息的网址

点击消息头,红方框中的请求网址就是这个评论数据包传递的网址

Clipboard Image.png


网址如下

https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3¤tPage=1&append=0&content=1&tagId=&posi=&picture=&ua=250UW5TcyMNYQwiAiwTR3tCf0J/QnhEcUpkMmQ=|Um5Ockt+RH9FfEZ6QXpEcCY=|U2xMHDJ+H2QJZwBxX39RaVV7W3UyWzAeSB4=|VGhXd1llXGlTaFJrUW1WbVNnUG1PdkN7TnBNeUxzR3pFeEB/QG44|VWldfS0TMwc4BycbIwMtBn0AbSJNNl87ZBVaMRo6FEIU|VmhIGCIWNgsrFy4XKgo0ATkDIx8mHyICNgs2FioUIBo6DjMOWA4=|V25OHjBVPF07RT5XLgAgFCEUNAgxCDQULRAoHUsd|WGFBET8RMQ02Di4SKhIvDzQJNAoxZzE=|WWBAED5bMlM1SzBZIA4uGy4VNQkxCzISJhwjGCN1Iw==|WmNDEz1YMVA2SDNaIw0tES0QLw8zCzIIKBwmHCMWQBY=|W2JCEjxZMFE3STJbIgwsEicbOwc+AToaJhoiFi0RRxE=|XGVFFTteN1YwTjVcJQsrEisePgI8CDERLRkmEiseSB4=|XWREFDpbJksuYgZvFXUwWjhVPkNtTXZKclJuUWhUdEt2SXRAfCp8|XmdHFzkXNws3Az4eIh4rFDQLNg8xBThuOA==|X2ZGFjgWNgkxDy8TKh8hAT4DOAY9B1EH|QHlZCSdMK09uA3IPdB0zEy8TLRMzDzAFORkmGyAUKx5IHg==|QXlZCSdCK0osUilAORc3Z1ltVHRIdk96LAwxET8RMQ4wBTAOO207|QnpaCiQKKnpDeUFhXWFZYUF4RH1dYVt7R3hNbVFqPBwhAS8BIRgnEywRLHos|Q3pHelpnR3hYZF1hQX9HfV1kRHhFZVFxRGRefkVlXX1EZFp6RWVZeU1tWA4=&isg=Anl5FLTxBcTYINlX61XKverNieN0fW04cSauNZurS6AfIpO049emCPMw0pst&needFold=0&_ksTS=1487675147352_694&callback=jsonp695

看起来网址太长,太复杂(稍安勿躁),那么先复制网址,在浏览器上打开看看是什么东西

Clipboard Image.png

复杂的网址中,有些乱七八糟的可以删除,有意义的部分保留。切记删除一小部分后先尝试能不能打开网页,如果成功再删减,直到不能删减。最后保留下来的网址,如下

https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3&callback=jsonp698¤tPage=1

currentPage=1意思是当前页码是第一页。如果改动为currentPage=3表示是第三页。

好了,下面是代码

import requests

import json

import simplejson

headers = {

'Connection': 'keep-alive',

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0'

}

base_url = 'https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&' \

'spuId=279689783&sellerId=92889104&order=3&callback=jsonp698'

#在base_url后面添加&currentPage=1就可以访问不同页码的评论

#将响应内容的文本取出

tb_req = requests.get(base_url, headers=headers).text[12:-1]

#将str格式的文本格式化为字典

tb_dict = simplejson.loads(tb_req)

#编码: 将字典内容转化为json格式对象

tb_json = json.dumps(tb_dict, indent=2)  #indent参数为缩紧,这样打印出来是树形json结构,方便直观

#解码: 将json格式字符串转化为python对象

review_j = json.loads(tb_json)

#这里的0是当前页的第一个评论,每页面其实是有20个评论的

print(review_j["rateDetail"]["rateList"][0]['rateContent'])

推荐 1
本文由 邓旭东HIT 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

好东西
O(∩_∩)O~

要回复文章请先登录注册