最近接到公司派的1個任務(wù),讓我爬取騰訊新聞app的熱點(diǎn)榜
此熱點(diǎn)新聞每10分鐘更新1次,所以需要每隔10分鐘爬取一次,然后保存下來。最簡單的辦法就是找電腦網(wǎng)頁版,但是翻遍所有網(wǎng)站也沒有找到這個接口,所以只好乖乖地從手機(jī)端爬了。
手機(jī)端數(shù)據(jù)接口參數(shù)分析是一件很難的事,我們可以繞過此過程,在APP數(shù)據(jù)交換的過程通過mitmproxy工具將返回的數(shù)據(jù)攔截下來。
這種方法的優(yōu)點(diǎn)就是簡便,分析接口參數(shù),缺點(diǎn)是需要一臺手機(jī),不停地進(jìn)行數(shù)據(jù)請求,速度相對較慢,但是對此次爬取來說足夠了。為了節(jié)省1部手機(jī),我想到了爬取手機(jī)模擬器端APP數(shù)據(jù)。
下面一起來看看我是怎么實(shí)現(xiàn)的吧
第一步:安裝charles、appium、mitmdump和夜神手機(jī)模擬器
1.安裝charles
Charles是一款代理服務(wù)器,通過過將自己設(shè)置成系統(tǒng)(電腦或者瀏覽器)的網(wǎng)絡(luò)訪問代理服務(wù)器,然后截取請求和請求結(jié)果達(dá)到分析抓包的目的。
①下載:https://www.charlesproxy.com/latest-release/download.do
下載完成后,點(diǎn)擊安裝,一路默認(rèn)安裝即可。
②設(shè)置代理
③安裝證書
依次點(diǎn)擊幫助——ssl代理——安裝charles root證書
點(diǎn)擊確定,電腦端證書就安裝完成了
再依次點(diǎn)擊幫助——ssl代理——在移動設(shè)備或遠(yuǎn)程瀏覽器上安裝charles root證書
然后在模擬器瀏覽器中輸入chls.pro/ssl,會自動下載手機(jī)端證書并安裝。
2.安裝appium
依次安裝Adroid SDK、JAVA和appium客戶端即可
3.安裝mitmproxy
mitmproxy是一個支持http和https的抓包程序,類似Fiddler、Cha,只不過它可以對接python1腳本。
①只需執(zhí)行如下命令即可安裝:Pip install mitmproxy
②證書配置:在命令行輸入mitmdump,然后在用戶目錄找到CA證書
雙擊mitmproxy-ca-cert.p12,在電腦上安裝證書,然后將mitmproxy-ca-cert.pem發(fā)送到模擬器上,在手機(jī)設(shè)置-安全-從SD卡安裝,選中此文件,安裝即可。
4.安裝夜神手機(jī)模擬器
安裝地址
http://soft.onlinedown.net/soft/987318.html
一直默認(rèn)安裝即可
第二步:用Charles分析出騰訊app熱點(diǎn)新聞數(shù)據(jù)接口
首先設(shè)置模擬手機(jī)代理ip,長按WireSSID,點(diǎn)擊修改網(wǎng)絡(luò)
設(shè)置好代理ip,保存即可。
打開模擬器騰訊新聞APP,進(jìn)入今日熱搜界面,然后在charles中找到該接口
它的url信息為
將該url在瀏覽器中打開
該url看起來是比較復(fù)雜的,但是今天我們不去分析它,按照上述所說的方法抓取數(shù)據(jù)。
第三步:用mitmdump抓包,保存熱點(diǎn)新聞數(shù)據(jù)
首先設(shè)置代理ip,步驟同第二步,不過要把端口設(shè)置為8080
然后編寫python腳本抓取第二步的接口
有兩種數(shù)據(jù)流方式,一種是相應(yīng)數(shù)據(jù)response,一種是請求數(shù)據(jù)request,本次用response,flow代表數(shù)據(jù)流
為了篩選新聞熱點(diǎn)的數(shù)據(jù)流,根據(jù)第二步url的固定部分判斷該數(shù)據(jù)流是否是我們要的url,如果是,則保存flow.request.text,用json解析保存到表格內(nèi),至此腳本編寫完畢。在腳本所在路徑裕興mitmdump -s demo.py
然后在模擬器中打開騰訊新聞今日熱搜界面
再看看表格中保存的數(shù)據(jù)
第四步:用appium控制手機(jī)模擬器定時啟動騰訊新聞APP
第三步中是手動點(diǎn)擊查看熱點(diǎn)榜,因?yàn)榇藷狳c(diǎn)信息是10分鐘更更新1次
所以我們需要用appium寫個腳本,模擬循環(huán)進(jìn)行此過程,同時mitmproxy腳本會截取最新的數(shù)據(jù)
但是現(xiàn)在還是沒法打開模擬器里的騰訊新聞app,因?yàn)槟M器還未連接到主機(jī),還需要在夜神模擬器所在安裝目錄bin路徑下運(yùn)行以下代碼
再檢測一下
這就算連接成功了,再運(yùn)行appium腳本就ok了,展示視頻如下
正常情況應(yīng)該是每隔10分鐘點(diǎn)擊1次才能爬到最新數(shù)據(jù),此視頻為了展示效果縮短了時間間隔。
小結(jié):app的爬取是爬蟲最難的部分,涉及很多復(fù)雜的逆向分析過程,這次只是借助模擬器介紹了1個非常簡單的app爬取過程,有興趣的朋友可以借此深入學(xué)習(xí)一下。
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA3NDQwNzI0NA==&scene=124#wechat_redirect