微信公衆號文章採集的幾種方案

方案一:基於搜狗入口

在網上能搜索到的公衆號文章採集相關的信息來看來看,這是最多、最直接、也是最簡單的一種方案。
一般流程是:

  1. 搜狗微信搜索入口進行公衆號搜索

  2. 選取公衆號進入公衆號歷史文章列表

  3. 通過文章列表獲取文章鏈接,通過文章鏈接獲取文章內容

  4. 對文章內容進行解析入庫

採集過於頻繁的話,搜狗搜索和公衆號歷史文章列表訪問都會出現驗證碼。直接採用一般的腳本採集是無法拿到驗證碼的。這裏可以使用無頭瀏覽器來進行訪問,通過對接打碼平臺識別驗證碼。無頭瀏覽器可採用selenium。

即便採用無頭瀏覽器同樣存在問題:
效率低下(實際上就是在跑一個完整的瀏覽器來模擬人類操作)
網頁資源瀏覽器加載難以控制,腳本對瀏覽器加載很難控制
驗證碼識別也無法做到100%,中途很可能會打斷抓取流程
如果堅持使用搜狗入口並想進行完美採集的話只有增加代理IP。順便說一句,公開免費的IP地址就別想了,非常不穩定,而且基本都被微信給封了。
除了面臨搜狗/微信的反爬蟲機制之外,採用此方案還有其他的缺點:
無法獲得閱讀數、點贊數等用於評估文章質量的關鍵信息
無法及時獲得已經發布公衆號文章,只能作定期的重複爬取
只能獲得最近十條羣發文章

方案二:對手機微信進行中間人攻擊

中間人攻擊本是某種黑客手法,用於截取客戶端與服務端之間的通信信息。這種方案的思路是在手機微信和微信服務器之間搭建一個"HTTPS代理",用於截獲手機微信獲取的公衆號文章信息。一般性步驟是:

手機微

  • 信搜索一個公衆號

  • 點擊進入公衆號歷史文章頁面

  • 代理識別已經進入列表頁,進行內容截獲,同時根據實際情況返回繼續下拉或爬取新的公衆號的js代碼

  • 這種方案能夠實現自動化的原因是:

  • 微信公衆號使用的是HTTPS協議,且內容未加密

  • 微信公衆號文章列表和詳情本質上是個Web頁面,可以嵌入js代碼進行控制

這種方案的優點:

  • 一般情況下不會被屏蔽

  • 能拿到點贊數和閱讀數等文章評估信息

  • 能拿到公衆號全部的歷史文章

當然,也存在很多缺點:

  • 需要一個長期聯網的實體手機

  • 前期需要設置代理,工作量比較大

  • 本質上還是個輪查的過程,而不是實時推送

  • 同樣有Web加載難以控制的風險,且本地網絡環境對其影響非常大

  • 存在着微信接口發生變更代碼不再適應的情況

這種方案還存在着一些變種,比如:

  • 通過lua腳本控制公衆號搜索而不是靠代理返回嵌入的js代碼

  • 通過GUI操作腳本控制PC端微信

  • 但都存在"不能精確穩定控制"的缺點

方案三:網頁微信抓包分析

在被微信反爬蟲虐了很長時間之後,和同事大腦風暴尋找新的微信公衆號文章爬取方案。就分析有哪些能獲得數據的入口。模糊記得網頁微信是有公衆號文章閱讀功能的,正好我曾把玩過一段時間個人微信機器人,主要使用的是ItChat這個Python包。它實現的原理就是對網頁微信進行抓包分析,彙總成個人微信接口,目標就是所有網頁微信能實現的功能它都能實現。。所以就有了一個初步的方案——通過ItChat讓微信公衆號文章自己推送過來。快下班的時候和同事提了一下,他也挺感興趣,第二天就實現出來了驗證代碼(ItChat實現相應功能代碼非常簡短,內容解析部分之前就做了,可以直接用)。

這種方案的主要流程是:

  • 手機微信關注要抓取的目標公衆號

  • 服務器端通過ItChat登錄網頁微信

  • 當公衆號發佈新文章推送的時候,會被服務端截獲進行後續的解析入庫

這種方案的優點是:

  • 基本零間隔獲取已經發布的公衆號文章

  • 能獲取點贊數、閱讀數

  • 只需手機微信保持登陸,不用其他操作

當然缺點也是有的:

  • 需要一臺長期聯網的手機

  • 手機微信不能主動退出,或長時間掉線

  • 一個微信一天能夠關注的公衆號有限

  • 新微信號不能登陸網頁微信,也就不能用於此方案

  • 只能獲取最新發布的文章,無法獲取歷史文章

微信公衆號文章採集基本上就是和騰訊鬥智鬥勇,費心費力。直到現在也沒能找到一個完美的解決方案,只能根據實際的採集目標,擇優選取。要完全服務端,不依賴手機微信,不需要點贊數閱讀數,有大量代理IP就採用方案一;本地網絡穩定且有富裕的手機就用方案二;需要及時獲得公衆號發佈的最新文章的話就用方案三。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章