影刀RPA实操指南:微信公众号文章批量采集从搜狗微信到内容归档的完整链路
你想研究竞品的公众号内容策略。
或者你想批量采集某个行业的公众号文章做分析。
或者你的老板让你把公司公众号的所有历史文章导出备份。
这些需求的共同点是:微信公众号的内容不是传统网页,需要特殊的方法来采集。
这篇文章给你一套完整的微信公众号文章采集方案。
微信公众号内容的特殊性
和淘宝、京东这些"标准网页"不同,微信公众号有以下特点:
- 内容不在微信客户端外直接可见。你没法像打开淘宝商品页那样直接访问
- 文章列表通过API加载,不是标准的HTML翻页
- 反爬严格,频率太高容易被封
- 文章URL有时效性,过期的临时链接打不开
采集方案需要针对这些特点设计。
方案一:搜狗微信搜索(最推荐新手)
搜狗是微信官方授权的搜索引擎,可以搜索微信公众号文章。
获取文章列表
这是一个纯网页操作,影刀可以搞定:
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/xxxxxs/后面是一串随机字符,每篇文章都不一样。
批量采集
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格式:
defsave_as_markdown(title,author,pub_date,content,output_dir):"""将公众号文章保存为Markdown文件"""importrefromdatetimeimportdatetime# 清理文件名中的非法字符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}"""withopen(filepath,'w',encoding='utf-8')asf:f.write(md_content)returnfilepath图片的处理:微信公众号文章的图片URL有时效性(可能过几天就失效了)。
如果需要长期保存,把图片下载到本地:
importrequestsimportredefdownload_images_from_html(html,output_dir):"""下载HTML中的所有图片到本地"""img_urls=re.findall(r'data-src="(https?://[^"]+)"',html)downloaded=[]fori,urlinenumerate(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)withopen(filepath,'wb')asf:f.write(resp.content)downloaded.append(filepath)except:passreturndownloaded反爬策略汇总
| 风险 | 应对 |
|---|---|
| IP被封 | 减小频率、使用代理 |
| 搜狗验证码 | 人工介入(频率太高触发) |
| 文章临时链接过期 | 采集后立即归档 |
| 微信客户端弹窗 | 机器人检测弹窗 → 停止操作 |
| 图片防盗链 | 下载图片时带Referer |
最重要的原则:控制频率。每篇文章之间至少间隔3-5秒,每次采集总量控制在200篇以内。
文章分析:采集之后做什么
采集只是第一步,分析才是目的。
基础指标提取
temu店群自动化报活动案例
# 从文章正文提取词频importjiebafromcollectionsimportCounterdefanalyze_articles(articles):words=[]forarticleinarticles:seg=jieba.cut(article['content'])words.extend([wforwinsegiflen(w)>=2])counter=Counter(words)returncounter.most_common(100)# Top 100高频词时间分布分析
importpandasaspd 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实操指南系列——探索非标准平台的数据采集方案