【Python爬虫】爬取微信公众号文章信息准备工作
有一天發(fā)現(xiàn)我關(guān)注了好多微信公眾號,那時(shí)就想有沒有什么辦法能夠?qū)⑽⑿殴娞柕奈恼屡聛?#xff0c;而且還想將一些文章的精彩評論一起搞下來。參考了一些文章,通過幾天的研究基本上實(shí)現(xiàn)了自己的要求,現(xiàn)在記錄一下自己的一些心得。
整個(gè)研究過程如下:
 1.了解微信公眾號文章鏈接的組成,歷史文章API組成,單個(gè)文章評論API組成,訪問微信公眾號的cookie組成;
 2.分析歷史文章API以及單個(gè)文章評論API的結(jié)構(gòu),構(gòu)建爬蟲進(jìn)行爬取;
 前面兩點(diǎn)需要借助于抓包工具Fiddler,下面會(huì)詳細(xì)介紹抓包結(jié)果的分析,上一篇文章有介紹“ Fiddler在PC/臺(tái)式對Android進(jìn)行抓包”
 3.設(shè)計(jì)表結(jié)構(gòu),將爬蟲獲取的數(shù)據(jù)存入到mysql數(shù)據(jù)庫;
 4.對獲取的數(shù)據(jù)庫信息進(jìn)行過濾整理,將相關(guān)內(nèi)容輸出,選擇相應(yīng)文章進(jìn)行閱讀并消化。
一、微信公眾號圖文消息的鏈接組成
 微信公眾帳號群發(fā)的圖文消息一般情況下是在微信公眾平臺(tái)上編輯和產(chǎn)生的。
 我們先從比較有名的公眾號“邏輯思維”的圖文消息看看一篇圖文消息鏈接的組成元素:
 邏輯思維有一篇每天60秒的文章【羅胖60秒:一個(gè)“智慧系統(tǒng)”是什么樣的?】,在微信打開通過瀏覽器查看到鏈接
 http://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217237&idx=2&sn=881c0a758a43348e2e7602110862f6ec&chksm=90460ec6a73187d00ebc007b1429609573ca42b9ef1dd74d860b4716f04b63661b15cbee2c6b&mpshare=1&scene=23&srcid=1202m2DVBW8OubvaR1DcXF0a#rd
 上面鏈接中的參數(shù)有__biz,mid,idx,sn,chksm,mpshare,scene和srcid
 其實(shí)主要參數(shù)只有__biz,mid,idx和sn四個(gè)參數(shù),而這四個(gè)參數(shù)能唯一確定一篇微信公眾平臺(tái)的圖文消息,所以以下鏈接就可以訪問文章
 https://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217237&idx=2&sn=881c0a758a43348e2e7602110862f6ec
 這四個(gè)參數(shù)的含義是:
 __biz可以認(rèn)為是微信公眾平臺(tái)對外公布的公眾帳號的唯一id,而這個(gè)__biz參數(shù)能用來生成公眾帳號的二維碼
 mid是圖文消息id,每篇文章這個(gè)消息id都唯一
 idx是發(fā)布的第幾條消息(1就代表是頭條位置消息,2代表第二條)
 sn是一個(gè)隨機(jī)加密串(對于一篇圖文消息是唯一的,如果你想問這個(gè)sn的生成規(guī)則是什么或者怎么破解,你基本上只能從微信公眾平臺(tái)開發(fā)團(tuán)隊(duì)才能得到答案)
 另外,對于除了__biz之外的三個(gè)參數(shù),mid/idx/sn 可以分別寫成 appmsgid/itemidx/sign,比如還是之前文章,用如下鏈接一樣可以訪問到:
 https://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&appmsgid=3009217237&itemidx=2&sign=881c0a758a43348e2e7602110862f6ec
 其實(shí)在早期,只需要__biz, mid和idx三個(gè)參數(shù)即可確定一篇微信公眾平臺(tái)的圖文消息,微信后來增加一個(gè)參數(shù)sn(sign),這樣做的原因是:
 微信公眾平臺(tái)的圖文消息首先在后臺(tái)保存為了一篇素材才能發(fā)布,而這個(gè)素材也會(huì)生成一個(gè)鏈接,在早期這個(gè)素材的鏈接就是后來要發(fā)布的文章的鏈接,而從上面這篇文章的鏈接你能猜出來,只需要改變mid(圖文消息id)這個(gè)值,比如這篇文章的mid是10000382,對這個(gè)數(shù)字加上1或者2就極有可能是下一篇圖文消息或者素材的鏈接,這樣用戶就有可能提前閱讀到公眾帳號已經(jīng)寫好并保存但還沒群發(fā)的素材了。
 所以分布文章時(shí)會(huì)加上一個(gè)隨機(jī)生成的參數(shù)sn,確保文章無法被知道。
二、微信公眾號歷史文章API組成
 在公眾號主頁,右上角有個(gè)人上半身圖標(biāo),點(diǎn)擊進(jìn)入消息界面,下滑找到并點(diǎn)擊“全部消息”,往下請求加載幾次歷史文章,然后回到Fiddler界面,不出意外的話應(yīng)該可以看到這幾次請求,可以看到返回的數(shù)據(jù)是json格式的,同時(shí)文章數(shù)據(jù)是以json字符串的形式定義在general_msg_list字段中:
 https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MjM5NjAxOTU4MA==&f=json&offset=10&count=10&is_ok=1&scene=126&uin=777&key=777&pass_ticket=pI3viTq3ke7q4XBuvPFfW04X1NN374CuTXRryqcWqIUGGXvrmHzytAth%2BMUWmDEv&wxtoken=&appmsg_token=985_CXzmkHn3e3dS9vsefAmdITS4irh69Rk351ye-w~~&x5=1&f=json
 以下介紹幾個(gè)主要參數(shù):
 - __biz:相當(dāng)于是當(dāng)前公眾號的id(唯一固定標(biāo)志)?
 - offset:文章數(shù)據(jù)接口請求偏移量標(biāo)志(從0開始),每次返回的json數(shù)據(jù)中會(huì)有下一次請求的offset,這里一般是按10遞增的?
 - count:每次請求的數(shù)據(jù)量(親測最多可以是10) ,所以可以固定為10
 - pass_ticket:可以理解是請求票據(jù),而且隔一段時(shí)間后(大概幾個(gè)小時(shí))就會(huì)過期,失效后都需要重新抓包替換
 - appmsg_token:同樣理解為非固定有過期策略的票據(jù),失效后都需要重新抓包替換
三、微信公眾號訪問的cookie組成:
訪問微信公眾號歷史文章,我們是需要登錄的,我們可以通過構(gòu)建cookie去跳過登錄過程
 通過訪問微信公眾號文章,我們通過Fiddler抓包可以看到cookie的相關(guān)信息
其中pass_ticket和wap_sid2不是固定的,經(jīng)常有變化,失效了都需要重新抓包,而其他wxtokenkey,wxuin,devicetype,version等只要微信號不變,登錄設(shè)備不變都不會(huì)改變。
四、微信公眾號單個(gè)文章評論API組成
 通過訪問微信公眾號文章,我們抓包可以得到文章評論的API,這個(gè)返回的也是json格式,評論存儲(chǔ)在elected_comment
 https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0&__biz=MjM5NjAxOTU4MA==&appmsgid=3009217642&idx=2&comment_id=578089232589930496&offset=0&limit=100&uin=777&key=777&pass_ticket=v+7PaoESYfMrxgXJpqOkfXV4Y2+gYNPPJfSSmzPXfeiuNrNiBeEcs+8b//Yit5sd&wxtoken=777&devicetype=android-26&clientversion=2607033b&appmsg_token=986_jbuKqpV9lCZ1cb787Tem5V5n6JKpU9TrOFUZRE5esVxnBK7IR-TsZiXLRNaO1tnfx4rkIk1xyFHRlqI7&x5=1&f=json
還是介紹一下其中的主要參數(shù):
 - __biz:和歷史文章列表中一致,微信公眾號ID
 - comment_id:評論的id,一篇文章唯一
 - appmsgid:圖文消息ID,與文章有關(guān)(文章鏈接中的mid)
 - pass_ticket:請求票據(jù),同一時(shí)間段內(nèi)歷史文章API和單個(gè)文章評論API一致
 - appmsg_token:非固定有過期策略的票據(jù),同一時(shí)間段內(nèi)歷史文章API和單個(gè)文章評論API不一致
 以上主要介紹了整個(gè)研究過程的第一點(diǎn),下面將會(huì)分析歷史文章API和單個(gè)文章評論API的返回
總結(jié)
以上是生活随笔為你收集整理的【Python爬虫】爬取微信公众号文章信息准备工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: php 即时通讯 app,即时通讯软件有
- 下一篇: android studio aspec
