querylist采集微信公众号文章(如何获取微信公众号所有文章?ID与开发者密码)
优采云 发布时间: 2022-03-24 00:24querylist采集微信公众号文章(如何获取微信公众号所有文章?ID与开发者密码)
导出所有公众号文章
随着互联网的不断发展,互联网上出现了许多自媒体平台。不用说,相信大家都知道现在哪些平台很火。
可以说,所有知名的自媒体都有自己的公众号。然而,平台的创新和涌现可谓是层出不穷。如果需要在平台上直播,则必须获取原平台的历史资源。
例如,对于微信公众号,我们需要获取微信公众号的文章。导出后,我们可以在其他平台上查看。那么如何获取我们公众号下的所有文章呢?
开发者 ID 和开发者密码
其实公众号为我们的开发提供了一个非常友好的界面,我们可以得到文章的所有链接,而不需要一一抓取。
如上图,我们需要进入公众号主页,然后通过设置与开发-基础配置找到开发者ID和开发者密码。
因为微信为我们提供了一个专门为我们获取公众号文章的接口,具体接口URL如下代码所示:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
这里的APPID是开发中的ID,APPSECRET是开发者密码,获取方式如下图。
但是,有一个IP白名需要注意。为了公众号文章的安全,必须设置IP地址才能获取。如果后面的代码不在IP下运行,肯定会报错。
如上图所示,IP白名单就是直接设置你的IP地址。设置完成后点击修改,弹出二维码,用微信扫描即可。
https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=
这还不够,因为URL接口只获取access_token,也就是访问公众号的token,获取公众号的链接文章就是上面那个。
获取Json格式的公众号文章信息
现在我们对原理有了基本的了解,下面我们通过实战来获取文章的所有公众号标题、链接、描述、展示图片。一个例子如下:
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("开发者ID", "开发者密码")
这里,我们看一下结果的原创文本数据,如下:
在原创的JSON数据中,有一个非常重要的数据就是total_count,它是公众号成立以来的推送次数。
不过需要注意的是,公众号可以一次推送一篇文章,也可以一次推送2、3、4篇文章,并不总是一样的。
至于获取哪些推送数据,可以通过offset追溯到源头。至于每次有多少篇文章,需要确定返回多少Json数据news_item。如下所示:
因此,我们还为其添加了遍历。第一层遍历是微信公众号推送当天的数据,第二层遍历是当天发送的文章数。运行后效果如下:
参数含义
标题
文章标题
消化
文章说明
网址
文章链接
拇指网址
文章显示地图
将数据保存到 CSV 文件
当然,我们获取的数据并不是在控制台上打印出来,而是导出数据。因此,我们将上述数据打包成 CSV 文件并保存。
一个例子如下:
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,是因为我们事先并不知道返回数据的编码。这确保了可以有效地解析任何编码。
运行后如下图,公众号文章的所有基本信息都已获取。
这是文章关于使用Python获取公众号下所有文章的介绍。更多关于Python获取公众号文章的信息,请搜索上一期服务器首页文章或继续浏览以下相关文章希望大家多多支持服务器首页未来!
原文链接: