方案一:基于搜狗入口
在網(wǎng)上能搜索到的公眾號文章采集相關(guān)的信息來(lái)看來(lái)看,這是最多、最直接、也是最簡(jiǎn)單的一種方案。 一般流程是:
- 搜狗微信搜索入口進(jìn)行公眾號搜索
- 選取公眾號進(jìn)入公眾號歷史文章列表
- 通過(guò)文章列表獲取文章鏈接,通過(guò)文章鏈接獲取文章內容
- 對文章內容進(jìn)行解析入庫
采集過(guò)于頻繁的話(huà),搜狗搜索和公眾號歷史文章列表訪(fǎng)問(wèn)都會(huì )出現驗證碼。直接采用一般的腳本采集是無(wú)法拿到驗證碼的。這里可以使用無(wú)頭瀏覽器來(lái)進(jìn)行訪(fǎng)問(wèn),通過(guò)對接打碼平臺識別驗證碼。無(wú)頭瀏覽器可采用selenium。
即便采用無(wú)頭瀏覽器同樣存在問(wèn)題:
- 效率低下(實(shí)際上就是在跑一個(gè)完整的瀏覽器來(lái)模擬人類(lèi)操作)
- 網(wǎng)頁(yè)資源瀏覽器加載難以控制,腳本對瀏覽器加載很難控制
- 驗證碼識別也無(wú)法做到100%,中途很可能會(huì )打斷抓取流程
如果堅持使用搜狗入口并想進(jìn)行完美采集的話(huà)只有增加代理IP。順便說(shuō)一句,公開(kāi)免費的IP地址就別想了,非常不穩定,而且基本都被微信給封了。
除了面臨搜狗/微信的反爬蟲(chóng)機制之外,采用此方案還有其他的缺點(diǎn):
- 無(wú)法獲得閱讀數、點(diǎn)贊數等用于評估文章質(zhì)量的關(guān)鍵信息
- 無(wú)法及時(shí)獲得已經(jīng)發(fā)布公眾號文章,只能作定期的重復爬取
- 只能獲得最近十條群發(fā)文章
方案二:對手機微信進(jìn)行中間人攻擊
中間人攻擊本是某種黑客手法,用于截取客戶(hù)端與服務(wù)端之間的通信信息。這種方案的思路是在手機微信和微信服務(wù)器之間搭建一個(gè)”HTTPS代理”,用于截獲手機微信獲取的公眾號文章信息。一般性步驟是:
- 手機微信搜索一個(gè)公眾號
- 點(diǎn)擊進(jìn)入公眾號歷史文章頁(yè)面
- 代理識別已經(jīng)進(jìn)入列表頁(yè),進(jìn)行內容截獲,同時(shí)根據實(shí)際情況返回繼續下拉或爬取新的公眾號的js代碼
這種方案能夠實(shí)現自動(dòng)化的原因是:
- 微信公眾號使用的是HTTPS協(xié)議,且內容未加密
- 微信公眾號文章列表和詳情本質(zhì)上是個(gè)Web頁(yè)面,可以嵌入js代碼進(jìn)行控制
這種方案的優(yōu)點(diǎn):
- 一般情況下不會(huì )被屏蔽
- 能拿到點(diǎn)贊數和閱讀數等文章評估信息
- 能拿到公眾號全部的歷史文章
當然,也存在很多缺點(diǎn):
- 需要一個(gè)長(cháng)期聯(lián)網(wǎng)的實(shí)體手機
- 前期需要設置代理,工作量比較大
- 本質(zhì)上還是個(gè)輪查的過(guò)程,而不是實(shí)時(shí)推送
- 同樣有Web加載難以控制的風(fēng)險,且本地網(wǎng)絡(luò )環(huán)境對其影響非常大
- 存在著(zhù)微信接口發(fā)生變更代碼不再適應的情況
這種方案還存在著(zhù)一些變種,比如:
- 通過(guò)lua腳本控制公眾號搜索而不是靠代理返回嵌入的js代碼
- 通過(guò)GUI操作腳本控制PC端微信
但都存在”不能精確穩定控制”的缺點(diǎn)
方案三:網(wǎng)頁(yè)微信抓包分析
在被微信反爬蟲(chóng)虐了很長(cháng)時(shí)間之后,和同事大腦風(fēng)暴尋找新的微信公眾號文章爬取方案。就分析有哪些能獲得數據的入口。模糊記得網(wǎng)頁(yè)微信是有公眾號文章閱讀功能的,正好我曾把玩過(guò)一段時(shí)間個(gè)人微信機器人,主要使用的是ItChat這個(gè)Python包。它實(shí)現的原理就是對網(wǎng)頁(yè)微信進(jìn)行抓包分析,匯總成個(gè)人微信接口,目標就是所有網(wǎng)頁(yè)微信能實(shí)現的功能它都能實(shí)現。。所以就有了一個(gè)初步的方案——通過(guò)ItChat讓微信公眾號文章自己推送過(guò)來(lái)??煜掳嗟臅r(shí)候和同事提了一下,他也挺感興趣,第二天就實(shí)現出來(lái)了驗證代碼(ItChat實(shí)現相應功能代碼非常簡(jiǎn)短,內容解析部分之前就做了,可以直接用)。
這種方案的主要流程是:
- 手機微信關(guān)注要抓取的目標公眾號
- 服務(wù)器端通過(guò)ItChat登錄網(wǎng)頁(yè)微信
- 當公眾號發(fā)布新文章推送的時(shí)候,會(huì )被服務(wù)端截獲進(jìn)行后續的解析入庫
這種方案的優(yōu)點(diǎn)是:
- 基本零間隔獲取已經(jīng)發(fā)布的公眾號文章
- 能獲取點(diǎn)贊數、閱讀數
- 只需手機微信保持登陸,不用其他操作
當然缺點(diǎn)也是有的:
- 需要一臺長(cháng)期聯(lián)網(wǎng)的手機
- 手機微信不能主動(dòng)退出,或長(cháng)時(shí)間掉線(xiàn)
- 一個(gè)微信一天能夠關(guān)注的公眾號有限
- 新微信號不能登陸網(wǎng)頁(yè)微信,也就不能用于此方案
- 只能獲取最新發(fā)布的文章,無(wú)法獲取歷史文章
微信公眾號文章采集基本上就是和騰訊斗智斗勇,費心費力。直到現在也沒(méi)能找到一個(gè)完美的解決方案,只能根據實(shí)際的采集目標,擇優(yōu)選取。要完全服務(wù)端,不依賴(lài)手機微信,不需要點(diǎn)贊數閱讀數,有大量代理IP就采用方案一;本地網(wǎng)絡(luò )穩定且有富裕的手機就用方案二;需要及時(shí)獲得公眾號發(fā)布的最新文章的話(huà)就用方案三。
本文由網(wǎng)上采集發(fā)布,不代表我們立場(chǎng),轉載聯(lián)系作者并注明出處:http://seensnowboarding.com/shbk/48454.html