通过关键词采集文章采集api(实战|*敏*感*词*教你如何使用抓包神器MitmProxy分析接口)
优采云 发布时间: 2022-04-17 13:00通过关键词采集文章采集api(实战|*敏*感*词*教你如何使用抓包神器MitmProxy分析接口)
前提:在学习本文中的采集小程序数据之前,相信大家已经掌握了抓包的技巧,比如使用Mitmproxy抓包。如果看到这里还没有掌握,可以参与陈哥写的一篇关于mitmproxy的使用文章的文章(实战|教你抓包神器MitmProxy的使用方法)。
本文目标:利用Mitmproxy抓取某小程序的景区数据,实现翻页(下一页)循环爬取。
想法:
1、使用Mitmproxy抓包并分析
2、利用分析结果,编写Python代码提取数据,实现下一页采集
mitmproxy 抓取数据包
1.启动mitmproxy
首先配置手机的代理IP,启动mitmproxy
在终端启动 mitmweb
mitmweb
在浏览器中查看数据包(输入mitmweb会在浏览器中自动打开网页,如果没有打开则手动输入)
http://127.0.0.1:8081/#/flows
2.访问小程序
打开桐城旅游小程序,点击所有景点
您可以看到页面上出现的景点列表:
3.在浏览器中查看数据包
上图中红框是景点列表的API接口。点击响应查看返回的数据。
Python解析数据包
1.分析界面
分析后发现这个接口没有反爬(签名验证),所以通过这个接口可以直接爬取多页数据,比如修改接口链接中的参数
范围:
页数 页数
PageSize 数量
CityId 城市
关键字关键词
...
因此,通过修改页面,就可以得到所有的景区数据。
知道了接口链接,我们就可以通过python中的requests来获取数据了。
import requests
### 获取第1页~第10页数据
for p in range(1,11):
# 页数
url = "https://wx.17u.cn/scenery/json/scenerylist.html?PosCityId=78&CityId=53&page="+str(p)+"&sorttype=0&PageSize=20&IsSurrounding=1&isSmallPro=1&isTcSmallPro=1&isEncode=0&Lon=113.87234497070312&Lat=22.90543556213379&issearchbytimenow=0&IsNeedCount=1&keyword=&IsPoi=0&status=2&CityArea=5&Grades=&IsSearchKeyWordScenery=1"
response = requests.get(url).json()
print(response)
今天我们用另一种方法获取数据,可以用来绕过接口签名验证的反爬,比如sign或者x-sign等签名加密参数。
2.直接解析数据包
相信看过陈哥文章文章(实战|教你如何使用抓包神器MitmProxy)的读者都知道,mitmproxy抓包的数据包除了在浏览器中查看外,还可以写。python 代码在抓取数据包时对其进行解析。
再来看看python能拿到数据包的数据(下图只写一些常用的)
在终端调用上面的py代码,结果如下:
下面开始实际编写python代码,将景区数据直接保存为txt。
在chenge.py文件中,修改响应函数部分(如上图)
启动程序:
mitmdump.exe -s chenge.py
api接口返回的数据包括:
"state":"100","error":"查询成功"
因此判断响应的数据中收录这个内容,说明收录景点列表。
景点列表数据在json数据的sceneryinfo字段中。我们把字段的内容(姓名、地址、等级)取出来保存到一个txt文件中,命名为tractions.txt
在小程序中向下滑动加载更多数据,同时mitmproxy继续抓包,对应的python程序会继续将数据保存到txt。
ps:这里只是技术的使用,没有完全爬取数据,为了演示数据可以保存,暂时保存为txt,读者可以根据需要保存到数据库或excel。
概括
本文目标:使用Mitmproxy抓取一个旅游小程序的景区数据,实现翻页(下一页)循环爬取。还介绍了如何通过mitmproxy绕过接口签名验证的反爬,比如sign或者x-sign等签名加密参数(虽然本文没有加密参数,但是大家可以先掌握技术,也可以当你遇到它时使用它)
原创:李云辰