Python爬虫实战 | 爬取拼多多商品的详情价格SKU数据

本案例将为大家演示如何爬取拼多多商品的详情数据。目的是爬取大量的商品以及商品的评论,所以在程序设计上要考虑到该爬虫的高并发以及持久化存储。爬虫工具选用了Scrapy框架,以满足爬虫的高并发请求任务;持久化存储用了MongoDB,对直接存储JSON数据比较方便。

01

分析网页

拼多多触屏版一般是为了适配手机浏览器而做的版本,尽管触屏版在PC端的样式不适配,但并不影响数据浏览和抓包。在PC端浏览器中用调试工具查看请求信息,通过线索查找,并没有发现该网站实际获取数据的请求,但是每次下拉刷新页面确实有数据更新,在浏览器调试工具中没有看到新的请求的产生,是由于这个请求是网页内的Ajax请求,可以通过分析网站JavaScript源代码的方式,找到请求地址和参数规则,这是一种方法;第二种方法就是在后面介绍到的,用专业的抓包工具抓包分析网络请求。

常用的抓包工具有Fiddler、Charles、Wireshark等。本案例在分析网页请求时,使用Charles,以便更清楚地看到网络请求的过程。

Charles(Charles Web Debugging Proxy)是常用的网络封包截取工具,在移动开发中应用较多。使用Charles时,为了调试与服务器端的网络通信协议,经常需要截取网络封包来一并分析。Charles通过构建代理服务,让本地请求都通过Charles的代理之后访问公网,从而实现了网络封包的截取和分析。除了可以在做移动开发中调试端口外,Charles也可以用于分析第三方接口的通信协议。Charles的SSL功能还可以完成HTTPS协议分析。

Charles主要提供两种查看封包的视图:Structure和 Sequence。Structure视图能够将网络请求按访问的域名分类。例如,某个域名下如果有n个资源请求,则所有此域名下的请求都会被详细分类。视图则是按照请求发生的顺序来展示的。

Charles除了基本的抓包功能,还可以修改网络请求参数、支持模拟慢速网络、抓取手机端的请求、抓取部分HTTPS的包。

通过浏览网页发现,商品评论的URL,需要传入goods_id这个参数,所以需要首先爬取商品ID,商品ID可以在商品列表页看到,具体抓包的操作步骤如下。

(1) 在浏览器输入目标网址(拼多多触频版的网址),其列表页面如图12-1所示。

■ 图12-1拼多多列表页面

(2) 向下滑动页面,同时在Charles中可以看到有域名为yangkeduo.com的请求产生。

(3) 将Charles视图模式切换至Structure,输入过滤条件yangkeduo,找到请求接口。

(4) 浏览网页,切换至详情页的评论。

(5) 在Charles中,找到评论接口的请求地址。

(6) 在浏览器中,测试找到的地址是否可用。

提示/

虽然Charles可以支持HTTPS抓包,在分析移动端应用网络请求时也是一个不可或缺的工具,但是随着移动安全技术的发展,很多移动App用到了SSL Pinning技术,即SSL双向验证,该技术可实现在客户端和服务器端的双向验证,移动端的壳加密技术也使移动端HTTPS抓包越来越困难,目前对抗SSL Pinning的技术,可行的方案是XPost框架,有兴趣的读者可以进一步了解相关知识。

通过上述分析,得到了商品列表接口(该接口为分析过程中的接口地址,接口地址会改版,此处仅做参考):

http://apiv3.yangkeduo.com/api/alexa/v1/goods?list_update_time=true&platform=1&assist_allowed=1&page=2&size=40

商品评论的接口地址是:

http://apiv3.yangkeduo.com/reviews/" + str(item['goods_id']) + "/list?&size=20",

相关推荐
数据智能老司机2 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
武子康2 小时前
大数据-100 Spark DStream 转换操作全面总结:map、reduceByKey 到 transform 的实战案例
大数据·后端·spark
数据智能老司机3 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机3 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i3 小时前
drf初步梳理
python·django
每日AI新事件3 小时前
python的异步函数
python
expect7g3 小时前
Flink KeySelector
大数据·后端·flink
这里有鱼汤4 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook13 小时前
Manim实现脉冲闪烁特效
后端·python·动效