用 Python 自动抓取公众号文章与账号数据WechatSogou 完整使用手册【免费下载链接】WechatSogou基于搜狗微信搜索的微信公众号爬虫接口项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou先抛一个可能颠覆你认知的事实微信官方从来没有开放过公开的公众号内容检索接口。你在市面上看到的各类公众号数据分析平台数据源头几乎都指向同一条通道——搜狗微信搜索。而 WechatSogou 这个开源项目做的正是把这条通道包装成一组干净的 Python 接口让微信公众号数据采集从手工活变成几行代码的事。为什么这件事值得关注想象一个内容运营的普通早晨为了写竞品分析你挨个打开十几个公众号复制标题、记下发布时间、截图封面再打开搜索页把关键词相关的文章一条条摘录进表格。一上午过去表格没填满眼睛倒是先花了。如果你也经历过这种低效循环这篇微信公众号数据采集实战手册就是为你准备的——我们会从安装开始一步步把它跑起来再落到真实场景里。为什么你总是缺公众号数据做内容的、做运营的、做研究的迟早都会撞上同一堵墙数据拿不到。想监控竞品每天手动翻号、手动记录漏一条就是信息差想建内容聚合站数据源分散在不同公众号采集、清洗、归档全靠人肉想做行业趋势分析需要按关键词、按时间批量拉文章手工完全不可行。更麻烦的是手动采集天然带着三个硬伤格式不统一有的号发图文、有的发纯文字、无法批量处理、更无法定时自动更新。手动复制粘贴这条路本质上是拿时间换数据永远填不满需求。WechatSogou 解决的正是这套流程把搜索、筛选、提取、落地全部自动化你要做的只剩调用和存储。WechatSogou 是什么一条通往搜狗微信搜索的管道简单说WechatSogou 是一个基于搜狗微信搜索的微信公众号爬虫接口它替你处理了请求构造、页面解析、验证码拦截、链接还原这些脏活累活对外只暴露几个语义清晰的方法。项目同时兼容 Python 2.7 与 Python 3.5安装即用没有复杂的依赖。它的源码组织也很有章法改起来不费力api.py所有对外接口采集入口都在这里request.py负责生成搜狗搜索的请求 URLstructuring.py把返回的 HTML 解析成结构化字典const.py定义搜索类型、时间范围、热点分类等常量identify_image.py验证码识别与解锁逻辑exceptions.py、filecache.py、tools.py异常定义、Cookie 缓存与工具函数。整体思路是请求—解析—结构化三段式哪怕你没打算改代码读一遍模块划分也能大致理解数据是怎么流进来的。环境准备安装、初始化与第一个请求安装只需一条命令建议顺手加上升级参数pip install wechatsogou --upgrade接着初始化 API。除了默认直连你还可以按需传入代理、超时时间和验证码重试次数所有requests库支持的参数都能透传import wechatsogou # 最简用法直连 client wechatsogou.WechatSogouAPI() # 进阶配置代理 超时 验证码输错重试上限 client wechatsogou.WechatSogouAPI( captcha_break_time3, # 验证码识别错误允许重试 3 次 timeout5, # 单次请求超时 5 秒 proxies{ http: http://127.0.0.1:8888, https: http://127.0.0.1:8888, }, )跑通第一个请求试试水。下面这段代码搜索餐饮加盟相关的公众号并打印名称与微信号account_list client.search_gzh(餐饮加盟) for acc in account_list: print(acc[wechat_name], |, acc[wechat_id])到这里管道已经通了。接下来我们把核心接口按采集任务链路串一遍——从选词、锁号、查档案到批量拿文章、追热点。锁定目标从关键词联想到公众号档案采集的第一步不是抓数据而是定目标你究竟要盯哪些号、搜什么词用关键词联想扩充选题。不确定关键词怎么定get_sugg直接返回搜狗联想出的相关词做内容选题和 SEO 扩展特别好用hints client.get_sugg(基金) for idx, word in enumerate(hints[:5], 1): print(f{idx}. {word})按关键词批量锁定公众号。search_gzh支持分页每页返回一批公众号正好用来把某个领域一网打尽for page in range(1, 4): for acc in client.search_gzh(美食探店, pagepage): print(f{acc[wechat_name]} 认证:{acc.get(authentication)})深挖单个公众号的完整档案。当我们确定了重点关注对象用get_gzh_info拿到它的头像、二维码、认证信息、简介、最近一月群发数与阅读量这些字段足够支撑起一个公众号数据库info client.get_gzh_info(运营研究社) print(名称:, info[wechat_name]) print(微信号:, info[wechat_id]) print(认证:, info.get(authentication, 未认证)) print(简介:, info[introduction]) print(近一月群发:, info.get(post_perm), 阅读量:, info.get(view_perm))拿文章跨号检索与历史追更目标定了接下来就是文章层面。这一层有两个接口覆盖按主题搜和按账号追两种场景。跨公众号检索文章支持时间与类型过滤。search_article除了基础的关键词搜索还能组合时间范围与内容类型有图、有视频、图文混合等精准定位目标内容from wechatsogou import WechatSogouConst # 最近一周内、带图的人工智能相关文章 articles client.search_article( 人工智能, timesnWechatSogouConst.search_article_time.week, article_typeWechatSogouConst.search_article_type.image, ) for hit in articles: print(hit[article][title], ——, hit[gzh][wechat_name])如果timesn设为specific还可以配合ft、et两个日期参数指定任意起止区间做时间窗口内的内容研究非常顺手。追踪单个公众号的历史推送。get_gzh_article_by_history接受公众号名称或微信号返回账号基本资料和最近 10 条群发文章的明细包括标题、摘要、发布时间、封面图、作者、是否原创等record client.get_gzh_article_by_history(刘润) print(账号:, record[gzh][wechat_name]) print(文章数:, len(record[article])) for post in record[article][:3]: print(标题:, post[title], | 时间:, post[datetime])追热点按分类抓取热门榜单如果你想做热点追踪或内容聚合get_gzh_article_by_hot按分类返回搜狗首页的热门文章。分类常量覆盖科技、财经、美食、旅行、教育、体育、游戏、萌宠等二十多个方向挑你关心的频道即可from wechatsogou import WechatSogouConst tech_hot client.get_gzh_article_by_hot(WechatSogouConst.hot_index.technology) finance_hot client.get_gzh_article_by_hot(WechatSogouConst.hot_index.finance) for item in tech_hot[:5]: print(item[article][title], |, item[gzh][wechat_name])每个结果都带文章标题、摘要、封面图与推送时间戳直接就能喂给下游做聚合展示或热度统计。三个可直接上手的实战脚本光会调用接口还不够我们把前面学的串成三个能直接跑的场景脚本。场景一竞品动态日报。每天抓取竞品公众号的最新推送生成一份 Markdown 日报def build_daily_report(client, accounts, outputdaily.md): lines [# 竞品动态日报, ] for name in accounts: try: payload client.get_gzh_article_by_history(name) latest payload[article][0] lines.append(f- **{name}**{latest[title]}{latest[datetime]}) except Exception as err: lines.append(f- **{name}**抓取失败原因 {err}) with open(output, w, encodingutf-8) as f: f.write(\n.join(lines))场景二分类热点聚合。把多个热门分类的文章收集起来按分类归档成字典方便接入聚合平台def collect_hot_by_category(client, categories, top_n5): result {} for cat in categories: picked [] for item in client.get_gzh_article_by_hot(cat)[:top_n]: picked.append({ title: item[article][title], summary: item[article][abstract][:80], source: item[gzh][wechat_name], }) result[cat] picked return result场景三关键词发布趋势分析。统计不同关键词下文章发布时间的分布观察话题热度曲线from collections import Counter from datetime import datetime def analyze_publish_trend(client, keywords): trend {} for word in keywords: date_counter Counter() for hit in client.search_article(word): stamp hit[article][time] day datetime.fromtimestamp(stamp).strftime(%Y-%m-%d) date_counter[day] 1 trend[word] dict(date_counter) return trend工程化加固限速、重试与缓存采集脚本跑起来不难难的是让它长期稳定地跑。搜狗对请求频率有限制IP 一旦被盯上等待你的就是验证码和封禁。三个手段必不可少。随机限速模拟人工节奏。每次请求前随机睡上几秒比固定间隔更不容易触发风控import random import time def throttled_call(client, method, *args, **kwargs): time.sleep(random.uniform(2, 5)) return getattr(client, method)(*args, **kwargs)失败重试对抗网络抖动。用一个小函数包裹采集动作失败就等一会儿再来def with_retry(fn, tries3, pause3): for attempt in range(tries): try: return fn() except Exception: if attempt tries - 1: raise time.sleep(pause)本地缓存避免重复请求。对频繁查询的关键词结果做文件缓存命中就走本地既省时间又降低请求压力。缓存键用参数组合生成TTL 过期后自动失效实现很轻量逻辑完全可以自己写。另外搜狗返回的文章链接是临时链接会过期。遇到这种情况用get_article_content及时把正文和图片列表落盘必要时还能传入hosting_callback把图片托管到对象存储防止内容失效。避坑指南五个高频问题一次说清把新手最常踩的坑集中讲透能帮你省下大量排查时间。1. 为什么只能抓到最近 10 篇文章这是微信平台的硬限制搜狗只暴露最近 10 条群发。想要更全的历史只能定期采集、持久化到自己的数据库里慢慢累积。2. 文章链接为什么突然打不开微信临时链接有有效期。正确做法是抓到即处理用get_article_content把正文保存下来而不是把 URL 存起来以后再用。3. 遇到验证码怎么办项目内置了验证码处理机制默认会调用人工识别回调identify_image_callback_by_hand你也可以接入第三方 OCR 服务。captcha_break_time参数控制识别错误的容忍次数。4. 到底支持哪个 Python 版本Python 2.7 和 Python 3.5 都支持如果在新版本上遇到异常直接到项目提 issue 即可。5. 请求频率有没有限制有。建议每次请求间隔 35 秒别用并发轰炸这是保护自己 IP 的基本修养。结尾给第一个脚本加上定时任务工具的价值在于持续运行。现在你已经有了环境、接口、实战脚本和避坑清单最后一步是把脚本挂到定时任务上——无论是操作系统的 cron还是 Python 里的调度库让日报每天自动生成、热点自动归档从此告别每天早上打开几十个公众号手动抄数据的日子。动手吧安装wechatsogou把你最关心的三五个公众号写进脚本跑出第一份自动化日报。数据采集这件事从今天起不再是体力活。【免费下载链接】WechatSogou基于搜狗微信搜索的微信公众号爬虫接口项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设
高端定制
企业官网