微信公眾號文章的爬蟲可以通過多種方式,例如搜狗的接口,傳送門等網(wǎng)站,但是有個問題,就是這些網(wǎng)站只能獲取文章的內(nèi)容,而不能獲取文章相應(yīng)的點贊數(shù)評論數(shù),以及閱讀量等信息,所以今天教一下大家通過微信客戶端進行爬取這些信息。
我們用電腦微信客戶端登陸自己的微信,可以觀察到微信文章是不能直接在瀏覽器上訪問到詳細信息的,所以我們爬取還是要通過抓包。本文抓取的主要思路是這樣的,通過抓包分析微信公眾號向服務(wù)器發(fā)送的各種請求以及各種參數(shù)之間的關(guān)系,然后用python模擬客戶端發(fā)送請求,獲取相應(yīng)的數(shù)據(jù),下面展開詳細講解。
首先將手機和電腦連接在同一個局域網(wǎng)內(nèi),然后用fiddler設(shè)置代理,通過手機訪問公眾號歷史信息,獲取請求數(shù)據(jù)。如圖,隨機點擊一個公眾號的歷史信息
這個URL比較長,但是我們可以精簡一下成這樣
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz={biz}&scene=124&devicetype=iOS10.0.2&version=16050321&lang=zh_CN&nettype=WIFI&a8scene=3&fontScale=131&wx_header=1'.format(biz=self.biz)
其中biz相當于公眾的身份證號,一個公眾號只要一個,所以我們只要模擬請求該URL就可以了,但是里面有個key關(guān)鍵參數(shù),這個key值怎么產(chǎn)生的不知道,而且有時效性,每過20來分鐘就失效了,但是20多分對于抓取一個公眾號足以,于是模擬訪問該url,獲得第一次訪問歷史頁面的文章,一般是10篇,如圖是模仿請求然后用正則獲取文章url的代碼
輸出如圖
接著的思路是訪問每個詳細文章頁,獲得文章標題,摘要,內(nèi)容,而且分析請求可知,要獲取文章的點贊閱讀,以及評論,必須要根據(jù)文章詳情頁的參數(shù)。這里先看文章點贊閱讀的請求
該請求是post請求,要獲得需要的數(shù)據(jù)有兩個關(guān)鍵點,第一個是cookie里面的wip_sid2這個值,一定要帶上,該值也是有時效性的,不過可以夸公眾號訪問,不像key只那么嚴格,另外一個關(guān)鍵點是該請求需要提交的data,如圖
分析過data發(fā)現(xiàn)里面前面的兩個值都是在文章內(nèi)容頁面提取的,而且其他參數(shù)可以去掉,然后就可以模擬請求了,如圖代碼
接下來是評論的抓取,評論的的返回都是json數(shù)據(jù),比較好解析,先看請求
評論的url里面攜帶了多個參數(shù),有mid,sn,idx,第一個應(yīng)該是文章的id,sn應(yīng)該也是屬于標記之類的,idx是表示本文是該作者當天第幾篇發(fā)表的文章,一般是1或者2,這些都可以再詳情頁獲取,下面是模擬請求的代碼
里面headers的偽裝于獲取點贊的headers一樣
有了根據(jù)文章url獲取所有數(shù)據(jù)的辦法只好,接下來看看怎么翻頁獲取文章的URL,在手機中下拉刷新文章的時候,觸發(fā)的是該請求
如圖,最關(guān)鍵的還是wap_sid這個參數(shù),攜帶上這個參數(shù)加上refer跟ua就能訪問下一頁了,下一頁返回的數(shù)據(jù)是json,直接解析就好了,headers也是比較簡單的
first_url就是第一次訪問歷史信息的url
這樣就能翻頁抓取了,本人在代碼里面翻頁是利用文章的一個根據(jù)文章有遞減規(guī)律的id,因為在翻頁url里面的count參數(shù)不管用了,無論怎么訪問還是只返回10個一次。
總結(jié):在爬取的時候還是要手動截取公眾號的key值跟wap_sid值,這兩個值在首次訪問歷史信息都可以從客戶端產(chǎn)生,雖然能爬,但還是不夠自動化,感覺應(yīng)該有更好的辦法可以截取這兩個參數(shù),貼一張這兩個參數(shù)的獲取位置
上兩張結(jié)果圖,
下面這個爬取的是python中文社區(qū)的文章
這是萌叔在杭州公眾號:
最后值得得一提的是兩點,要想批量化抓取抓取微信公眾號還是比較難的,有兩個問題,第一個就是微信很容易封號,尤其是那些剛剛注冊沒有銀行卡的(騰訊說:用微信哪有不付花錢?),而且微信號不像微博號那么好買啊,分分鐘幾塊錢一個,還有一個就是自動化抓取,題主之前想過用按鍵精靈進行養(yǎng)號以及瀏覽要爬取的公眾號,然后抓包軟件自動捕獲請求頭寫進本地文件,這個改幾行fiddle的配置文件就好了,然后爬蟲進行監(jiān)聽,然后獲取相應(yīng)的參數(shù)自行爬取信息,想想現(xiàn)在還是挺難實現(xiàn)的,那些利用微信爬蟲做成了熱搜榜的,我也好想探究一下整個流程啊,有什么好的改進的建議,各位小伙伴踴躍提啊;
第二點是這個爬蟲當時讓樓主獲得了一個爬蟲工程師的面試機會,樓主是去年畢業(yè)今年才轉(zhuǎn)行的,大學(xué)讀的還是文科,雖然最后還是沒進去這間公司,好遺憾。。。要是有想轉(zhuǎn)行做爬蟲工程師的小伙伴可以考慮一下如何進行批量化抓取。