使用python实现自动爬取得物交易记录,商品信息进行数据分析
前言
文章尽用于交流学习。
刚刚学习爬虫有一段时间,打算找一个网站突破一下,提升一下自己的爬虫与逆向能力。刚好最近买东西都在使用得物APP,所以就决定突破一下它。整个过程很曲折,踩了很多坑,遇到很多做之前没有预料到的问题。项目一共分为两个版本,第一版是由mitmproxy+appium自动化操作APP完成获取数据,由于完成之后发现爬取过程耗时很长并且无法准确的抓到指定的商品数据所以放弃,发开第二版。第二版突破了,得物sign值的加密过程,实现了使用调用API来获取商品数据。 目前实现功能: 1、定时爬取商品详情数据 2、定时爬取商品交易记录数据 3、对交易记录进行分析、统计
以上为项目的简要介绍。本人处于初学阶段,还有很多的不足之处,全文有任何疑问,欢迎各位大神指出错误。
开发流程
1、API抓包 2、破解请求数据 3、编写爬虫代码 4、反爬
实现过程
1、API抓包
我们在抓包之前可以登录得物web网站以及APP、小程序三个入口查看数据情况,会发现能获取商品信息的地方只有小程序与APP,并且小程序的数据要比APP的少很多内容。这个时候我们同时对两个入口进行抓包操作。我这里使用的抓包工具是Charles . 下载地址: Charles下载地址. 具体的安装步骤自行百度,这里不详细介绍了。
这里会遇到两个相对比较繁琐的问题: 1、配置抓取HTTPS的包 2、配置抓取APP的包 这里推荐篇文章用于解决这两个问题: 推荐文章
APP数据包与小程序数据包抓下来之后,我们会发现APP的请求数据相对与小程序的请求数据要复杂的很多,基于到时间成本与需要数据的考虑,我选择了突破小程序。ps:APP端虽然有点复杂但是最后也搞明白了。
2、破解请求数据
分析数据包
根据抓包数据我们会发现,商品详情请求数据为 加上sign的一个结构。 请求地址为:https://app.dewu.com/api/v1/h5/index/fire/flow/product/detail 其中spuid为商品的唯一值,其他的为默认即可,只有sign值我们无法知道来历。那么这个sign就是我们需要突破的点,不然无法通过调用API获取数据。
逆向
我这边使用的思路是通过反编译小程序的,拿到其中的加密key,然后尝试多种加密方式最终得到与抓包获得的sign相同的值。 这里我使用的逆向工具是wxappUnpacker,具体使用教程网上有很多就不一一赘述了。 反编译脚本下载地址
验证
拿着逆向获得的key构造请求参数,最终发现sign是由所有请求参数拼接,最后加上key加密生成。 构造完请求参数,就可以拿着抓包获得的header发送请求了,这里是三个接口的请求header 至此,破解请求数据就完了。
3、编写爬虫代码
编写代码就是一个枯燥无味的过程,文章最后会给出项目代码的github地址。 其中需要处理几个问题: (1)如何通过python发送https请求,绕过ssl认证。 (2)如何保证每次获取的交易记录是上一次交易交易记录的后一条。 如何保证每次请求都能够成功获取数据。 (3)如何保证每次请求都能够成功获取数据,不被得物服务器拦截。
4、反爬
我目前所了解到的得物小程序做了两个反爬措施,一个是签名认证,就是刚刚提到的破解请求数据中的sign,第二是IP限流。 第一个问题在上一节中已经讲到。 第二个问题我采用的反反爬手段是使用IP代理。ps:代理是需要自行购买的。
结束语与结果展示
以上就是关于使用python实现自动爬取得物交易记录,商品信息的所有内容,如发现有遗漏或是对于文章有疑问欢迎与我沟通,邮箱:2579779624@qq.com 如文章影响得物平台利益,请通过上方联系方式与我取得联系。
Github地址
贴几张获取到的数据图
|