Python 抓取微信公眾號(hào)賬號(hào)信息的方法
搜狗微信搜索提供兩種類型的關(guān)鍵詞搜索,一種是搜索公眾號(hào)文章內(nèi)容,另一種是直接搜索微信公眾號(hào)。通過微信公眾號(hào)搜索可以獲取公眾號(hào)的基本信息及最近發(fā)布的10條文章,今天來抓取一下微信公眾號(hào)的賬號(hào)信息
爬蟲
首先通過首頁(yè)進(jìn)入,可以按照類別抓取,通過“查看更多”可以找出頁(yè)面鏈接規(guī)則:
import requests as req import re reTypes = r'id="pc_\d*" uigs="(pc_\d*)">([\s\S]*?)</a>' Entry = "http://weixin.sogou.com/" entryPage = req.get(Entry) allTypes = re.findall(reTypes, getUTF8(entryPage)) for (pcid, category) in allTypes: for page in range(1, 100): url = 'http://weixin.sogou.com/pcindex/pc/{}/{}.html'.format(pcid, page) print(url) categoryList = req.get(url) if categoryList.status_code != 200: break
上面代碼通過加載更多頁(yè)面獲取加載列表,進(jìn)而從其中抓取微信公眾號(hào)詳情頁(yè)面:
reProfile = r'<li id[\s\S]*?<a href="([\s\S]*?)" rel="external nofollow" ' allProfiles = re.findall(reOAProfile, getUTF8(categoryList)) for profile in allProfiles: profilePage = req.get(profile) if profilePage.status_code != 200: continue
進(jìn)入詳情頁(yè)面可以獲取公眾號(hào)的 名稱/ID/功能介紹/賬號(hào)主體/頭像/二維碼/最近10篇文章 等信息:
注意事項(xiàng)
1. 驗(yàn)證碼
訪問詳情頁(yè)面時(shí)有可能需要驗(yàn)證碼,自動(dòng)識(shí)別驗(yàn)證碼還是很有難度的,因此要做好爬蟲的偽裝工作。
2. 未保存詳情頁(yè)面鏈接
詳情頁(yè)面的鏈接中有兩個(gè)重要參數(shù): timestamp & signature ,這說明頁(yè)面鏈接是有時(shí)效性的,所以保存下來應(yīng)該也沒用;
3. 二維碼
二維碼圖片鏈接同樣具有時(shí)效性,因此如需要最好將圖片下載下來。
用 Flask 展示結(jié)果
最近 Python 社區(qū)出現(xiàn)了一款異步增強(qiáng)版的 Flask 框架: Sanic ,基于 uvloop 和 httptools ,可以達(dá)到異步、更快的效果,但保持了與 Flask 一致的簡(jiǎn)潔語法。雖然項(xiàng)目剛起步,還有很多基本功能為實(shí)現(xiàn),但已經(jīng)獲得了很多關(guān)注( 2,222 Star )。這次本打算用抓取的微信公眾號(hào)信息基于 Sanic 做一個(gè)簡(jiǎn)單的交互應(yīng)用,但無奈目前還沒有加入模板功能,異步的 redis 驅(qū)動(dòng)也還有 BUG 沒解決,所以簡(jiǎn)單嘗試了一下之后還是切換回 Flask + SQLite,先把抓取結(jié)果呈現(xiàn)出來,后續(xù)有機(jī)會(huì)再做更新。
安裝 Sanic
Debug Sanic
Flask + SQLite App
from flask import g, Flask, render_template import sqlite3 app = Flask(__name__) DATABASE = "./db/wx.db" def get_db(): db = getattr(g, '_database', None) if db is None: db = g._database = sqlite3.connect(DATABASE) return db @app.teardown_appcontext def close_connection(exception): db = getattr(g, '_database', None) if db is not None: db.close() @app.route("/<int:page>") @app.route("/") def hello(page=0): cur = get_db().cursor() cur.execute("SELECT * FROM wxoa LIMIT 30 OFFSET ?", (page*30, )) rows = [] for row in cur.fetchall(): rows.append(row) return render_template("app.html", wx=rows, cp=page) if __name__ == "__main__": app.run(debug=True, port=8000)
總結(jié)
以上所述是小編給大家介紹的Python 抓取微信公眾號(hào)賬號(hào)信息,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Python使用pandas將表格數(shù)據(jù)進(jìn)行處理
這篇文章主要介紹了Python使用pandas將表格數(shù)據(jù)進(jìn)行處理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-08-08pycharm 在debug循環(huán)時(shí)快速debug到指定循環(huán)次數(shù)的操作方法
在 PyCharm 中,可以使用條件斷點(diǎn)來實(shí)現(xiàn)在特定循環(huán)次數(shù)后停止調(diào)試,本文重點(diǎn)介紹pycharm 在debug循環(huán)時(shí)快速debug到指定循環(huán)次數(shù)的操作方法,需要的朋友可以參考下2024-04-04Pandas進(jìn)行數(shù)據(jù)編碼的十種方式總結(jié)
在機(jī)器學(xué)習(xí)中,很多算法都需要我們對(duì)分類特征進(jìn)行轉(zhuǎn)換(編碼),即根據(jù)某一列的值,新增(修改)一列。本文為大家總結(jié)了Pandas中十種數(shù)據(jù)編碼的方式,需要的可以參考一下2022-04-04python3.9安裝RobotFramework的簡(jiǎn)單教程
python3.9安裝RobotFramework,不同于python2.7和python3.6,使用這兩個(gè)版本安裝會(huì)出現(xiàn)問題,因?yàn)槲野惭b遇到問題發(fā)現(xiàn)沒有最新的教程,所以打算自己寫一個(gè),同時(shí)下面會(huì)記錄安裝步驟及使用的方法會(huì)出現(xiàn)的一些問題,對(duì)python3.9安裝RobotFramework感興趣的朋友一起看看吧2023-01-01flask操作數(shù)據(jù)庫(kù)相關(guān)配置及實(shí)現(xiàn)示例步驟全解
這篇文章主要介紹了flask操作數(shù)據(jù)庫(kù)相關(guān)配置及實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01flask?route對(duì)協(xié)議作用及設(shè)計(jì)思路
這篇文章主要為大家介紹了flask?route對(duì)協(xié)議作用及設(shè)計(jì)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Python3.5基礎(chǔ)之函數(shù)的定義與使用實(shí)例詳解【參數(shù)、作用域、遞歸、重載等】
這篇文章主要介紹了Python3.5基礎(chǔ)之函數(shù)的定義與使用,結(jié)合實(shí)例形式詳細(xì)分析了Python3.5函數(shù)的定義、參數(shù)、作用域、遞歸、重載、內(nèi)置函數(shù)等基本概念與相關(guān)使用技巧,需要的朋友可以參考下2019-04-04Python-OpenCV實(shí)現(xiàn)圖像缺陷檢測(cè)的實(shí)例
本文將結(jié)合實(shí)例代碼,在Jupyter Notebook上使用Python+opencv實(shí)現(xiàn)如下圖像缺陷檢測(cè)。需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06