WechatSogou 公众号数据采集实战:30 分钟搭建你的公众号情报监控工具

WechatSogou 公众号数据采集实战:30 分钟搭建你的公众号情报监控工具

【免费下载链接】WechatSogou基于搜狗微信搜索的微信公众号爬虫接口项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou

做内容运营、竞品分析或者行业研究的人,大概率经历过这样的崩溃时刻:想统计十来个竞品公众号的推文规律,只能打开手机一个一个翻历史消息,复制标题、记录发布时间,两小时过去,表格才填了四分之一;想追一个行业热点,却不知道哪些公众号在跟进,只能靠刷朋友圈碰运气。

别急,这个痛点有一个现成的解法。WechatSogou是一个基于搜狗微信搜索的 Python 爬虫接口,它把"搜公众号、搜文章、扒历史消息、抓热门内容、做关键词联想"这些能力封装成几十行就能调用的 API,让公众号数据采集从手动体力活变成几行代码的事。这篇文章不打算罗列文档,而是带你从零搭一个真正能用的"公众号情报监控工具",所有功能在动手过程中自然出现——你会看到,原来两小时的活,真的可以压缩到五分钟。

开工前:把环境备好

先装依赖,一条命令搞定:

pip install wechatsogou --upgrade

这个库同时兼容 Python 2.7 和 Python 3.5+,如果你还在维护老项目也不慌。想直接看源码研究的,可以git clone https://gitcode.com/gh_mirrors/we/WechatSogou,源码目录很清爽,核心逻辑都集中在wechatsogou/api.py(对外 API)、wechatsogou/structuring.py(页面解析)、wechatsogou/request.py(请求生成)这几个文件里。

初始化接口也很灵活:

import wechatsogou # 默认直连 ws_api = wechatsogou.WechatSogouAPI() # 配置代理(requests 支持的所有参数这里都能用) ws_api = wechatsogou.WechatSogouAPI(proxies={ "http": "127.0.0.1:8888", "https": "127.0.0.1:8888", }) # 验证码输错后的重试次数,默认 1 次 ws_api = wechatsogou.WechatSogouAPI(captcha_break_time=3)

注意最后一行参数captcha_break_time,它关系到我们后面要重点讲的验证码问题,先记住它,一会儿会用到。

第一步:先弄清"搜什么"——关键词联想

做监控工具,第一步不是搜索,而是决定搜什么。比如你做教育行业,光"高考"这个词就衍生出"高考e通""高考志愿填报咨讯""高考早知道"等一堆真实公众号关键词,靠脑子想不全,但搜狗联想接口可以:

suggestions = ws_api.get_sugg('高考') for i, s in enumerate(suggestions[:5], 1): print(f"{i}. {s}")

这个get_sugg返回的是搜狗微信搜索的真实联想词列表,用来扩展你的监控关键词池再合适不过。把联想词喂给下一步的公众号搜索,就能把目标范围铺得很宽。

第二步:锁定目标——公众号搜索与档案查询

有了关键词池,接下来要把"词"变成"公众号"。

# 搜索公众号,page 控制分页,每页约 10 个结果 for gzh in ws_api.search_gzh('数据分析', page=1): print(gzh['wechat_name'], '|', gzh['wechat_id'], '|', gzh['authentication'])

每个结果都带wechat_namewechat_idauthentication(认证主体)、introduction(简介)、post_perm(近一月群发数)等字段,足够你判断这个号值不值得盯。

如果你的目标很明确,比如公司要求盯住某个特定账号,直接用get_gzh_info拿它的完整档案:

info = ws_api.get_gzh_info('南航青年志愿者') print(info['wechat_name'], info['wechat_id'], info['authentication'])

到这里,你的"监控名单"基本成形了。下一步要解决的是:这些号最近发了什么。

第三步:扒历史消息——每个号的"最近动态"

监控竞品,最关心的就是它最近发了什么。get_gzh_article_by_history一次调用就能返回公众号资料 + 最近 10 条群发文章的完整列表:

history = ws_api.get_gzh_article_by_history('南航青年志愿者') print(history['gzh']['wechat_name'], '最近文章:') for article in history['article']: print('•', article['title'], '| 时间戳:', article['datetime'])

返回的每篇文章都带titleabstractcover(封面)、content_url(正文链接)、copyright_stat(是否原创)等字段。这里有一个必须提前知道的平台限制:搜狗微信搜索只提供最近 10 条群发,拿不到更早的内容。解决办法也很直接——定期跑一遍脚本,把结果存进本地数据库,日积月累就是自己的完整档案。这正是"监控工具"和"手动翻手机"的本质区别:手动只能看到当下,脚本能看到趋势。

第四步:全局搜索——跨公众号找热点文章

盯完指定账号,你可能还想知道整个微信生态里,某个话题正在被哪些号讨论。search_article就是干这个的,它还支持时间范围和内容类型筛选:

from wechatsogou import WechatSogouConst # 默认搜全部时间 results = ws_api.search_article('机器学习') # 进阶:只看最近一周、含视频的文章 results = ws_api.search_article( '人工智能', timesn=WechatSogouConst.search_article_time.week, article_type=WechatSogouConst.search_article_type.video, )

search_article_time提供anytime/day/week/month/year几个档位,search_article_typeall/rich/video/image,组合起来能非常精准地定位内容。搜出来的每条记录同时包含article(文章信息)和gzh(来源公众号)两个字段,做内容聚合或趋势分析时直接就能用。

第五步:看热门——不搜索也知道现在火什么

如果你做的是内容策划,每天最头疼的问题是"今天写什么"。get_gzh_article_by_hot按分类直接给你当天的热门文章,分类常量在WechatSogouConst.hot_index里,覆盖科技、财经、美食、旅游、教育、游戏、萌宠等 20 多个方向:

tech_hot = ws_api.get_gzh_article_by_hot(WechatSogouConst.hot_index.technology) finance_hot = ws_api.get_gzh_article_by_hot(WechatSogouConst.hot_index.finance) for item in tech_hot[:3]: print(item['article']['title'], '|', item['gzh']['wechat_name'])

每天早上跑一遍热门榜,热点选题基本不愁。这一步对"情报监控"来说属于锦上添花,但它成本极低,顺手就能带上。

第六步:把文章内容存下来——别让链接过期坑了你

监控工具做到这里,还差最后一块拼图:微信文章链接是临时链接,会过期。如果你只是把content_url存进数据库,过几天再点就是"链接已过期"。

正确的做法是拿到链接后立刻用get_article_content抓正文,把内容本地化:

content = ws_api.get_article_content(article['content_url']) # content['content_html'] -> 处理后的文章正文 HTML # content['content_img_list'] -> 文章里的图片地址列表

这个方法还帮你处理了正文里的微信元素:del_qqmusicdel_mpvoice参数默认为 True,会自动移除内嵌的 QQ 音乐和语音消息,保证存下来的正文干净可读。如果你想把文章图片托管到自己的 OSS,还可以传hosting_callback回调,库会逐个图片替换成你的托管地址。

第七步:应对验证码——监控工具能不能稳,就看这里

真实跑起来后,你大概率会遇到这个情况:请求发着发着,页面跳到了"请输入验证码"。这不是 bug,而是搜狗对自动化请求的反爬机制。WechatSogou 的处理方式很成熟——把解锁流程留给你掌控

库提供了两个层次的钩子:

  • identify_image_callback:只管"看图识字"。输入验证码图片二进制,输出识别文字。库内置了identify_image_callback_by_hand(弹出图片让你手动输入),你可以换成任意打码平台或 OCR 服务。
  • unlock_callback:接管"出现验证码到解决"的完整流程。库内置了unlock_sogou_callback_exampleunlock_weixin_callback_example两个示例,搜狗和微信两个平台的解锁接口都被封装好了,照着改成自己的逻辑即可。
from wechatsogou.identify_image import identify_image_callback_by_hand # 遇到验证码时弹窗手动输入 results = ws_api.search_gzh('数据分析', identify_image_callback=identify_image_callback_by_hand)

把识别函数换成第三方 OCR 服务,配合captcha_break_time控制重试次数,监控工具就能长期稳定运行。需要提醒的是,搜狗对请求频率有隐形限制,建议在两次请求之间加 3~5 秒随机延迟,既符合规范,也减少触发验证码的概率。

组装:一个 60 行的情报监控脚本

所有零件都齐了,现在把它们组装成完整的工具。这个脚本每天帮你做三件事:扩展关键词、更新目标公众号历史文章、抓取热门榜。

import time import random import json from datetime import datetime from wechatsogou import WechatSogouAPI, WechatSogouConst ws_api = WechatSogouAPI(captcha_break_time=3) def safe_call(func, *args, **kwargs): """带随机延迟的请求包装,降低触发验证码概率""" time.sleep(random.uniform(2, 5)) return func(*args, **kwargs) def daily_report(keywords, hot_categories): report = {'date': datetime.now().strftime('%Y-%m-%d')} # 1. 用联想词扩展关键词池 expanded = set(keywords) for kw in keywords: expanded.update(safe_call(ws_api.get_sugg, kw)) # 2. 跟踪每个目标公众号的最新推文 tracked = [] for kw in expanded: try: gzh = safe_call(ws_api.get_gzh_info, kw) if gzh: history = safe_call(ws_api.get_gzh_article_by_history, gzh['wechat_id']) tracked.append({ 'name': gzh['wechat_name'], 'latest': [a['title'] for a in history['article'][:3]] }) except Exception as e: print(f'[{kw}] 采集失败: {e}') report['tracked'] = tracked # 3. 各分类热门文章标题 hot = {} for cat in hot_categories: items = safe_call(ws_api.get_gzh_article_by_hot, cat) hot[cat] = [i['article']['title'] for i in items[:5]] report['hot'] = hot with open('gzh_daily_report.json', 'w', encoding='utf-8') as f: json.dump(report, f, ensure_ascii=False, indent=2) return report if __name__ == '__main__': daily_report(['高考', '数据分析'], [WechatSogouConst.hot_index.technology, WechatSogouConst.hot_index.finance])

把这个脚本丢进 cron 或 APScheduler 定时执行,每天早上你都会得到一份 JSON 格式的公众号情报日报。相比手动的两小时,整个过程不占用你任何时间。

遇到问题?三个最常见的坑

1. 报错"链接已过期":文章临时链接有时效,拿到content_url后应立即调用get_article_content保存正文,别囤着链接。

2. 历史文章只有 10 篇?这是搜狗微信搜索的平台限制,不是库的问题。定期采集入库是唯一正解。

3. 反复弹验证码?先检查请求频率,把间隔拉大到 3~5 秒;再确认identify_image_callback识别率够不够,输错次数用captcha_break_time控制。识别逻辑写在wechatsogou/identify_image.py里,可以对照着改。

最后说两句

回顾整个流程:关键词联想定方向 → 搜索锁定目标公众号 → 历史消息跟踪动态 → 文章搜索抓全局 → 热门榜找选题 → 正文本地化防过期。WechatSogou 这个库的精髓在于,它把搜狗微信搜索背后繁琐的请求拼接、页面解析、验证码解锁全部封装好了,你只需要关注业务逻辑本身。

工具是好工具,但请记住:爬取公开数据时要遵守平台规则和法律法规,控制采集频率,不把数据用于商业侵权场景。用技术把重复劳动省下来,把时间花在真正有价值的分析上——这才是公众号数据采集的正确打开方式。

【免费下载链接】WechatSogou基于搜狗微信搜索的微信公众号爬虫接口项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考