一舷嗡、先說整體的解決方案
1亦镶、通過搜狗進行公眾號文章的采集晴弃,這樣獲取到的文章URL是一個帶時間戳的臨時鏈接。
2或油、通過安卓模擬器+Anyproxy代理抓包分析微信客戶端打開臨時鏈接時與其服務(wù)器請求的協(xié)議內(nèi)容寞忿,得出永久鏈接。
3顶岸、通過按鍵精靈模擬或Python腳本在微信號上發(fā)送臨時鏈接內(nèi)容腔彰,只有在安卓模擬器上的微信號上發(fā)送了內(nèi)容叫编,Anyproxy代理才能抓取到相關(guān)的包內(nèi)容。
二霹抛、再說具體的解決方案搓逾,主要是第2點
1、通過搜狗進行公眾號文章的采集杯拐,這樣獲取到的文章URL是一個帶時間戳的臨時鏈接霞篡。在用這個做數(shù)據(jù)采集時,經(jīng)常會出現(xiàn)“請輸入驗證碼”藕施。我嘗試用IP代理池寇损,但目前尚未找到可以避免或叫解決這個問題的IP代理服務(wù)器。我這塊的處理方式是用動態(tài)IP VPS服務(wù)解決裳食。具體的解決步驟我這塊就不細講啦矛市,因為這個不是本文章的重點。
2诲祸、通過安卓模擬器+Anyproxy代理抓包分析微信客戶端打開臨時鏈接時與其服務(wù)器請求的協(xié)議內(nèi)容浊吏,得出永久鏈接。我用的是win10系統(tǒng)救氯。
1)一個微信客戶端:下載一個安卓模擬器找田,在這個模擬器上安裝一個微信app。
2)一個微信個人號:為了采集內(nèi)容不僅需要微信客戶端着憨,還要有一個微信個人號專門用于發(fā)送臨時鏈接墩衙。
3)本地代理服務(wù)器系統(tǒng):使用的方法是通過Anyproxy代理服務(wù)器將臨時鏈接和永久鏈接發(fā)送到我們自己的服務(wù)器上進行替換。具體安裝設(shè)置方法在后面詳細介紹甲抖。
我使用的是Anyproxy漆改。這個軟件的特點是可以獲取到https鏈接的內(nèi)容。在2016年年初的時候微信公眾號和微信文章開始使用https鏈接准谚。并且Anyproxy可以通過修改rule向服務(wù)器發(fā)送請求挫剑。下面開始介紹安裝與配置過程。
1柱衔、安裝NodeJS
2樊破、在命令行或者終端運行 npm install -g anyproxy
3、生成RootCA唆铐,https需要這個證書:運行命令anyproxy --root
4哲戚、啟動anyproxy運行命令:win+R打開運行,輸入anyproxy -i艾岂;參數(shù)-i是解析HTTPS的意思顺少;
5、安裝證書澳盐,在安卓模擬器中安裝證書:啟動anyproxy祈纯,瀏覽器打開http://localhost:8002/fetchCrtFile,能獲取rootCA.crt文件
6叼耙、設(shè)置代理:安卓模擬器的代理服務(wù)器地址是wifi鏈接的網(wǎng)關(guān),可以通過把dhcp設(shè)置為靜態(tài)后看到網(wǎng)關(guān)地址,看完后別忘了再設(shè)置為自動曲管。代理服務(wù)器默認(rèn)端口是8001剔猿。
檢測是否成功方法:打開模擬器上的微信,點擊到任意一個文章中爽撒,在終端都可以看到響應(yīng)的代碼滾動入蛆。如果沒有出現(xiàn),請檢查手機的代理設(shè)置是否正確硕勿。我下面的截圖是打開瀏覽器地址http://localhost:8002看到anyproxy的web界面哨毁。
我在微信app上打開的是文章的臨時鏈接,通過協(xié)議分析可以知道永久鏈接是重定向到302時的location中源武。
4)修改Anyproxy文件rule_default.js扼褪,獲取抓包中的協(xié)議內(nèi)容。
rule_default.js文件在*\node_modules\anyproxy\lib\rule_default.js中粱栖,找到replaceServerResDataAsync: function(req,res,serverResData,callback) 函數(shù)话浇,修改函數(shù)內(nèi)容,劫取需要的內(nèi)容闹究。因為我只需要劫取返回為302的code內(nèi)容幔崖,所以我只有當(dāng)statusCode==302時才callback。
找到replaceResponseHeader: function(req,res,header)函數(shù)渣淤,修改函數(shù)內(nèi)容赏寇。獲取永久鏈接,調(diào)用我在服務(wù)器寫好的http接口砂代,我這邊接口只有兩個參數(shù):臨時鏈接和永久鏈接蹋订,根據(jù)臨時鏈接增加永久鏈接。
好刻伊,到目前為止露戒,通過使用Anyproxy把臨時鏈接轉(zhuǎn)永久鏈接的功能介紹完成啦。
PS:使用Anyproxy可以直接獲取微信公眾號的全部文章(永久鏈接)捶箱,包括點贊數(shù)智什,閱讀數(shù)之類的信息。這樣的話可以不用使用搜狗丁屎。不過這里會有些問題荠锭,微信會封你在做這個事情的微信個人號,所以我采取的是使用搜狗爬文章(急)晨川,再利用Anyproxy在臨時鏈接有效時間內(nèi)更新為永久鏈接证九。
3删豺、通過按鍵精靈模擬在微信app上點擊臨時鏈接,或者也可以通過python腳本模擬愧怜。這塊我正在編寫呀页,等完成之后再更新上來。