技术 | Python从零开始系列连载(二十八)

简介: 之前我水平有限,对于淘宝评论这种动态网页,由于数据在网页源码中是找不到的,所以无法抓取数据,只能使用selenium模仿人操控浏览器来抓数据, 优点是可见容易且不宜被淘宝公司封锁;缺点是速度太慢。 经过今天一天的钻研,终于学会分析数据包,而且淘宝评论的数据包都是以json格式传输的。

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

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

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

本文实现难点:

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

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

案例

9e74a19babdb67e53c7d93fc29f1d47437b3a26a
https://detail.tmall.com/item.htm?id=38975978198&ali_refid=a3_430582_1006:1106461044:N:%E7%94%B5%E5%8A%A8%E7%89%99%E5%88%B7:bfee1d767fa0a91e5e853b29d794c6f2&ali_trackid=1_bfee1d767fa0a91e5e853b29d794c6f2&spm=a230r.1.14.1.R0FzCm

打开该网址,点击评论

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

6c7c475c2c5ac2f2aec29b0f0f3dcfb7a9782951

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

319a3faeee7f6700eede26f93188e77b086dae89

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

a4803387b8827daa367502d9b70a0ee6ca023b4d

真的找到了啊

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

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

964c877ffe703078358b9ef8f9b384d3c659717e

网址如下

https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3&currentPage=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

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

a223347a41b605134bcd67761c835b89f4345b3d

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

https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3&callback=jsonp698&currentPage=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'])

上面只是抓了一个评论。下面是抓取近100页的网页所有评论,代码如下


import requests
import json
import time
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就可以访问不同页码的评论

for i in range(2, 98, 1):
url = base_url + '&currentPage=%s' % str(i)
#将响应内容的文本取出
tb_req = requests.get(base_url, headers=headers).text[12:-1]
print(tb_req)

#将str格式的文本格式化为字典
tb_dict = simplejson.loads(tb_req)

#编码: 将字典内容转化为json格式对象
tb_json = json.dumps(tb_dict, indent=2) #indent参数为缩紧,这样打印出来是树形json结构,方便直观
#print(type(tb_json))

#print(tb_json)
#解码: 将json格式字符串转化为python对象
review_j = json.loads(tb_json)
for p in range(1, 20, 1):
print(review_j["rateDetail"]["rateList"][p]['rateContent'])
time.sleep(1)

原文发布时间为:2018-11-9
本文来自云栖社区合作伙伴“ 灯塔大数据”,了解相关信息可以关注“ 灯塔大数据”。
相关文章
|
2天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
34 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
1月前
|
API Python
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
95 1
|
1月前
|
安全 数据挖掘 编译器
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
66 6
|
2月前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
116 2
|
3月前
|
数据采集 API 定位技术
Python技术进阶:动态代理IP的跨境电商解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
|
3月前
|
数据可视化 数据处理 Python
Python编程中的数据可视化技术
在Python编程中,数据可视化是一项强大的工具,它能够将复杂的数据集转化为易于理解的图形。本文将介绍如何使用matplotlib和pandas这两个流行的Python库来实现数据可视化,并展示一些实用的代码示例。通过这些示例,读者将学会如何创建各种图表,包括折线图、柱状图和散点图等,以便更好地理解和呈现数据。

热门文章

最新文章

推荐镜像

更多