querylist采集微信公眾號文章(Fiddler如何抓包這里不再一一闡述,首先第一次如何安裝?(組圖))
優(yōu)采云 發(fā)布時(shí)間: 2021-12-18 22:13querylist采集微信公眾號文章(Fiddler如何抓包這里不再一一闡述,首先第一次如何安裝?(組圖))
前言
微信后臺很多消息都沒(méi)有回復:看到就回復不了。有什么問(wèn)題可以加我的微信:菜單->聯(lián)系我
由于最近需要公眾號的歷史文章信息,嘗試爬取。雖然目前可以爬取數據,但是還不能實(shí)現大量的自動(dòng)化爬取。原因是參數key值是時(shí)間敏感的(具體時(shí)間沒(méi)有驗證為20分鐘),目前不知道怎么生成。
文章歷史列表爬取
第一個(gè)是搜狗微信,但是搜狗微信只能看到前十篇文章,看不到閱讀量和觀(guān)看數。嘗試爬取手機包,發(fā)現沒(méi)有抓取到任何信息。知道原因:
1、Android系統7. 0以下,微信信任系統的證書(shū)。
2、Android系統7.0及以上,微信7.0版本,微信信任系統提供的證書(shū)。
3、Android系統7.0及以上,微信7.0及以上,微信只信任自己的證書(shū)。
我也試過(guò)用appium來(lái)自動(dòng)爬取,個(gè)人覺(jué)得有點(diǎn)麻煩。所以嘗試從PC上抓取請求。
進(jìn)入正題,這次我用Fiddler抓包。下載鏈接:
Fiddler如何抓包這里就不一一解釋了。首先,第一次安裝Fiddler時(shí),需要安裝一個(gè)證書(shū)來(lái)捕獲HTTPS請求。
如何安裝?
打開(kāi)Fiddler,在菜單欄找到Tools -> Options -> 點(diǎn)擊HTTPS -> 點(diǎn)擊Actions,證書(shū)安裝配置如下:
以我自己的公眾號為例:PC端登錄微信,打開(kāi)Fiddler,按F12開(kāi)始/停止抓包,進(jìn)入公眾號歷史文章頁(yè)面,看到Fiddler有很多請求,如如下圖所示:
由于查看歷史記錄是跳轉到一個(gè)新的頁(yè)面,所以可以從body中看到返回的更多。同時(shí)通過(guò)Content-Type可以知道返回的是css或者html或者js。你可以先看一下html,所以它會(huì )找到上圖紅框中的鏈接,點(diǎn)擊它,從右邊可以看到返回的結果和參數:
從右邊的Headers可以看到請求鏈接、方法、參數等,如果想更清楚的查看參數,可以點(diǎn)擊WebForms查看,就是上圖的結果。以下是重要參數的說(shuō)明:
__biz:微信公眾號的唯一標識(同一公眾號保持不變)
uin:唯一用戶(hù)標識(同一微信用戶(hù)不變)
關(guān)鍵:微信內部算法是時(shí)間敏感的。我目前不知道如何計算。
pass_ticket:有讀權限加密,改了(在我實(shí)際爬取中發(fā)現沒(méi)必要,可以忽略)
這時(shí)候其實(shí)可以寫(xiě)代碼爬取第一頁(yè)的文章,但是返回的是一個(gè)html頁(yè)面,解析頁(yè)面顯然比較麻煩。
可以嘗試向下滑動(dòng),加載下一頁(yè)數據,看看是json還是html。如果是json,好辦,如果還是html,那就得稍微解析一下了。繼續往下查找:
這個(gè)請求是文章的返回列表,是json數據,非常方便我們解析。從參數中我們發(fā)現有一個(gè)offset為10的參數,很明顯這個(gè)參數是分頁(yè)的offset,這個(gè)請求是10來(lái)加載第二頁(yè)的歷史記錄,果斷修改為0,然后發(fā)送請求,拿到第一頁(yè)的數據,然后就不用解析html頁(yè)面了,再次分析參數,發(fā)現是Multi-parameters,很多都沒(méi)用,最后的參數是:
動(dòng)作:getmsg(固定值,應該是獲取更多信息)
__biz、uin、key這三個(gè)值上面已經(jīng)介紹過(guò)了,這里也是必選參數。
f:json(固定值,表示返回json數據)
偏移:頁(yè)面偏移
如果要獲取公眾號的歷史列表,這6個(gè)參數是必須的,其他參數不需要帶。我們來(lái)分析一下請求頭中的聽(tīng)者,如圖:
參數很多,不知道哪些應該帶,哪些不需要帶。最后,我只需要攜帶UA,別的什么都沒(méi)有。最后寫(xiě)個(gè)腳本嘗試獲?。?/p>
import?requests
url?=?"鏈接:http://鏈接:mp.weixin鏈接:.qq.com/mp/profile_ext"
headers=?{
????'User-Agent':'Mozilla/5.0?(iPhone;?CPU?iPhone?OS?10_0_1?like?Mac?OS?X)?AppleWebKit/602.1.50?(KHTML,?like?Gecko)?Mobile/14A403?MicroMessenger/6.5.18?NetType/WIFI?Language/zh_CN'
}
param?=?{
????'action':?'getmsg',
????'__biz':?'MzU0NDg3NDg0Ng==',
????'f':?'json',
????'offset':?0,
????'uin':?'MTY5OTE4Mzc5Nw==',
????'key':?'0295ce962daa06881b1fbddd606f47252d0273a7280069e55e1daa347620284614629cd08ef0413941d46dc737cf866bc3ed3012ec202ffa9379c2538035a662e9ffa3f84852a0299a6590811b17de96'
}
index_josn?=?requests.get(url,?params=param,?headers=headers)
print(index_josn.json())
print(index_josn.json().get('general_msg_list'))
獲取json對象中的general_msg_list,得到結果:
獲取文章的詳細信息
我有上面的鏈接,只是請求解析 html 頁(yè)面。此處不再解釋?zhuān)稍谕暾a中查看)。