ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

30行Python搞定微信公众号数据采集,WechatSogou实战全流程

30行Python搞定微信公众号数据采集,WechatSogou实战全流程 30行Python搞定微信公众号数据采集WechatSogou实战全流程【免费下载链接】WechatSogou基于搜狗微信搜索的微信公众号爬虫接口项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou如果你的日常工作里有一项是盯公众号那你大概率体会过这种崩溃打开浏览器、翻历史消息、复制标题、粘贴到表格、再复制链接……一天三次雷打不动。好消息是这活儿可以交给代码。WechatSogou 是一个基于搜狗微信搜索的微信公众号爬虫接口装进 Python 环境就能用公众号信息、历史文章、关键词搜索、热门榜单全都能拿数据采集从此变成一条 30 行的流水线。这篇文章带你从零把它跑起来并顺手搭出一个竞品日报小系统。先讲个真事每天三小时的手工活儿我有个做内容运营的朋友阿哲他的任务之一是盯住 5 个竞品公众号谁发了新文章、主题是什么、阅读热度如何每天上午十点前交一份简报。听起来不难他每天要手动打开 5 个历史消息页把标题、摘要、链接一条条复制进 Excel高峰期要花掉两三个小时。后来他在某个项目仓库里翻到了 WechatSogou。核心实现就集中在wechatsogou/api.py一个类、几个方法覆盖了搜狗微信搜索的绝大多数场景。他花了一个下午重写了自己的人工流程从那以后每天早上到工位先看一眼脚本生成的日报三小时手工活缩成了一行python gzh_daily.py。下面我们就复刻阿哲的完整路径从最小示例开始一步步把采集任务跑通、加固、落地。5分钟拿到第一份数据先跑通最小示例任何库上手的第一原则都是别管文档先让它跑起来。WechatSogou 的安装就是一条命令pip install wechatsogou --upgrade装好后初始化一个 API 对象即可开始。参数里比较常用的有两个captcha_break_time控制验证码输错的重试次数timeout控制单次请求超时其余 requests 支持的关键字比如代理也能直接透传。# hello_wechat.py # 微信公众号数据采集第一步先验证环境能通 import wechatsogou api wechatsogou.WechatSogouAPI(captcha_break_time3, timeout10) print(初始化成功准备采集...)接下来做两件事先搜索定位目标公众号再拉取它的完整档案。如果只知道公众号的名字、不确定具体账号用search_gzh按关键词搜返回的是匹配到的公众号列表每条包含名称、微信 ID、简介、认证信息和主页链接。# 不确定名字时先搜一遍 api wechatsogou.WechatSogouAPI() results api.search_gzh(python编程) for gzh in results[:5]: print(gzh[wechat_name], |, gzh[wechat_id], |, gzh[authentication])定位到之后get_gzh_info能直接给你一份完整的公众号档案名称、ID、简介、头像、认证主体、最近一月群发数甚至二维码。因为微信 ID 是唯一的所以传入 ID 或名称都能命中。# 拿到某个公众号的完整档案 info api.get_gzh_info(python编程) print(名称:, info[wechat_name]) print(ID:, info[wechat_id]) print(简介:, info[introduction]) print(认证:, info.get(authentication, 未认证))运行这段代码控制台会打印出该公众号的元信息一分钟内你就能验证整条链路是通的。这是整个数据采集项目的地基。把查一个升级成查一批批量抓取历史文章建日报最小示例只是热身真正解决阿哲问题的是get_gzh_article_by_history。这个接口能从一个公众号的最近群发页里一次性抽出公众号信息加最新文章列表每篇文章包含标题、摘要、正文链接、发布时间、封面图、作者等完整字段。把它套进一个循环就得到了竞品日报的骨架# gzh_daily.py # 竞品日报生成器批量抓取多个公众号的历史文章落盘为 JSON import json import time import wechatsogou TARGETS [python编程, 数据分析与开发, 机器之心] # 竞品清单可随意增删 api wechatsogou.WechatSogouAPI(timeout10) def grab_gzh(name): data api.get_gzh_article_by_history(name) if not data: return None return { profile: data[gzh], latest_articles: data[article], } report {} for name in TARGETS: report[name] grab_gzh(name) time.sleep(2) # 每抓一个歇两秒保持温和的请求节奏 with open(daily_report.json, w, encodingutf-8) as f: json.dump(report, f, ensure_asciiFalse, indent2)运行python gzh_daily.py当前目录下会生成daily_report.json里面是每个公众号的档案和最近的文章列表。阿哲的 Excel 手工活到这里就正式退役了后面想接数据库、发邮件、出图表都只是换个输出目标的问题。给日报加过滤按时间按类型只留有用的文章盯竞品只是数据采集的一半另一半是选题。很多时候你并不关心谁发了而是关心某个话题最近有什么文章。这时候用search_article它支持按时间范围和内容类型做筛选时间可以是一天、一周、一月甚至自定义区间类型可以限定有图、有视频或图文并茂。# topic_scan.py # 扫一遍数据可视化最近一周的带图文章作为选题参考 from wechatsogou import WechatSogouAPI, WechatSogouConst api WechatSogouAPI() hits api.search_article( 数据可视化, timesnWechatSogouConst.search_article_time.week, article_typeWechatSogouConst.search_article_type.image, ) for item in hits: print(item[article][title], |, item[gzh][wechat_name])输出是一行行标题 来源公众号文章还带摘要、推送时间和临时链接。把这段逻辑接在日报后面你就能每天自动得到一份竞品动态 行业新文的双拼报告比手动刷手机靠谱多了。把选题雷达补完整联想词扩展 分类热榜报告越来越像样了但阿哲还想要今天行业里什么最热。这里有两个顺手的小工具。第一个是get_sugg输入一个词返回搜狗微信搜索的联想词列表。别小看它选题时它能帮你把一个大词拆成一群用户真实在搜的长尾词。# keyword_expand.py # 用联想词把选题池扩开 import wechatsogou api wechatsogou.WechatSogouAPI() for word in api.get_sugg(高考): print(word)第二个是get_gzh_article_by_hot按分类拿搜狗微信首页的热门文章。分类常量挂在WechatSogouConst.hot_index下从科技、财经、职场到美食、萌宠有二十多个足够覆盖大多数行业。# hot_weekly.py # 给周报加一块科技热榜 from wechatsogou import WechatSogouAPI, WechatSogouConst api WechatSogouAPI() hot_items api.get_gzh_article_by_hot(WechatSogouConst.hot_index.technology) for item in hot_items[:5]: print(item[article][title], |, item[gzh][wechat_name])到这里阿哲的日报系统已经齐了竞品动态、行业新文、联想词、热榜四块内容全部自动生成。让采集脚本长期稳定跑下去的三个关键动作示例脚本能跑通和能天天跑是两回事。要想让这套数据采集任务长期稳定下面三个动作务必加上。第一个限速。搜狗对请求频率很敏感最稳妥的做法是在每次调用前随机睡 1.5 到 3.5 秒import random import time def gentle_call(fn, *args, **kwargs): time.sleep(random.uniform(1.5, 3.5)) return fn(*args, **kwargs) # 用法gentle_call(api.get_gzh_info, python编程)第二个对网络异常做重试。库在请求失败时会抛WechatSogouRequestsException包一层重试就能扛住偶发的网络抖动import time from wechatsogou.exceptions import WechatSogouRequestsException def fetch_with_retry(fn, *args, retries3, **kwargs): for attempt in range(retries): try: return fn(*args, **kwargs) except WechatSogouRequestsException: if attempt retries - 1: raise time.sleep(3)第三个也是最重要的一条搜狗返回的文章链接是带签名、有有效期的临时链接过期就打不开了。所以采集当下就要把正文内容存下来用get_article_content拿正文 HTML 和图片列表# 拿到链接立刻落盘别等它过期 detail api.get_article_content(article_url) # detail[content_html] - 清洗后的正文 HTML # detail[content_img_list] - 正文里的图片清单把这三件事加进gzh_daily.py脚本就能挂进定时任务比如 cron每天早上自动跑一遍你在工位上等着收日报就行。踩坑实录这几个坑我先替你趟了用了一个月之后阿哲把这些经验整理成了自己的避坑清单我觉得值得直接贴出来。临时链接过期不是 bug是常态。微信文章的mp.weixin.qq.com链接有时效隔几天再点必然失效。所以抓链接和存内容必须同一天完成get_article_content就是为此准备的。为什么只能拿到 10 篇搜狗的历史页只暴露最近 10 条群发接口拿不到更早的内容。想要完整归档就得每天跑一次自己把数据累积起来别指望一次抓全。验证码别硬刚。请求频率一旦上去搜狗就会弹验证码。库内置了验证码处理回调captcha_break_time可以调重试次数但治本的办法永远是放慢节奏配合前面的限速一起用。别手写死 User-Agent。库每次请求都会从一批常见 UA 里随机挑一个你硬编码反而更容易被识别成机器行为。URL 默认已经被解密过了。decode_url参数默认开启拿到的就是可直接访问的地址除非有特殊需求否则不要把它关掉。写在最后合规采集然后立刻动手最后说点正经的。WechatSogou 这样的工具降低了数据采集的门槛但能力越大越要守规矩请遵守相关法律法规和平台的服务条款合理控制请求频率别给目标服务器添压力抓到的内容注意版权边界别拿去做二次商用或批量搬运。用于个人学习、竞品研究和舆情观察把握住分寸工具才能真正帮你省时间。现在你可以打开终端跑一遍上面的最小示例了。跑通之后推荐把gzh_daily.py加上限速和重试再挂一个每天早上的定时任务——明天到工位时你会感谢今天动手的自己。【免费下载链接】WechatSogou基于搜狗微信搜索的微信公众号爬虫接口项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表