本案例将为大家演示如何爬取拼多多商品的详情数据。目的是爬取大量的商品以及商品的评论,所以在程序设计上要考虑到该爬虫的高并发以及持久化存储。爬虫工具选用了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",