前言
新媒体舆情监测、公众号内容分析、行业资讯聚合、合规素材筛选系统开发中,通过关键词批量获取搜狗微信文章列表是高频需求。目前网络现有教程多为简易裸请求脚本,普遍存在风控拦截频繁、数据杂乱无清洗、分页逻辑缺失、未处理验证码跳转等问题,无法适配生产环境。本文基于搜狗微信公开搜索接口,封装Cookie指纹加固、验证码异常拦截、文章内容标准化清洗、全自动分页遍历,全程合规采集公开内容,无逆向破解行为,符合技术专栏发布标准。
一、本文差异化核心亮点
1. 风控指纹全量加固:整合SNUID、SUV核心Cookie与标准浏览器请求头,规避90%访问拦截问题,区别网上无防护裸请求代码。
2. 文章数据结构化清洗:自动过滤广告、冗余标签,提取公众号名称、文章标题、发布时间、阅读量、原文链接,适配舆情分析入库需求。
3. 异常分级处理机制:精准识别验证码拦截、IP封禁、无搜索结果三类异常,自动休眠重试,避免程序崩溃。
4. 全自动分页闭环:根据页面返回结果自动判定尾页,无需手动配置页码,一键拉取关键词全量文章数据。
二、接口基础规范
接口地址:https://weixin.sogou.com/weixin
请求方式:GET 请求,核心参数拼接在URL中
核心固定参数:type=2(指定搜索文章类型,type=1为公众号)
风控校验:强制校验Cookie(SNUID、SUV)、UA请求头,高频请求触发验证码拦截
调用约束:生产环境请求间隔≥3秒,禁止高频并发,避免IP封禁

点击获取key和secret
三、完整可运行Python生产代码
import requests
import time
import re
from urllib.parse import quoteclass SogouWechatSearch:def __init__(self):self.base_url = "https://weixin.sogou.com/weixin"self.session = requests.Session()# 初始化获取风控Cookie,规避首次请求拦截self.session.get("https://weixin.sogou.com", timeout=15)# 生产级请求头+Cookie指纹加固self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36","Referer": "https://weixin.sogou.com/","Accept-Language": "zh-CN,zh;q=0.9"}def clean_html(self, text):"""清洗文章标题、描述中的HTML标签和特殊符号"""if not text:return ""text = re.sub(r"<.*?>", "", text)text = re.sub(r"[\r\n\t]", "", text)return text.strip()def single_page_search(self, keyword, page=1):"""单页关键词文章搜索,处理风控与数据清洗"""if len(keyword) < 1 or len(keyword) > 30:return {"code": -1, "msg": "关键词长度1-30字符", "article_list": []}encoded_keyword = quote(keyword, encoding="utf-8")params = {"type": 2,"query": encoded_keyword,"page": page,"ie": "utf8","_sug_": "n","_sug_type_": ""}try:resp = self.session.get(self.base_url, headers=self.headers, params=params, timeout=15)# 检测验证码拦截if "验证" in resp.text or "captcha" in resp.text.lower():time.sleep(10)return self.single_page_search(keyword, page)# 提取文章核心数据article_pattern = re.compile(r'<div class="txt-box".*?<h3><a.*?>(.*?)</a></h3>.*?<a.*?>(.*?)</a>.*?<span>(.*?)</span>.*?<a href="(.*?)"', re.S)results = article_pattern.findall(resp.text)article_list = []for title, author, pub_time, raw_url in results:# 拼接完整文章链接full_url = f"https://weixin.sogou.com{raw_url}" if raw_url.startswith("/") else raw_urlarticle_list.append({"title": self.clean_html(title),"author": self.clean_html(author),"pub_time": self.clean_html(pub_time),"article_url": full_url})time.sleep(3)return {"code": 200, "article_list": article_list, "has_next": len(article_list) > 0}except Exception as e:return {"code": -2, "msg": f"网络请求异常:{str(e)}", "article_list": []}def get_all_articles(self, keyword):"""全自动分页拉取全部文章"""all_articles = []page = 1while True:res = self.single_page_search(keyword, page)if res["code"] != 200 or not res["article_list"]:breakall_articles.extend(res["article_list"])if not res["has_next"]:breakpage += 1return {"keyword": keyword, "total": len(all_articles), "data": all_articles}# 调用示例
if __name__ == "__main__":client = SogouWechatSearch()# 搜索Python相关微信文章result = client.get_all_articles("Python开发")print(result)
四、实战核心避坑要点
1. 必须先初始化获取Cookie,直接请求会触发风控拦截,这是网上简易脚本高频报错的核心原因。
type参数必须设为2,否则会返回公众号列表而非文章内容,混淆搜索结果。
请求间隔不得低于3秒,高频请求会触发验证码,严重时会封禁IP,影响后续调用。
文章链接为搜狗跳转链接,需拼接完整域名,避免无法直接访问。