微信公眾號文章采集方案

方案一:基于搜狗入口

在網(wǎng)上能搜索到的公眾號文章采集相關(guān)的信息來看來看,這是最多、最直接、也是最簡單的一種方案。
一般流程是:

  • 搜狗微信搜索入口進行公眾號搜索
  • 選取公眾號進入公眾號歷史文章列表
  • 通過文章列表獲取文章鏈接,通過文章鏈接獲取文章內(nèi)容
  • 對文章內(nèi)容進行解析入庫

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

即便采用無頭瀏覽器同樣存在問題:

  • 效率低下(實際上就是在跑一個完整的瀏覽器來模擬人類操作)
  • 網(wǎng)頁資源瀏覽器加載難以控制,腳本對瀏覽器加載很難控制
  • 驗證碼識別也無法做到100%,中途很可能會打斷抓取流程

如果堅持使用搜狗入口并想進行完美采集的話只有增加代理IP。順便說一句,公開免費的IP地址就別想了,非常不穩(wěn)定,而且基本都被微信給封了。

除了面臨搜狗/微信的反爬蟲機制之外,采用此方案還有其他的缺點:

  • 無法獲得閱讀數(shù)、點贊數(shù)等用于評估文章質(zhì)量的關(guān)鍵信息
  • 無法及時獲得已經(jīng)發(fā)布公眾號文章,只能作定期的重復爬取
  • 只能獲得最近十條群發(fā)文章

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

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

  • 手機微信搜索一個公眾號
  • 點擊進入公眾號歷史文章頁面
  • 代理識別已經(jīng)進入列表頁,進行內(nèi)容截獲,同時根據(jù)實際情況返回繼續(xù)下拉或爬取新的公眾號的js代碼

這種方案能夠?qū)崿F(xiàn)自動化的原因是:

  • 微信公眾號使用的是HTTPS協(xié)議,且內(nèi)容未加密
  • 微信公眾號文章列表和詳情本質(zhì)上是個Web頁面,可以嵌入js代碼進行控制

這種方案的優(yōu)點:

  • 一般情況下不會被屏蔽
  • 能拿到點贊數(shù)和閱讀數(shù)等文章評估信息
  • 能拿到公眾號全部的歷史文章

當然,也存在很多缺點:

  • 需要一個長期聯(lián)網(wǎng)的實體手機
  • 前期需要設(shè)置代理,工作量比較大
  • 本質(zhì)上還是個輪查的過程,而不是實時推送
  • 同樣有Web加載難以控制的風險,且本地網(wǎng)絡(luò)環(huán)境對其影響非常大
  • 存在著微信接口發(fā)生變更代碼不再適應(yīng)的情況

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

  • 通過lua腳本控制公眾號搜索而不是靠代理返回嵌入的js代碼
  • 通過GUI操作腳本控制PC端微信

但都存在“不能精確穩(wěn)定控制”的缺點

方案三:網(wǎng)頁微信抓包分析

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

這種方案的主要流程是:

  • 手機微信關(guān)注要抓取的目標公眾號
  • 服務(wù)器端通過ItChat登錄網(wǎng)頁微信
  • 當公眾號發(fā)布新文章推送的時候,會被服務(wù)端截獲進行后續(xù)的解析入庫

這種方案的優(yōu)點是:

  • 基本零間隔獲取已經(jīng)發(fā)布的公眾號文章
  • 能獲取點贊數(shù)、閱讀數(shù)
  • 只需手機微信保持登陸,不用其他操作

當然缺點也是有的:

  • 需要一臺長期聯(lián)網(wǎng)的手機
  • 手機微信不能主動退出,或長時間掉線
  • 一個微信一天能夠關(guān)注的公眾號有限
  • 新微信號不能登陸網(wǎng)頁微信,也就不能用于此方案
  • 只能獲取最新發(fā)布的文章,無法獲取歷史文章

方案四:利用微信公眾號搜索微信全部歷史文章

一、先說破解之道

破解的關(guān)鍵就是利用微信公眾號后臺素材管理-新建圖文素材-超鏈接-查找文章(公眾號)的接口。如下圖:

image.png
image.png

二、具體破解方法

2.1 通過selenium+webdriver獲取公眾號的Cookie

因為在公眾號后臺請求“查找文章(公眾號)”接口時需要一個微信公眾號的Cookie,所以在爬文章內(nèi)容之前需要先獲取一個可用的Cookie。這塊相對來說比較簡單,我就直接貼上我寫的代碼。PS:盡情優(yōu)化完善吧。

image.png

2.2 通過微信公眾號獲取公眾號文章接口獲取文章

1)微信公眾號登陸地址:https://mp.weixin.qq.com/

2)登錄之后獲取token。

image.png

3)利用微信公眾號后臺新建圖文消息,搜索公眾號名稱,需要上一步的token。

image.png

并且通過接口返回的內(nèi)容獲取公眾號的fakeid。

image.png

4)選定要爬取的公眾號,獲取文章接口地址,需要上一步的fakeid。

image.png

5)文章列表翻頁及內(nèi)容獲取。

image.png
image.png

三、完整代碼

image.png

微信公眾號文章采集基本上就是和騰訊斗智斗勇,費心費力。直到現(xiàn)在也沒能找到一個完美的解決方案,只能根據(jù)實際的采集目標,擇優(yōu)選取。要完全服務(wù)端,不依賴手機微信,不需要點贊數(shù)閱讀數(shù),有大量代理IP就采用方案一;本地網(wǎng)絡(luò)穩(wěn)定且有富裕的手機就用方案二;需要及時獲得公眾號發(fā)布的最新文章的話就用方案三。

?著作權(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)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,812評論 25 709
  • 今天下大雨,昨天沒睡好,其實一直感覺都睡不好睡不夠,頹到不行啊,跟個死蛇一樣。作為一個半只腳踏在娛樂圈的人,...
    曾經(jīng)六斤閱讀 415評論 0 1
  • 蜜糖沉底水中你需要攪拌均勻才能喝到甜。
    光鋒容閱讀 297評論 0 0
  • 把自己產(chǎn)生的垃圾帶下山會死?。?蟠桿峰很美,我不需要放圖告訴你它有多么美。因為地上的垃圾就可以告訴你,有多少人不遠...
    Scarlett_violet閱讀 490評論 1 3
  • 沿途走走停停 迎著微風 向著太陽 感覺還好 在嘗試著能跳得多高,其實遠不止的,相機不好抓拍,只好作罷 大清早的 路...
    taiyang1967閱讀 207評論 0 0

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