以【某程旅行】為例,講述小程序爬蟲技術
- 2021 年 7 月 18 日
- 筆記
大家好,我是辰哥~~~
前提:在學習本文採集小程序數據之前,相信大家都掌握了抓取數據包的技能,比如使用Mitmproxy進行抓取數據包。如果看到這裡的你還沒有掌握的話,可以參與辰哥之前的寫的一篇關於mitmproxy使用的文章(實戰|手把手教你如何使用抓包神器MitmProxy)。
本文目標:利用Mitmproxy抓取某程小程序景點數據,並實現翻頁(下一頁)循環爬取。
思路:
1、利用Mitmproxy抓取數據包,並進行分析
2、利用分析的結果,編寫Python代碼進行提取數據,並進行實現下一頁採集
01、mitmproxy抓取數據包
1.啟動mitmproxy
先配置好手機的代理IP和啟動mitmproxy
在終端中啟動mitmweb
mitmweb
在瀏覽器中查看數據包(輸入mitmweb會自動在瀏覽器中打開網頁,如果沒有打開的則手動輸入)
2.訪問小程序
打開同程旅行小程序,點擊全部景點
可以看到頁面中出現了景點列表:
3.瀏覽器中查看數據包
上圖中紅框部分是景點列表的api接口,點擊response查看返回的數據。
02、Python解析數據包
1.分析接口
經過分析,發現該接口是沒有反爬(簽名驗證),因此通過這個接口可以直接爬取多頁數據,比如修改接口鏈接中的參數
參數:
page頁數
PageSize條數
CityId城市
keyword關鍵詞
…
因此通過修改page就可以獲取全部景點數據。
得知接口鏈接,在python中通過requests請求去獲取數據,這種方式我們都會。
import requests
### 獲取第1頁~第10頁數據
for p in range(1,11):
# 頁數
url = "//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文件中,修改response函數部分(如上圖)
啟動程序:
mitmdump.exe -s chenge.py
api接口返回的數據前面包含了:
“state”:”100″,”error”:”查詢成功”
因此判斷響應的數據中包含這個內容說明是含有景點列表的
景點列表數據在json數據的sceneryinfo字段中。我們將字段(name、address、grade)的內容取出來保存到txt文件中,並命名為景點.txt
在小程序中向下滑動,加載更多數據,同時mitmproxy繼續抓包,對應的python程序將繼續保存數據到txt中。
ps:這裡僅講述技術的使用,就沒有去將數據完整爬取下來,並且為了演示數據可以保存,也暫時保存到txt,讀者可以根據需要保存到數據庫或者excel。
03、小結
本文目標:利用Mitmproxy抓取某程旅行小程序景點數據,並實現翻頁(下一頁)循環爬取。並且還講述了如何通過mitmproxy繞過接口簽名驗證的反爬,比如sign或者x-sign等簽名加密參數(雖然本文沒有加密參數,但是技術大家可以先掌握,在遇到的時可以使用)
不會的小夥伴,感覺動手練習!!!!最後說一聲:原創不易,求給個贊!