上一篇我們通過(guò)H5網(wǎng)頁(yè)爬取了數(shù)據(jù)勤揩,可以越來(lái)越多的公司連H5網(wǎng)頁(yè)都不提供,只提供了微信小程序秘蛔,本文我們來(lái)試試怎么爬取陨亡。
目錄:
1. PC網(wǎng)頁(yè)爬蟲
2. H5網(wǎng)頁(yè)爬蟲
3. 微信小程序爬蟲
4. 手機(jī)APP爬蟲
三、微信小程序
1. 目標(biāo)場(chǎng)景
爬取超級(jí)猩猩的課表深员,該平臺(tái)僅提供了微信小程序這一個(gè)途徑负蠕,前面兩種針對(duì)html網(wǎng)頁(yè)的爬取方式都不再適用。
2. 場(chǎng)景分析
采用抓包分析是我們制定方案的第一步倦畅。
怎么抓包遮糖?
我用的Mac電腦,fiddler只有一個(gè)簡(jiǎn)化版叠赐,所以另找了Charles這個(gè)類似的軟件欲账。啟動(dòng)Charles的代理,在手機(jī)WIFI中設(shè)置好對(duì)應(yīng)的代理就可以開抓了芭概。但是赛不,抓到的https包的內(nèi)容都是亂碼,咋辦罢洲?
怎么抓https包踢故?
Charles中提供了ssl證書,在手機(jī)端安裝證書即可惹苗。推薦使用iPhone殿较,直接安裝描述文件即可。Android手機(jī)必須使用系統(tǒng)版本在7.0以下的才行鸽粉,7.0以上還需要反編譯什么的斜脂,太麻煩了。
抓包結(jié)果
很容易的定位到了超級(jí)猩猩微信小程序載入課表的后臺(tái)接口触机。拿這個(gè)URL在瀏覽器里訪問(wèn)試試帚戳,直接返回了json結(jié)果玷或!超級(jí)猩猩很友好!
提取對(duì)應(yīng)的URL片任,放到瀏覽器中驗(yàn)證偏友,也可以支持返回json包,剩下就是分析一下這個(gè)json的數(shù)據(jù)結(jié)構(gòu)对供,按照需要的方式導(dǎo)出了位他。
3. 方案思路
- 使用requests庫(kù)訪問(wèn)接口地址;
- 解析返回的json包产场,提取數(shù)據(jù)鹅髓;(超猩返回的數(shù)據(jù)包分為課程的頭表和子表,每個(gè)字段的屬性的中文都有對(duì)應(yīng)的map表京景,需要耐心的分析一下數(shù)據(jù)包)
- 修改接口地址的參數(shù)窿冯,分別查詢各個(gè)城市的課表;
- 請(qǐng)留意這個(gè)接口采用https加密連接确徙,需處理證書的警告醒串;urllib3.disable_warnings()
4. 關(guān)鍵代碼
import requests
from requests.packages import urllib3
urllib3.disable_warnings() # 屏蔽https的證書警告
reqURL = 'https://busi.supermonkey.com.cn/wxClass/getClassSelectList5'
cityList = ['南京市', '杭州市', '上海市', '武漢市', '北京市', '廣州市', '深圳市', '成都市']
for cityName in cityList:
pars = {'city': cityName}
resp = requests.get(reqURL, params=pars, verify=False)
smdata = json.loads(resp.text)['data']
classHeader = smdata['main']['scheduleList'] # 課程頭表
classDetail = smdata['scheduleSmallMap'] # 課程詳情子表
classMap = smdata['classinfoSmallMap'] # 課程參數(shù)
coachMap = smdata['trainerSmallMap'] # 教練參數(shù)
storeMap = smdata['boxinfoSmallMap'] # 門店參數(shù)
# 具體json解析,請(qǐng)參考源代碼
5. 爬取結(jié)果
直接通過(guò)接口的爬取效率非常高鄙皇,幾秒鐘就拉取了全國(guó)各個(gè)門店的排課芜赌,相當(dāng)舒心。(下圖的錄屏沒(méi)有進(jìn)行加速)
最后一個(gè)挑戰(zhàn)就是對(duì)只有Android/iOS的APP端應(yīng)用數(shù)據(jù)的爬取伴逸。請(qǐng)看下一章
四缠沈、手機(jī)APP爬蟲
請(qǐng)點(diǎn)擊:<下一頁(yè)>