影刀RPA实操指南:微信公众号文章批量采集从搜狗微信到内容归档的完整链路
你想研究竞品的公众号内容策略。
或者你想批量采集某个行业的公众号文章做分析。
或者你的老板让你把公司公众号的所有历史文章导出备份。
这些需求的共同点是:微信公众号的内容不是传统网页,需要特殊的方法来采集。
这篇文章给你一套完整的微信公众号文章采集方案。

微信公众号内容的特殊性
和淘宝、京东这些"标准网页"不同,微信公众号有以下特点:
采集方案需要针对这些特点设计。
方案一:搜狗微信搜索(最推荐新手)
搜狗是微信官方授权的搜索引擎,可以搜索微信公众号文章。
获取文章列表

这是一个纯网页操作,影刀可以搞定:
1. 打开URL:https://weixin.sogou.com/
2. 点击"微信"标签
3. 输入搜索关键词 → 搜索
4. 获取文章列表:
XPath: //ul[@class='news-list']/li
循环:
– 标题:.//h3/a/text()
– 摘要:.//p[@class='txt-info']/text()
– 来源公众号:.//a[@class='account']/text()
– 发布时间:.//span[@class='s2']/text()
– 文章链接:.//h3/a/@href
5. 翻页 → 重复步骤4
处理反爬
搜狗有频率限制。建议:
- 翻页间隔至少3秒
- 每5页换一个User-Agent
- 一天内同一关键词不要超过50页
店群矩阵自动化突破运营极限!
打开文章详情
搜狗返回的文章链接不是直接的公众号文章URL,而是一个跳转链接。

点进去后才是真正的文章页面。影刀操作:
6. 循环文章链接:
6.1 打开新标签页(链接URL)
6.2 等待页面加载(判断文章标题元素出现)
6.3 提取文章内容:
– 标题://h2[@id='activity-name']
– 发布时间://em[@id='post-date']
– 公众号名称://a[@id='js_name']
– 正文://div[@id='js_content']
6.4 保存到本地
6.5 关闭标签页
注意:每篇打开间隔至少5秒,搜狗对短时间内打开大量文章详情也很敏感。
方案二:公众号主页采集(需微信客户端)
如果你需要采集特定公众号的所有历史文章,可以通过PC版微信客户端操作。
步骤
1. 影刀打开PC微信
2. 搜索目标公众号
3. 进入公众号聊天窗口
4. 点击公众号头像 → 进入公众号主页
5. 点击"查看全部消息"
6. 滚动加载文章列表(无限滚动)
7. 
8. 逐条提取文章标题和链接
9. 点击文章链接 → 提取正文
10. 循环
这个方案依赖PC微信客户端,只能在工作时间窗口内操作,而且微信版本更新可能影响影刀的元素定位。
更稳定的做法
用模拟操作打开公众号主页的"历史消息"页面,通过鼠标滚轮加载更多文章。
指令:鼠标滚轮
目标:文章列表区域
滚动次数:每次滚动到底部 → 等3秒加载
循环直到:出现"没有更多了"或滚动次数超过预期
方案三:公众号文章链接采集(需要已有链接)
如果你已经有一个公众号的文章URL列表(比如从其他渠道获取),直接循环采集即可。
文章URL的特征
微信公众号文章URL长这样:

https://mp.weixin.qq.com/s/xxxxx
s/ 后面是一串随机字符,每篇文章都不一样。
批量采集
1. 准备文章URL列表(Excel/CSV/文本文件)
2. 循环URL列表:
2.1 打开URL
2.2 等待文章加载
2.3 提取:标题/发布时间/作者/正文/阅读数(如果有)
2.4 保存到本地/Markdown/数据库
2.5 随机等待3-8秒
2.6 关闭标签页
3. 汇总所有文章索引
数据存储:Markdown格式保存
公众号文章里面有很多格式(加粗、图片、引用),纯文本保存会丢失这些信息。
建议存为Markdown格式:

def save_as_markdown(title, author, pub_date, content, output_dir):
"""将公众号文章保存为Markdown文件"""
import re
from datetime import datetime
# 清理文件名中的非法字符
safe_title = re.sub(r'[\\\\/:*?"<>|]', '_', title)
filename = f"{pub_date}_{safe_title[:50]}.md"
filepath = os.path.join(output_dir, filename)
md_content = f"""—
title: {title}
author: {author}
date: {pub_date}
source: 微信公众号
—
# {title}
> 作者:{author} | 发布时间:{pub_date}
{content}
"""
with open(filepath, 'w', encoding='utf-8') as f:
f.write(md_content)
return filepath
图片的处理:微信公众号文章的图片URL有时效性(可能过几天就失效了)。
如果需要长期保存,把图片下载到本地:
import requests
import re
def download_images_from_html(html, output_dir):
"""下载HTML中的所有图片到本地"""
img_urls = re.findall(r'data-src="(https?://[^"]+)"', html)
downloaded = []
for i, url in enumerate(img_urls):
try:
resp = requests.get(url, timeout=10)
ext = url.split('.')[–1].split('?')[0] or 'jpg'
filename = f"img_{i+1:03d}.{ext}"
filepath = os.path.join(output_dir, filename)
with open(filepath, 'wb') as f:
f.write(resp.content)
downloaded.append(filepath)
except:
pass
return downloaded
反爬策略汇总
| IP被封 | 减小频率、使用代理 |
| 搜狗验证码 | 人工介入(频率太高触发) |
| 文章临时链接过期 | 采集后立即归档 |
| 微信客户端弹窗 | 机器人检测弹窗 → 停止操作 |
| 图片防盗链 | 下载图片时带Referer |
最重要的原则:控制频率。每篇文章之间至少间隔3-5秒,每次采集总量控制在200篇以内。

文章分析:采集之后做什么
采集只是第一步,分析才是目的。
基础指标提取
temu店群自动化报活动案例
# 从文章正文提取词频
import jieba
from collections import Counter
def analyze_articles(articles):
words = []
for article in articles:
seg = jieba.cut(article['content'])
words.extend([w for w in seg if len(w) >= 2])
counter = Counter(words)
return counter.most_common(100) # Top 100高频词
时间分布分析
import pandas as pd
df = pd.DataFrame(articles)
df['pub_date'] = pd.to_datetime(df['pub_date'])
df['weekday'] = df['pub_date'].dt.weekday
df['hour'] = df['pub_date'].dt.hour

# 分析发文时间分布
publish_pattern = df.groupby('weekday').size()
print(publish_pattern)
避坑清单
坑1:搜狗文章链接打不开
搜狗返回的链接是 https://weixin.sogou.com/link?url=… 这种跳转链接,需要先让浏览器跳转一次才能到真正的文章页。
影刀直接打开链接,浏览器会自动完成跳转,不用额外处理。
坑2:文章正文被折叠
有些长文章微信会自动折叠,需要点击"阅读全文"才能展开。
如果 元素存在(//a[contains(text(),'阅读全文')]):
点击元素(//a[contains(text(),'阅读全文')])
等待1秒
坑3:阅读数获取

文章详情页的阅读数是通过JS动态加载的,不一定能直接获取。
实测://span[@id='readNum'] 有时候有值,有时候没有。不稳定就不要强求。
总结
微信公众号文章采集的三个方案:搜狗搜索(最通用)、微信客户端操作(适合特定公众号)、已有链接批量采集(最稳定)。
核心原则:控制频率、及时归档、做好反爬应对。
采集后的文章建议存为Markdown格式,保留格式信息;图片下载到本地避免链接过期。
微信公众号的内容采集比电商网站复杂不少,但掌握了套路之后就是体力活了。

内容标签:#影刀RPA #微信公众号 #内容采集 #搜狗 #数据分析 作者:林焱 系列:影刀RPA实操指南系列——探索非标准平台的数据采集方案





