一、爬取目标
本方案旨在实现批量下载公众号文章,并获取完整正文内容。目前提供源码形式,支持配置多个公众号进行批量爬取。
二、展示爬取结果
爬取结果包含以下字段:

- 文章标题
- 文章链接(永久链接)
- 发布时间
- 公众号名称
- 文章正文
所有数据自动保存为 Excel 文件,方便后续分析。
三、原理讲解
- 登录公众平台
- 在首页下新的创作选择文章,点进去之后在正文添加超链接,然后账号那一行选择要爬取的公众号,接着就会出现公众号发布过的文章。
- 按 F12 查看数据来源,点击网络,刷新之后可以看到文章数据来源的数据包,接下来对 url 发送请求,取我们想要的值即可。token 和 cookie 也从这里边找。

四、爬虫代码讲解
导入库:
import requests
import pandas as pd
import json
import time
import random
from lxml import etree
4.1 核心思路与配置
运行需要两个关键参数:token 和 cookie。这需要你登录公众平台后台,在开发者工具里抓取。
为了方便使用,把这些配置都写进了 wechat_config_new.json 文件里:
{
"token": "你的 token",
"cookie": "你的 cookie",
"account_name": ["目标公众号 1", "目标公众号 2"],
"start_date": "2024-01-01",
"end_date": "2024-03-20"
}
account_name 支持列表,可以一次配置多个公众号,实现批量爬取。
4.2 关键步骤:获取文章列表,并翻页
这里涉及到分页逻辑:
def get_articles(config, account_name, fakeid):
page = 0
all_articles = []
while True:
begin = page * 5 # 微信接口每页固定 5 条
url = "https://mp.weixin.qq.com/cgi-bin/appmsgpublish"
params = {
"sub": "list",
"begin": str(begin),
"count": "5",
"fakeid": fakeid, # 核心参数
"token": config['token'],
}
# 发送请求,解析 JSON ...
# 如果返回的数据为空,说明没有更多了,跳出循环
if not publish_list:
break
page += 1
time.sleep(random.randint(2, 5)) # 礼貌性等待,防止被封
获取正文:
def get_article_content(link):
detail_response = requests.get(url=link, headers=header, timeout=15)
detail_xp = etree.HTML(detail_response.text)
# 核心 XPath,定位到正文区域
content_element = detail_xp.xpath("//*[@id='js_content']//text()")
# 清洗、拼接文本
content_clean = [text.strip() for text in content_element if text.strip()]
return '\n'.join(content_clean)
五、如何运行?
- 按上面说的,配置好
wechat_config_new.json文件。需要更新 cookie 和 token。 - 安装依赖:
pip install requests pandas lxml openpyxl - 运行主函数
main(),坐等 Excel 文件生成即可。 程序会自动帮你:搜索公众号 -> 遍历所有分页 -> 逐篇下载正文 -> 保存到表格。


