内容
# MCP 微信爬虫 🕷️
**English** | [中文](README_CN.md)
**不再复制粘贴!让 AI 直接读取微信公众号文章**
一个 MCP(模型上下文协议)服务器,使 AI 助手可以直接爬取和分析微信公众号文章 - 不再需要复制粘贴!
## 解决问题
你是否曾经想让 AI 分析微信公众号文章,却发现无法访问内容?传统的工作流程需要:
1. 打开微信公众号文章
2. 手动复制所有文本
3. 粘贴到 AI 聊天中
4. 丢失图片和格式
**这个 MCP 服务器解决了这个问题。** 只需给 AI 一个微信公众号文章的 URL,它就可以:
- 提取完整的文章内容(文本 + HTML)
- 下载嵌入的图片
- 分析文章统计数据
- 比较多篇文章
- 批量处理竞争对手账号
## 快速开始
### 1. 安装依赖
```bash
cd mcp-weixin
pip install -r requirements.txt
```
或者使用 uv:
```bash
uv pip install -r requirements.txt
```
### 2. 选择后端
| 后端 | 优点 | 缺点 |
|---------|------|------|
| **agent-browser** | 更轻量,不需要 Chrome 驱动 | 功能较少,需要安装 agent-browser |
| **selenium** | 功能齐全,支持图片下载 | 更重量,需要 Chrome/ChromeDriver |
通过 `CRAWLER_BACKEND` 环境变量设置:`"agentbrowser"` 或 `"selenium"`(默认)。
### 3. 在 Cursor/Claude 中配置
添加到你的 MCP 设置(Cursor:设置 → MCP,或 `~/.cursor/mcp.json`):
**选项 A:agent-browser 后端(推荐 - 更轻量)**
```json
{
"mcpServers": {
"weixin_spider": {
"command": "python",
"args": ["/path/to/mcp-weixin/src/mcp_weixin_spider/server.py"],
"env": {
"PYTHONPATH": "/path/to/mcp-weixin",
"CRAWLER_BACKEND": "agentbrowser",
"AGENT_BROWSER_BIN": "/path/to/agent-browser/bin/agent-browser",
"WAIT_TIME": "10"
}
}
}
}
```
**选项 B:Selenium 后端(功能齐全)**
```json
{
"mcpServers": {
"weixin_spider": {
"command": "python",
"args": ["/path/to/mcp-weixin/src/mcp_weixin_spider/server.py"],
"env": {
"PYTHONPATH": "/path/to/mcp-weixin",
"CRAWLER_BACKEND": "selenium",
"DOWNLOAD_IMAGES": "true",
"WAIT_TIME": "10"
}
}
}
}
```
### 3. 在 AI 聊天中使用
配置完成后,你可以问你的 AI:
```
帮我分析这篇公众号文章: https://mp.weixin.qq.com/s/...
```
AI 将使用 MCP 工具直接爬取和分析文章!
## 可用工具
| 工具 | 描述 |
|------|-------------|
| `crawl_weixin_article` | 爬取文章内容和图片 - 完整的文章提取 |
| `analyze_weixin_article` | 分析文章统计数据 - 统计数据和关键短语 |
| `summarize_weixin_article` | 获取文章摘要 - 快速摘要 |
| `batch_crawl_articles` | 批量爬取多篇文章 - 处理多个 URL |
| `compare_articles` | 对比分析多篇文章 - 竞争对手分析 |
## 架构
```
mcp-weixin/
├── src/mcp_weixin_spider/
│ ├── server.py # FastMCP 服务器(主要入口点)
│ ├── client.py # MCP 客户端,用于测试
│ └── __init__.py
├── weixin_spider_simple.py # 核心爬虫(Selenium/Chrome)
├── pyproject.toml # 项目配置
├── requirements.txt # 依赖项
└── README.md
```
### 工作原理
```
┌─────────────┐ MCP 协议 ┌──────────────┐
│ AI/LLM │ ◄─────────────────► │ MCP 服务器 │
│ (Claude/ │ 标准输入输出传输 │ (FastMCP) │
│ Cursor) │ └──────┬───────┘
└─────────────┘ │
▼
┌───────────────────┐
│ Chrome 驱动 │
│ (无头) │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ mp.weixin.qq.com │
│ (文章) │
└───────────────────┘
```
1. **AI 发送请求** 通过 MCP 协议
2. **MCP 服务器** 接收并解析请求
3. **Chrome 驱动** 加载微信公众号文章(无头)
4. **内容提取** (标题,作者,文本,图片)
5. **结果返回** 给 AI 作为结构化 JSON
## 用例
### 1. 单篇文章分析
```
用户: 帮我总结这篇文章 https://mp.weixin.qq.com/s/xxx
AI: [调用 summarize_weixin_article] 这篇文章主要讲述了...
```
### 2. 竞争对手分析
```
用户: 对比分析这三个竞争对手公众号的最新文章
AI: [调用 compare_articles] 三篇文章的对比分析如下...
```
### 3. 批量内容监控
```
用户: 批量获取这10篇文章的摘要
AI: [调用 batch_crawl_articles] 已获取10篇文章...
```
## 配置
### 环境变量
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `DOWNLOAD_IMAGES` | `true` | 下载文章图片 |
| `WAIT_TIME` | `10` | 页面加载超时时间(秒) |
| `OUTPUT_DIR` | `./downloads` | 图片下载目录 |
### Chrome 要求
爬虫使用 Selenium 和 Chrome。首次运行时,它将自动通过 `webdriver-manager` 下载相应的 ChromeDriver。
对于无头服务器(如 VPC),确保已安装 Chrome:
```bash
# Ubuntu/Debian
sudo apt-get install chromium-browser
# 或安装 Google Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## 测试
### 使用内置客户端测试:
```bash
python src/mcp_weixin_spider/client.py
```
这将打开一个交互式会话,您可以在其中测试所有工具。
### 直接测试爬虫:
```bash
python weixin_spider_simple.py
# 输入微信公众号文章 URL
```
## 提取数据
`crawl_weixin_article` 示例输出:
```json
{
"url": "https://mp.weixin.qq.com/s/...",
"title": "告别复制粘贴!用MCP让AI直接读取微信公众号",
"author": "精神抖擞王大鹏",
"account_name": "精神抖擞王大鹏",
"publish_date": "2025-07-02",
"content_text": "你有没有遇到过这种场景...",
"content_html": "<div>...</div>",
"word_count": 1234,
"images": [
{
"index": 0,
"url": "https://mmbiz.qpic.cn/...",
"local_path": "./downloads/abc123/image_000.jpg"
}
],
"crawl_timestamp": "2026-02-03T10:30:00"
}
```
## 限制和反爬虫保护
⚠️ **微信有复杂的反爬虫检测:**
- **验证页面**:微信显示“环境异常”用于自动化访问
- **IP 封锁**:数据中心 IP 快速被封锁
- **速率限制**:对请求频率的严格限制
### 解决方法
**1. 使用保存的浏览器状态(推荐):**
```bash
# 登录手动 headed 模式
agent-browser --headed open https://mp.weixin.qq.com
# 完成任何验证,然后保存状态
agent-browser state save weixin-auth.json
# 稍后加载保存的状态
agent-browser state load weixin-auth.json
```
**2. 使用住宅代理:**
```bash
agent-browser --proxy http://residential-proxy:port open <url>
```
**3. 速率限制最佳实践:**
- 请求之间等待 10-30 秒
- 限制每小时 10-20 篇文章
- 使用随机延迟
### 其他限制
- **需要登录**:一些文章需要微信登录
- **动态内容**:复杂的交互式内容可能无法完全渲染
- **图片过期**:下载的图片是时间点的快照
### 参考资料
- [微信爬虫指南](https://scrapingrobot.com/blog/wechat-scraping/) - 住宅代理推荐
- [反爬虫绕过方法](https://scrapeops.io/web-scraping-playbook/how-to-bypass-antibots/)
## 贡献
欢迎 PR!请:
1. 使用 `black` 进行格式化
2. 为新功能添加测试
3. 更新 README 以适应 API 更改
## 许可证
MIT
## 鸣谢
灵感来自 [精神抖擞王大鹏](https://mp.weixin.qq.com/s/...) 关于 MCP + 爬虫集成的微信公众号文章。
构建于:
- [MCP Python SDK](https://github.com/anthropics/mcp)
- [Selenium](https://www.selenium.dev/)
- [FastMCP](https://github.com/anthropics/mcp)