querylist采集微信公眾號文章(如何獲取微信公眾號所有文章?ID與開(kāi)發(fā)者密碼)
優(yōu)采云 發(fā)布時(shí)間: 2022-03-24 00:24querylist采集微信公眾號文章(如何獲取微信公眾號所有文章?ID與開(kāi)發(fā)者密碼)
導出所有公眾號文章
隨著(zhù)互聯(lián)網(wǎng)的不斷發(fā)展,互聯(lián)網(wǎng)上出現了許多自媒體平臺。不用說(shuō),相信大家都知道現在哪些平臺很火。
可以說(shuō),所有知名的自媒體都有自己的公眾號。然而,平臺的創(chuàng )新和涌現可謂是層出不窮。如果需要在平臺上直播,則必須獲取原平臺的歷史資源。
例如,對于微信公眾號,我們需要獲取微信公眾號的文章。導出后,我們可以在其他平臺上查看。那么如何獲取我們公眾號下的所有文章呢?
開(kāi)發(fā)者 ID 和開(kāi)發(fā)者密碼
其實(shí)公眾號為我們的開(kāi)發(fā)提供了一個(gè)非常友好的界面,我們可以得到文章的所有鏈接,而不需要一一抓取。
如上圖,我們需要進(jìn)入公眾號主頁(yè),然后通過(guò)設置與開(kāi)發(fā)-基礎配置找到開(kāi)發(fā)者ID和開(kāi)發(fā)者密碼。
因為微信為我們提供了一個(gè)專(zhuān)門(mén)為我們獲取公眾號文章的接口,具體接口URL如下代碼所示:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
這里的APPID是開(kāi)發(fā)中的ID,APPSECRET是開(kāi)發(fā)者密碼,獲取方式如下圖。
但是,有一個(gè)IP白名需要注意。為了公眾號文章的安全,必須設置IP地址才能獲取。如果后面的代碼不在IP下運行,肯定會(huì )報錯。
如上圖所示,IP白名單就是直接設置你的IP地址。設置完成后點(diǎn)擊修改,彈出二維碼,用微信掃描即可。
https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=
這還不夠,因為URL接口只獲取access_token,也就是訪(fǎng)問(wèn)公眾號的token,獲取公眾號的鏈接文章就是上面那個(gè)。
獲取Json格式的公眾號文章信息
現在我們對原理有了基本的了解,下面我們通過(guò)實(shí)戰來(lái)獲取文章的所有公眾號標題、鏈接、描述、展示圖片。一個(gè)例子如下:
import requests
import json
import csv
def getGZHJson(appid, secret):
path = " https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"
url = path + "&appid=" + appid + "&secret=" + secret
result = requests.get(url)
token = json.loads(result.text)
access_token = token["access_token"]
data = {
"type": "news",
"offset": 0,
"count": 1,
}
headers = {
"content-type": "application/json",
"Accept-Language": "zh-CN,zh;q=0.9"
}
url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" + access_token
result = requests.post(url=url, data=json.dumps(data), headers=headers)
result.encoding = result.apparent_encoding
result = json.loads(result.text)
count = int(result["total_count"])
gzh_dict = {"news_item": []}
for i in range(0, count):
data["offset"] = i
result = requests.post(url=url, data=json.dumps(data), headers=headers)
result.encoding = result.apparent_encoding
result = json.loads(result.text)
for item in result["item"][0]["content"]["news_item"]:
temp_dict = {}
temp_dict["title"] = item["title"]
temp_dict["digest"] = item["digest"]
temp_dict["url"] = item["url"]
temp_dict["thumb_url"] = item["thumb_url"]
print(temp_dict)
gzh_dict["news_item"].append(temp_dict)
return json.dumps(gzh_dict)
getGZHJson("開(kāi)發(fā)者ID", "開(kāi)發(fā)者密碼")
這里,我們看一下結果的原創(chuàng )文本數據,如下:
在原創(chuàng )的JSON數據中,有一個(gè)非常重要的數據就是total_count,它是公眾號成立以來(lái)的推送次數。
不過(guò)需要注意的是,公眾號可以一次推送一篇文章,也可以一次推送2、3、4篇文章,并不總是一樣的。
至于獲取哪些推送數據,可以通過(guò)offset追溯到源頭。至于每次有多少篇文章,需要確定返回多少Json數據news_item。如下所示:
因此,我們還為其添加了遍歷。第一層遍歷是微信公眾號推送當天的數據,第二層遍歷是當天發(fā)送的文章數。運行后效果如下:
參數含義
標題
文章標題
消化
文章說(shuō)明
網(wǎng)址
文章鏈接
拇指網(wǎng)址
文章顯示地圖
將數據保存到 CSV 文件
當然,我們獲取的數據并不是在控制臺上打印出來(lái),而是導出數據。因此,我們將上述數據打包成 CSV 文件并保存。
一個(gè)例子如下:
result = requests.post(url=url, data=json.dumps(data), headers=headers)
result.encoding = result.apparent_encoding
print(result.encoding)
result = json.loads(result.text)
count = int(result["total_count"])
#替換下面的代碼
ulist = ["_id", "title", "digest", "url", "thumb_url"]
# 保存數據到csv文件
new_item_csv = "week"
with open("{}.csv".format(new_item_csv), "w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f, dialect="excel")
writer.writerow(ulist)
for i in range(0, count):
data["offset"] = i
result = requests.post(url=url, data=json.dumps(data), headers=headers)
result.encoding = result.apparent_encoding
result = json.loads(result.text)
for item in result["item"][0]["content"]["news_item"]:
writer.writerow([count_id, item["title"], item["digest"], item["url"], item["thumb_url"]])
count_id += 1
這里只需要更改代碼count = int(result['total_count"])下面的所有數據即可。上面的代碼保持不變。
需要注意的是,之所以設置result.encoding = result.apparent_encoding,是因為我們事先并不知道返回數據的編碼。這確保了可以有效地解析任何編碼。
運行后如下圖,公眾號文章的所有基本信息都已獲取。
這是文章關(guān)于使用Python獲取公眾號下所有文章的介紹。更多關(guān)于Python獲取公眾號文章的信息,請搜索上一期服務(wù)器首頁(yè)文章或繼續瀏覽以下相關(guān)文章希望大家多多支持服務(wù)器首頁(yè)未來(lái)!
原文鏈接: