微信公眾號怎么采集文章?
微信公眾號是一種非常受歡迎的社交媒體應用程序,它可以讓用戶發布、閱讀和分享各種內容。對于內容創作者來說,發布原創文章可以幫助他們建立粉絲群體并提高個人品牌認知度。但是,有時候你可能需要從其他公眾號中采集一些文章,以便進行分析或重編輯。在本文中,我們將向您介紹如何使用Python語言自動化采集微信公眾號中的文章,并提取需要的字段。
1. 獲取公眾號的歷史文章列表
要采集文章,首先需要獲取公眾號的歷史文章列表,也就是該公眾號所有發布的文章。可以通過向微信公眾平臺發送HTTP請求來獲取。具體步驟如下:
a. 打開Chrome瀏覽器,登錄微信公眾平臺,選擇需要采集文章的公眾號。
b. 進入該公眾號的文章列表頁面,右鍵點擊頁面空白處,選擇“檢查”(或按鍵盤上的F12鍵)打開開發者工具。在新打開的窗口中選擇“Network”(網絡)選項卡。
c. 在這個工具中會看到瀏覽器與服務器之間所有的HTTP請求和響應信息。現在需要刷新文章列表頁面,找到一個特定的請求鏈接。該鏈接以“https://mp.weixin.qq.com/mp/profile_ext”為開頭,含有以下幾個查詢參數:action、begin、count、f、__biz、uin、key、pass_ticket、wxtoken、appmsg_token、x5為11個參數。其中,參數含義如下所示:
參數 描述
action 固定為getmsg
begin 從第幾篇文章開始獲取
count 獲取多少篇文章
f 最新的一篇文章發布時間
__biz 公眾號的唯一ID(可以在公眾號鏈接中獲取)
uin 從cookie中獲取
key 加密參數
pass_ticket 加密參數
wxtoken 加密參數
appmsg_token 加密參數
x5 固定值1
d. 將該請求鏈接復制粘貼到Python的requests庫中,向該鏈接發送請求,即可獲取公眾號的歷史文章列表。
2. 解析文章列表頁面
從請求結果中可以看到,返回的是一段JSON格式的數據。但是該數據仍然需要進行解析,以提取所需的文章信息。可以使用Python中的BeautifulSoup庫和json庫來進行解析,代碼如下:
import requests from bs4 import BeautifulSoup import json
url = 'https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MjM5MDAxNzE2Mg==&f=json&offset=10&count=10&is_ok=1&scene=124&uin=MTQ3MDE1NTM1Nw%3D%3D&key=415030cfb9745a34b395ab8baa2c2c29f7e9c919b8d66048e3615457e2c1703b7d486f7f9ab61b820e6832d5055685399a159dc0d75986af65070e462222efe440e34d9d44f7b2349e399cbafbd346d1&pass_ticket=myaDDI2dBTg9NXwrUjygOS2onfeGqUP1bfFfjp4LbIRz5%2FeAE3wZwV6CCOs5IovK&wxtoken=777&appmsg_token=1022_VSjXi4XYNG5%252FX%252BLmNTt3lKufU9t2TrwiVhXrug~~&x5=0&f=json'
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Cookie':'此處填寫自己的cookie信息' }
resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.text, 'html.parser') result = json.loads(soup.find('body').text) articles = result.get('general_msg_list').get('list')
for article in articles: title = article.get('app_msg_ext_info').get('title') description = article.get('app_msg_ext_info').get('digest') keywords = article.get('app_msg_ext_info').get('keywords') content_url = article.get('app_msg_ext_info').get('content_url') #解析單篇文章內容 ... 該代碼將返回每篇文章的標題、描述、關鍵詞和內容URL。接下來需要解析每篇文章的具體內容。
3. 解析單篇文章內容
要解析每篇文章的具體內容,需要使用第二步獲取到的文章內容URL。首先需要將該URL中的amp;替換成&,因為經常會出現這種情況,然后從文章URL的HTML頁面中獲取文章正文所在的標簽(通常是<.rich_media_content>標簽)的內容。然后使用正則表達式或BeautifulSoup庫對文章內容進行解析,這將幫助您提取所需的字段。代碼如下:
import re from bs4 import BeautifulSoup
url = '此處填寫單篇文章的URL信息,并將其中的“amp;”替換成“&”' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Cookie':'此處填寫自己的cookie信息' }
resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.text, 'html.parser') content = soup.find('div', {'class':'rich_media_content'}).text
p1 = re.compile(r'thisIsTheTitle = "(.*)"') title = p1.findall(resp.text)[0] p2 = re.compile(r'description : "(.*)"') description = p2.findall(resp.text)[0] p3 = re.compile(r'content_url = "(.*)"') content_url = p3.findall(resp.text)[0]
文章正文中可能包含HTML標簽,可以使用BeatifulSoup庫將HTML網頁文檔解析成樹形結構,并根據需要選擇特定內容,如提取圖片、鏈接等。這樣,就可以快速、可靠地采集微信公眾號文章,并提取所需的字段。