利用搜狗微信自製一個簡易微信公眾號爬蟲接口

2021-02-13 K的學習筆記

微信公眾號現已成為主流的一對多媒體行為活動,也是現在網際網路內容生產不可忽視的一股力量。

在此基礎上,微信公眾號爬蟲變得很有價值,對內容生產型公眾號進行數據挖掘可以得到很多有意思、有價值的信息。就我所知,可用於微信公眾號爬蟲的方式主要有以下幾種:web微信,手機客戶端抓包,搜狗微信入口,appium自動化測試,Xposed框架等

其中,web微信只能被動接受公眾號消息,不能主動去查閱微信公眾號歷史消息。由此,可以通過itchat,wxpy等web微信庫來編寫一個機器人,實時接收微信推送,適用於需要實時更新微信推送消息的場景需求。但此方法有個弊端,首先要保證手機上自己的微信不經常斷網掉線,才能使機器人長時間在線。再者,用這些第三方庫長時間登陸或頻繁的登陸web微信,或被封號,要是微信小號很多,可以嘗試這個方法。

手機客戶端抓包,利用fiddler或charles等抓包工具,算是一個比較主流(我自己感覺的orz),效率較高的方法,可以快速的抓取微信公眾號信息和歷史消息,此方法也有弊端:cookies失效快,半天差不多的時間吧,有針對性的去抓取某幾個公眾號的歷史消息也是可以的。要想通過模擬登陸微信自動獲得cookies,好像挺難的,小弟愚鈍,無法實現,貌似微信登陸是tcp協議?

搜狗微信入口與其他相比顯得友好的多。應該是微信搜尋引擎和搜狗有合作吧,所以搜狗能有微信搜索的入口。搜狗微信有兩個類型,一是通過關鍵詞搜索文章,二是通過關鍵詞搜索公眾號,並且搜索到的微信號只能獲得其最近十條消息推送(即意味著無法通過此方法爬取指定公眾號歷史消息)。這個方法還是有一些應用場景的,比如像獲取關於某個關鍵詞的大量文章,比如做一個定時任務,或間隔一定時間去爬取某個微信公眾號最新十條推送來獲取其最新推送,這一點上,比web微信要好得多,搜狗微信的更新也是實時的,直接和mp.weixin.qq.com相關聯。

appium自動化和Xposed框架我了解不多。appium類似於selenium,在移動端做自動化測試的,模擬點擊即可。Xposed框架就有很多可以搞的了,Xposed可以在不修改apk的情況下做到一些額外的功能,爬蟲自然是可以的,除此之外可做到以自動搶紅包,自動回復機器人,修改微信步數等等騷操作。

寫爬蟲也有一段時間了,個人感覺實現爬蟲除了反反爬,爬蟲效率外,還有一個很難實現的地方就是爬蟲的穩定性,健壯性,需要考慮到很多異常情況,以及合理有效的異常處理,在這一點上,我覺得我還需要向各大爬蟲大佬學習。(感覺自己瞎扯了好多,還沒有開始我的正文(orz),感覺嫌我囉嗦的大佬請別生氣。)

利用搜狗微信寫一個爬蟲接口,代碼很簡陋,只有兩百行不到的代碼。(這裡我還得吐槽一下,python寫多了,總有一種自己很叼,編程很簡單的錯覺,幾行代碼就能實現很厲害的功能,這時候需要去寫寫CPP冷靜一下,讓自己知道什麼是真正的編程。)

以下記錄下我寫這個爬蟲接口腳本的過程:


1. 頁面請求分析(以公眾號搜索為例):

可以看到第一個http請求包就是我們想要的結果,查看其query string,如下:

看起來挺簡單的不是,我們得到以下幾個信息:

 請求url為   http://weixin.sogou.com/weixin

請求類型為 Get

請求參數如上圖

發現將請求參數tyepe 改成 2,就是獲取關鍵字搜索文章的結果

比較簡單

2. 模擬頁面請求:

我們直接用 url, 請求參數params, 還有谷歌瀏覽器的 user-agent 請求,發現可以成功的獲取到我們想要頁面的源碼,接下來我們獲取搜索結果下的第一個公眾號即可(這意味著需要準確的給定公眾號名稱,太過模糊有可能獲取到與其類似的公眾號結果)。

3. 分析頁面:

先確定爬取思路,第一步獲取微信公眾號連結,再通過該微信公眾號連結獲取其最近十條推送的相關信息,包括標題,日期,作者,內容摘要,內容連結(事實上,我們發現有了微信推送連結之後就能很輕鬆的獲取其推送主體內容,但不包括點讚數和閱讀數,這幾個數據只能在微信手機端才能查看,如果有機會的話,下次記錄下自己手機微信抓包爬蟲的過程)。

於是第一步我們獲取公眾號連結:

這裡我們直接使用正則表達式提取即可(這麼簡單的就不用xpath,bs4了,依賴標準庫和第三方庫還是有所不同的。)

(抱歉被水印擋住了orz,換一張。)

 第二步根據微信公眾號連結獲取最近十條推送信息:

(我只寫了一篇orz,以後多加油。)

ctlr U 查看網頁源碼,發現原始信息都放在一個js變量裡面。

好辦,繼續正則提取,將json格式的字符串轉換成python裡面的字典,有兩種辦法,第一種是用  json.loads 方法, 第二種是用內置的 eval方法,這兩種方法有些區別,比如說單引號和雙引號, json格式中使用的是雙引號, python字典一般是單引號。

OK,獲得原始推送信息數據了,但這裡面有很多我們用不到的信息,將其剔除一下,值得一提的是,datetime的值是一個timestamp,我們需要將其轉化為直觀的時間表達。

到此,關於微信公眾號的爬蟲差不都就解決了,接下來需要將其封裝為類。主要部分代碼如下。

另外,關於關鍵詞搜索文章的爬蟲接口我也一併寫了,AccountAPI,ArticleAPI,其父類是一AP類,API類有query_url, params, headers, _get_response, _get_datetime等變量和方法,供於AccountAPI,ArticleAPI共用。

代碼放在 

https://github.com/ice-tong/boring_item/tree/master/sougou_weixin

有興趣可以看看,點擊閱讀原文即可。

放兩張使用截圖

(AccountAPI)

(ArticleAPI)

結語:

這麼簡陋的一個爬蟲稱其為api,我實在是有點膽大妄為了。小打小鬧而已,難登大雅之堂,需要向各位大佬虛心學習。

相關焦點

  • 零基礎開發微信公眾號爬蟲程序
    太平集團新媒體運營人員每天要手工工統計若干同業微信公眾號的發文情況(主要要統計閱讀數和點讚數)。為了提高效率,運營人員希望我們能夠開發一個自動統計的工具。接到這個需求後,我通過Google搜索了一下微信公眾號爬蟲相關的內容。看到一個在校大學生在Github上發表了一篇題為《基於搜狗微信搜索的微信公眾號爬蟲接口》文章(點擊閱讀原文查看),並打包成一個python組件供大家下載安裝。Python語言實現後臺批處理比較方便。
  • 微信客戶端公眾號爬蟲
    微信公眾號文章的爬蟲可以通過多種方式,例如搜狗的接口,傳送門等網站,但是有個問題,就是這些網站只能獲取文章的內容,而不能獲取文章相應的點讚數評論數
  • Python爬蟲—優雅地獲取微信公眾號文章(一)
    微信公眾號文章自然是查資料的好去處,不過往往容易迷失在「這篇文章好像剛剛讀過」和「不足千字的營銷號爛文」之中。於是乎想到可以將某個關鍵詞的所有文章利用爬蟲爬取下來,然後做一個簡單的查重和過濾條件,稍微緩解一些查資料的痛苦。
  • 爬蟲代理之爬微信公眾號文章
    #coding:utf-8#主要目標是利用代理爬取微信公眾號的文章,提取正文、發表日期、公眾號等內容,爬取來源是搜狗微信,
  • 搜狗微信公眾號排名規則解密
    搜狗微信公眾號排名規則解密只要有搜尋引擎,就有SEO。那麼此次搜狗上線的微信搜索,就有微信SEO的誕生。那麼搜狗微信SEO的排名規則是什麼?如何通過微信SEO技巧快速提升公眾號和推送文章的排名呢?今天就和大家分享微信SEO的技巧,如何在搜狗微信搜索中獲得較好的排名,爭取更多的展現機會!
  • 微信公眾號文章爬蟲,這個就夠了
    那麼有沒有這樣的爬蟲,可以將公眾號的文章全部爬到本地,並提供便捷的搜索功能,這樣當我想查找某類文章的時候會非常方便,同時文章都在本地,也不用擔心被人刪除。最近正好看到一個牛逼的 Python 爬蟲項目,就是爬取微信公眾號的文章的,看了一下功能介紹,真是想見恨晚啊,作者水平真的是牛逼,我已經獻出了自己的崇拜,特分享出來,你可以使用它的功能,也可以研究它的技術,請拿走不謝。
  • 「搜狗微信搜索」上線 可搜公眾號內容
  • Python爬蟲—優雅地獲取微信公眾號文章(二))
    本項目計劃通過爬蟲獲取某個關鍵詞下的所有公眾號文章全文,然後編寫一個簡易的查重算法,篩選出微信公眾號上不重複的文章,降低人為篩選的工作量
  • 搜狗微信公眾號搜索:真正的想像空間在哪?
    有人說微信SEO馬上就成為一門新生意,有人說微信自媒體們的外衣被扒光了,甚至還有人說微信公眾號查詢將幫助搜狗顛覆百度這一巨頭。筆者卻比較保守,我認為現在對搜狗微信公眾號查詢論成敗還為時過早,搜狗要想與微信聯合顛覆既有市場,還遠沒出發。
  • 搜狗微信公眾號查詢:真正的想像空間在哪?
    現在終於面世了,並非大家想像中的移動搜索產品,而是微信公眾帳號內容搜索。從筆者體驗情況來看,排序、查準和查全等方面還有不少改進空間,畢竟還只是測試版本,但它面臨的最大難題或許是,人們在PC上搜索公眾帳號的使用習慣尚未養成。一些擔心自己內容被剽竊的微信運營者自然可以用其來找小偷,但這樣的需求不會是主流和高頻,更不會存在所謂的SEO了。
  • python爬蟲基礎之簡易網頁搜集器
    簡易網頁搜集器前面我們已經學會了簡單爬取瀏覽器頁面的爬蟲。
  • 一步一步教你用 Vue.js + Vuex 製作專門收藏微信公眾號的 app
    項目介紹我在微信上關注了不少的公眾號,經常瀏覽裡面的內容。但是往往在我閱讀文章的時候,總是被各種微信消息打斷,不得不切出去,回復消息,然後一路點回公眾號,重新打開文章,周而復始,不勝其煩。後來想起,微信跟搜狗有合作,可以通過搜狗直接搜索公眾號,那麼為什麼不利用這個資源做一個專門收藏公眾號的應用呢?
  • 搜狗微信搜索正式上線 公眾號內容全能搜到
    6月9日上午消息,微媒體今日發現,搜狗微信搜索(weixin.sogou.com)已經悄然上線,主要功能是檢索微信公眾帳號及其發布的內容。    微媒體體驗後發現,搜狗微信搜索主要功能可以搜索公眾帳號和文章,通過公眾號搜索,可以查詢到所有包含該關鍵詞的微信公眾號,搜索結果包含有微信號、功能介紹、認證信息、二維碼等信息。
  • 搜狗微信公眾平臺搜索上「新」,微信「第一次」搜得如此好看
    這也正說明了產品端對「微信搜索」升級背後的「搜索+閱讀」產品定位的深度思考。藉助對一些升級內容的提煉,我們可以先與大家做一個簡單的分享:搜狗微信公眾平臺搜索2.0對於用戶來說最重要的是搜索平臺功能和搜索結果以及呈現方式的升級。除了對微信公眾號和平臺內文章方便的搜索功能外,搜狗搜索利用大數據實現了微信搜索結果(文章內容)的優化排序,這能夠確保被多數用戶認可的最優質的文章都排在搜索結果前面。全面而優質的搜索結果縮短了用戶繁冗篩選的過程,提升了搜索效率,使產品使用感受和閱讀質量得到有效保證。
  • 怎麼增加微信公眾號的權重
    搜狗微信搜索公眾號排序規則  1、文本相關性  文本相關性基本是所有搜尋引擎都具備的一個因素,這也是最基本最直觀的一個因素。  2、權威性  在搜狗微信搜索,公眾號的權威性怎麼看?答案就是認證,這和百度加V,微博認證是一個道理。而不同的認證對於排名也是有影響的:微信認證權重>騰訊微博認證權重>沒有認證。
  • 23個Python爬蟲開源項目代碼:微信、淘寶、豆瓣、知乎、微博...
    整理的原因是,爬蟲入門簡單快速,也非常適合新入門的小夥伴培養信心,所有連結指向GitHub,微信不能直接打開,老規矩,可以用電腦打開。1. WechatSogou – 微信公眾號爬蟲基於搜狗微信搜索的微信公眾號爬蟲接口,可以擴展成基於搜狗搜索的爬蟲,返回結果是列表,每一項均是公眾號具體信息字典。
  • Vue+Node+MongoDB高級全棧開發視頻教程(微信公眾號小程序) 完整版
    第2章 公眾號小程序的服務能力與場景簡要介紹下公眾號小程序各自的使用場景,服務能力,以及暴露出來的 API 功能,支付權限的申請以及微信開放平臺的接入綁定。第4章 微信公眾號基礎功能快速開發通過 Nuxt 初始化本地的初始 Node.js 項目,介紹在本地通過代理工具實現內網的服務代理,同時把微信的核心 API 梳理一遍,比如票據獲取、保存,消息回復封裝,菜單創建刪除,多媒體素材接口等等,特別是在 Node.js 項目中,如何封裝消息及權限模塊,來實現更加深度的微信 API 定製,已經如何實現多種方式的用戶資
  • 搜狗微信下線了怎麼獲取公眾號文章?最新方式手把手教你
    背景最近發現搜狗微信在2019.10.29號的時候悄然下線了一個功能,也就是不能在搜狗搜索中指定公眾號的名稱,如下圖這樣的話,我們就沒有辦法準確的搜索到某個公眾號的最新的文章了,所以我們要是想要去實時追蹤到某個公眾號的最新文章的話,就不能通過搜狗這個渠道來爬取了。
  • 搜狗微信公眾平臺搜索助你變身流行達人
    現在,越來越多的時尚一族開始轉向微信公眾號獲取熱門深度信息,正因為這裡每天有數百萬的公眾號文章信息,囊括生活萬象,且有梗有深度。但是,一直以來,大家只能通過訂閱方式閱讀微信公眾號文章,獲取信息成本很高,這讓不少用戶頭疼不已  自從搜狗微信公眾平臺搜索獨家上線以來,這一問題得到了有效解決。通過搜狗微信公眾平臺搜索,用戶可以看到海量公眾號及其文章,無需逐個訂閱。
  • 搜狗微信搜索上線發布會現場速記
    今天在進入主題之前,請允許我先為各位簡單匯報一下搜狗搜索相關情況。幾個月之前,我們一起見證了搜狗搜索更換了新的LOGO,發布APP全面入主騰訊QQ版圖,在6月,搜狗和微信實現戰略上合作。搜狗搜索獨家加入微信公眾號,在業內首先實現公眾平臺微信外網,給用戶帶來全新體驗。