聲明:請勿用於商業用途,以下只是個人興趣分析以及技術分享,請各位自行斟酌處理,否則后果自負
這篇文章很簡短,主要的理論分析操作
0.工具准備:
- 微信號
- 關注好目標公眾號
- charles
1).准備一個微信號,建議不要用剛注冊的微信號來操作,容易被封號,微信內部是有一套反爬系統的,你運氣不好就會觸發到
2).關注好你需要爬取的公眾號,因為要關注了,你才可以打開這個公眾號的歷史消息,不然的話,你只能看到最近的幾篇文章,說白了就是看不全,搜狗搜索針對微信公眾號的搜索我沒猜錯就是這樣,所以只能看前幾條信息,並且我發現搜狗搜索已經不好使了
3).charles就是抓包工具,這個網上很多資源,配置步驟也有很多,這個就自行查看配置了,記得要裝上ssl證書,配置好ssl的代理。
那么有朋友要問,可以用fiddler替代charles嗎?
其他地方不出意外是可以的,但是這里,針對微信的還真的要用到charles,因為fiddler我試了,抓不到包,當然也可能是我用的fiddler版本問題,這個就自行選擇吧,我個人建議還是用charles
1.打開charles
要先打開抓包工具,這樣抓包工具才能嗅探到數據接口
2.打開pc端微信,找到公眾號
登錄pc端微信,然后打開公眾號那一欄
3. 找到目標公眾號文章列表,獲取鏈接
找到目標公眾號,然后點擊一下,再點【查看歷史消息】
然后會從pc端的微信里打開一個頁面,如下:
4.用charles獲取鏈接
回到charles工具,此時已經嗅探到了數據接口,找到mp.weixin.qq.com的組合,從該組里找到profile_ext開頭的第一個鏈接
5.復制並拼接鏈接
把上面獲取到的鏈接,拿下來分析
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=保密==&scene=124&uin=保密%3D%3D&key=5cc14d5e215be3edfddab345c1e7d1545790a5d5106ac566ca33c21751c8578150126ebd750daa11336a1b536880ad8a814eb7be46e0e87e59f6c53828a3598637f04c6e8f8ebceb27fe27ed90797757&devicetype=Windows+10+x64&version=62090070&lang=zh_CN&a8scene=7&pass_ticket=lhCQ79EkT0QdVeeyIOeLJKN5WNTdCHysp252vVp7H4qdBHq5iSNThsQgO7qvPqul&winzoom=1
這里面的參數看起來很復雜,其實主要的就是那幾個
根據我的分析發現,那個biz參數的值唯一,不同公眾號有不同的值,且這個值是用base64轉碼過,反解回去是公眾號id
uin就是微信個人號的id然后base64轉碼過,這個值也是唯一的,一個號一個值
key的值就是微信客戶端本地自己生成的,這個就很難破解了,且這個key有30分鍾時效性,如果超時的話,用charles重新獲取下鏈接即可,並且根據我的分析得出,其實我覺得這30分鍾是穩穩的夠了的
然后,上面打開的歷史信息,其實是可以轉成json格式,然后更利於我們寫代碼處理
在那個公眾號位置,就是有雙等號的位置,添加以下字段
&f=json&offset=0&count=10
如下:
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=保密==&f=json&offset=0&count=10&scene=124&uin=保密%3D%3D&key=5cc14d5e215be3edfddab345c1e7d1545790a5d5106ac566ca33c21751c8578150126ebd750daa11336a1b536880ad8a814eb7be46e0e87e59f6c53828a3598637f04c6e8f8ebceb27fe27ed90797757&devicetype=Windows+10+x64&version=62090070&lang=zh_CN&a8scene=7&pass_ticket=lhCQ79EkT0QdVeeyIOeLJKN5WNTdCHysp252vVp7H4qdBHq5iSNThsQgO7qvPqul&winzoom=1
拼接出來的鏈接可以用瀏覽器打開驗證下:
這個鏈接即是程序能處理的鏈接了,然后里面的文章鏈接,根據我的發現是永久的,不是臨時,所以先爬取一級文章列表頁,然后永久存儲,然后設置個隊列,再隨機處理詳情頁,即我們需要的文章內容即可,同樣的,操作也不能過於頻繁
如果你要翻頁,改下拼接的參數中的offset的值即可,首頁就是0,第二頁就是10,第三頁就是20......
這里我再給幾個微信的請求頭,一般的瀏覽器請求頭是會被識別屏蔽的,它會提示讓你登錄手機微信,反正就是打不開
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.884.400 QQBrowser/9.0.2524.400', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/2.3.30(0x12031e10) MacWechat Chrome/39.0.2171.95 Safari/537.36 NetType/WIFI WindowsWechat MicroMessenger/2.3.30(0x12031e10) MacWechat Chrome/39.0.2171.95 Safari/537.36 NetType/WIFI WindowsWechat', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat', 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.12(0x17000c2d) NetType/WIFI Language/zh_CN'
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
注:操作不能過於頻繁,並且我個人建議,每天采集不要都用同一個號來爬取,准備幾個號,換着換着來
6.改進
以上的說白了就是半自動的操作,如果你覺得每次還要手動的獲取鏈接,然后拼接很繁瑣,其實可以做成全自動的,大概就是用selenium/appium配合即可,網上也有這方面的教程,這里就不展示了,自行選擇了
好的,以上就是一些理論操作,具體的代碼由於涉及到隱私問題,就不給代碼展示了