Python爬蟲爬取微信公眾號歷史文章全部鏈接

因為朋友問我能不能找一下一個微信公眾號的全部歷史文章的鏈接,我就幫他弄了一下,通過百度和谷歌發(fā)現(xiàn)現(xiàn)在大家爬微信公眾號的思路基本都是下面兩種:

  1. 通過搜狗搜索微信公眾號然后拿到鏈接
  2. 通過fiddler檢測手機微信拿到鏈接。

經(jīng)過考慮,首先放棄了搜狗,因為初步看了一下搜狗的公眾號搜到的那里只有前十篇文章的鏈接。下面說一下我這次的思路。

思路

我在嘗試抓取手機微信上的公眾號的歷史鏈接時,無意中發(fā)現(xiàn),使用電腦上的微信同樣可以抓取到鏈接。不過這一點倒是沒有太大的影響。因為我試了一下手機和電腦都是可以爬的,只不過電腦上要更方便一下。

  1. 首先,打開fiddler,然后在電腦端微信上找到要爬取的微信公眾號,然后左鍵點一下就會有一個查看所有歷史信息。點擊查看歷史信息之后我們就會在fiddler上看到一條這樣的GET請求:/mp/getmasssendmsg?__biz=MzA3NDk1NjI0OQ==&uin=MjgxMTU0NDM1&key=cdce7679908e443d6f21adcc7236aea6bfd78ef06cb0f784644d5a3d1a7d1ee97b52997a3fdfca401835b9cc962bfa98e2d8f8806cba94b89ccd72c0883df2baaf712b0818727d149cefb3f920257d27&devicetype=Windows+10&version=6203005d&lang=zh_CN&ascene=7&pass_ticket=PMllYHvaLNk2DRePx1zNYuCv71ocxw7m6lOhOnaFfnnDt35P7ybHP3ESUYFoYaDQ ,在這個前面加上https://mp.weixin.qq.com后在瀏覽器中打開整個鏈接就會發(fā)現(xiàn)打開了這個公眾號的歷史文章了。
    多用fiddler抓幾次這個鏈接以及換幾個公眾號后就會發(fā)現(xiàn),整個鏈接里面biz應(yīng)該是微信公眾號的標(biāo)識符,uin應(yīng)該是微信號的標(biāo)識,key是騰訊的一個算法。在整個鏈接里面,如果是抓同一個微信公眾號的話,那么只有key是有時效性的,其它的都是不變的。超過一定時間的話,再用這個key打開鏈接就會發(fā)現(xiàn)不能用了,提示請用微信打開了!這里我本來以為如果用微信自帶的瀏覽器就不會有時效性問題了, 所以最開始我的UA設(shè)置的微信的,然后發(fā)現(xiàn)并沒有什么用...就又換回電腦的了...這里就很坑啊,不能死用一個key的!不過還好只抓一個公眾號的話,時間還是夠的,就是寫程序的時候就很頭疼了..每次失效了都要重新弄...

  2. 通過審查這個鏈接里面的元素,我們不難發(fā)現(xiàn),已經(jīng)可以看到文章的鏈接了,但是問題來了,這個初始鏈接里依然只有10條最近的文章。這個時候,我們必須往下滑動滾動條才能把剩下的文章全部的顯示出來。所以在寫程序的時候就需要通過selenium+phahtomJS來鏈接這個界面并且滑動滾動條,知道滾動條滑到最下面為止了。這樣我們再審查元素就可以看到獲得了全部的文章鏈接。 ** 注意,文章的鏈接分別藏在幾種標(biāo)簽里面,所以要把他們?nèi)空页鰜?,不然會遺漏的! **然后把這些鏈接存起來就好了。

程序

大概說一下我的程序思路:
整個流程就是通過selenium+phantomJS鏈接上面那個鏈接,通過BeautifulSoup提取頁面,利用JS操作滾動條滾到底直到出現(xiàn)沒有更多消息為止,最后找到所有鏈接后輸出就行了(記得鏈接存在幾種類型的tag里面,一定要找全)。由于朋友只需要這一個公眾號的鏈接,而且因為同一個公眾號的鏈接只有key在變,所以key就從bash獲取就行了,其它的可以寫在程序里。我是不是太懶了........大概思路就是這樣,還有很多可以優(yōu)化的地方...

附上代碼(https://github.com/fst034356/crawler/tree/master/wechat)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容