×

搜狗微信搜索文章列表接口实战:Cookie风控加固+内容结构化清洗+全自动分页(Python合规生产版)

Ace Ace 发表于2026-07-12 17:15:40 浏览4 评论0

抢沙发发表评论

前言
新媒体舆情监测、公众号内容分析、行业资讯聚合、合规素材筛选系统开发中,通过关键词批量获取搜狗微信文章列表是高频需求。目前网络现有教程多为简易裸请求脚本,普遍存在风控拦截频繁、数据杂乱无清洗、分页逻辑缺失、未处理验证码跳转等问题,无法适配生产环境。本文基于搜狗微信公开搜索接口,封装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 quote

class 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_url
                article_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 = 1
        while True:
            res = self.single_page_search(keyword, page)
            if res["code"] != 200 or not res["article_list"]:
                break
            all_articles.extend(res["article_list"])
            if not res["has_next"]:
                break
            page += 1
        return {"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,影响后续调用。
文章链接为搜狗跳转链接,需拼接完整域名,避免无法直接访问。

群贤毕至

访客