多平台新闻 & 内容爬虫集合
支持微信公众号、今日头条、网易新闻、搜狐、腾讯、Naver、Detik、Quora、BBC、CNN 等 11 个主流平台
提供命令行调用、可视化 Web UI、统一 JSON 输出、支持MCP协议
English · 中文
开箱即用的 Web UI - 自动识别平台、实时提取进度、JSON/Markdown 双格式导出
| 🌍 多平台支持 | 🎨 双模式使用 | 📦 标准化输出 | ⚡ 快速部署 | 🤖 MCP 支持 |
|---|---|---|---|---|
| 11 个主流平台 覆盖中英韩印尼 |
Python API + Web UI |
统一 JSON 格式 易于集成 |
uv 包管理器 极速安装 |
集成各类AI总结文章 |
核心特性:
- ✅ 全平台覆盖 - 支持微信公众号、今日头条、网易、搜狐、腾讯、Lenny's Newsletter、Naver Blog、Detik News、Quora、BBC News、CNN News
- ✅ 智能提取 - 自动识别平台类型,提取标题、正文、图片、视频等多媒体内容
- ✅ 统一输出 - 所有平台输出标准化 JSON 格式,完美适配数据分析、入库、下游处理
- ✅ 灵活使用 - 支持 Python API(自动化) + Web UI(可视化) + MCP Server(AI Agent)
- ✅ 一键部署 - Docker Compose 编排所有服务(后端 + 前端 + MCP)
- ✅ AI 智能体集成 - 支持 MCP 协议,可接入 Claude Desktop 等 AI 工具
- ✅ 模块化设计 - 各平台爬虫解耦,易于扩展新平台或优化现有实现
- ✅ 轻量高效 - 使用 uv 管理依赖,安装快速,运行稳定
# 1. 安装 Docker 和 Docker Compose
# 访问: https://docs.docker.com/get-docker/
# 2. 克隆项目
git clone https://github.com/NanmiCoder/NewsCrawler.git
cd NewsCrawler
# 3. 一键启动所有服务(后端 + 前端 + MCP)
docker compose up -d
# 4. 访问服务
# - 前端界面: http://localhost:3000
# - 后端 API: http://localhost:8000/docs
# - MCP 服务: http://localhost:8765/mcp包含服务:
- ✅ Backend 服务 (FastAPI) - 新闻提取 API
- ✅ Frontend 服务 (Vue 3 + Nginx) - Web UI 界面
- ✅ MCP 服务 - AI Agent 工具(支持 Claude Desktop)
- ✅ 自动健康检查 - 确保所有服务正常运行
- ✅ 数据持久化 - 提取的新闻保存在
./data/目录
Docker 管理命令:
# 查看日志
docker compose logs -f
# 停止服务
docker compose down
# 代码更新后重新构建
docker compose up -d --build📖 完整文档: DOCKER_DEPLOYMENT.md
# 1. 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS/Linux
# 或: pip install uv
# 2. 克隆项目
git clone https://github.com/NanmiCoder/NewsCrawler.git
cd NewsCrawler
# 3. 安装所有依赖 (uv workspace 模式)
uv sync
# 4. 启动后端 (在项目根目录)
uv run news-extractor-backend --host 0.0.0.0 --port 8000
# 5. 启动前端 (新终端)
cd news-extractor-ui/frontend
npm install && npm run dev
# 6. 访问 http://localhost:3000Web UI 功能:
- 🎯 粘贴 URL,自动识别平台类型
- 📊 实时显示提取进度
- 📄 支持 JSON / Markdown 双格式导出
- 🖼️ 内容预览与一键下载
from news_crawler.wechat_news import WeChatNewsCrawler
from news_crawler.toutiao_news import ToutiaoNewsCrawler
# 微信公众号
wechat_url = "https://mp.weixin.qq.com/s/xxxxxx"
crawler = WeChatNewsCrawler(wechat_url)
result = crawler.run() # 自动保存到 data/ 目录
# 今日头条
toutiao_url = "https://www.toutiao.com/article/xxxxxx"
crawler = ToutiaoNewsCrawler(toutiao_url)
result = crawler.run()
print(result) # 返回 JSON 格式数据运行示例:
uv run call_example.py # 查看完整示例什么是 MCP? Model Context Protocol (MCP) 是一个连接 AI 助手(如 Claude Desktop)与外部工具和数据源的标准协议。
使用场景:
- 🤖 让 Claude、Cursor、ChatGPT等工具通过对话直接提取新闻内容
- 🔄 通过 AI 指令批量处理多个 URL
- 📊 AI 驱动的内容分析工作流
- 🚀 构建具有新闻提取能力的自定义 AI 智能体
快速配置:
# 1. 启动 MCP 服务(推荐使用 Docker)
docker compose up -d mcp
# 2. 或手动启动 (在项目根目录)
# 首先安装依赖
uv sync
# 启动 MCP 服务器
uv run news-extractor-mcp --host 0.0.0.0 --port 8765
# 3. MCP 服务运行在: http://localhost:8765/mcpAI 工具配置 (Streamable HTTP 方式):
Cursor (点击展开)
配置文件位置: ~/.cursor/mcp.json (全局) 或 .cursor/mcp.json (项目级别)
{
"mcpServers": {
"newscrawler": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}Windsurf (点击展开)
配置文件位置: ~/.codeium/windsurf/mcp_server_config.json
{
"mcpServers": {
"newscrawler": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}Trae (点击展开)
设置 → 工具 → MCP 服务器 → 添加服务器
{
"name": "newscrawler",
"url": "http://127.0.0.1:8765/mcp"
}Claude Desktop (点击展开)
配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"newscrawler": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}其他支持 MCP 的工具 (点击展开)
所有支持 Streamable HTTP 传输的 MCP 客户端都可以使用以下配置:
{
"mcpServers": {
"newscrawler": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}注意: 如果使用 Docker 且 AI 工具运行在 Docker 外,请将 127.0.0.1 替换为宿主机 IP 或 host.docker.internal
可用 MCP 工具:
extract_news- 提取单篇新闻(JSON 或 Markdown 格式)batch_extract_news- 批量提取多个 URLdetect_news_platform- 从 URL 识别平台类型list_supported_platforms- 显示所有支持的平台
📖 完整 MCP 文档: news_extractor_mcp/README.md
| 平台 | URL 示例 | 语言 | 特性 |
|---|---|---|---|
| 微信公众号 | mp.weixin.qq.com |
中文 | 支持图文提取 |
| 今日头条 | toutiao.com |
中文 | 富媒体内容 |
| 网易新闻 | 163.com |
中文 | 图片画廊支持 |
| 搜狐新闻 | sohu.com |
中文 | 多媒体内容 |
| 腾讯新闻 | news.qq.com |
中文 | 新闻支持 |
| Lenny's Newsletter | lennysnewsletter.com |
英文 | 长文内容 |
| Naver Blog | blog.naver.com |
韩语 | 博客平台 |
| Detik News | detik.com |
印尼语 | 东南亚新闻 |
| Quora | quora.com |
英文 | 问答内容 |
Pexels · Pixabay · Coverr · Mixkit - 高质量免费视频素材下载
📰 多源新闻聚合平台 / 舆情监控系统
📊 媒体内容分析、数据挖掘、推荐系统
🔬 学术研究 / 数据科学 - 跨平台内容抓取
🎓 教学项目 / 个人学习 - 爬虫框架模板
🤖 AI 训练数据采集 / 内容质量分析
所有爬虫输出统一的 JSON 格式,保存在 data/ 目录:
{
"title": "文章标题",
"news_url": "原文链接",
"news_id": "文章ID",
"meta_info": {
"author_name": "作者名称",
"author_url": "作者主页",
"publish_time": "2024-10-15 10:30:00"
},
"contents": [
{"type": "text", "content": "段落文本内容", "desc": ""},
{"type": "image", "content": "https://example.com/image.jpg", "desc": "图片描述"},
{"type": "video", "content": "https://example.com/video.mp4", "desc": "视频描述"}
],
"texts": ["段落1文本", "段落2文本"],
"images": ["图片URL1", "图片URL2"],
"videos": ["视频URL1"]
}字段说明:
contents- 结构化内容,保留顺序和类型(文本/图片/视频)texts/images/videos- 扁平化列表,便于快速访问特定类型内容meta_info- 文章元信息(作者、发布时间等)
Python 3.8+ · FastAPI · Pydantic · curl_cffi · parsel · tenacity
Vue 3 · TypeScript · Vite · Axios
uv (包管理器) · Playwright (浏览器自动化,可选)
NewsCrawler/
├── news_crawler/ # 核心爬虫模块
│ ├── wechat_news/ # 微信公众号
│ ├── toutiao_news/ # 今日头条
│ ├── netease_news/ # 网易新闻
│ ├── sohu_news/ # 搜狐新闻
│ ├── tencent_news/ # 腾讯新闻
│ └── ... # 其他平台
│
├── news_extractor_core/ # 共享核心库 (uv workspace 成员)
│ ├── adapters/ # 平台适配器
│ ├── services/ # 业务逻辑
│ └── models/ # 数据模型
│
├── news_extractor_backend/ # FastAPI 后端服务 (uv workspace 成员)
│ ├── api/ # API 路由
│ ├── main.py # 应用入口
│ └── cli.py # 命令行入口
│
├── news_extractor_mcp/ # MCP 服务器 (uv workspace 成员)
│ ├── server.py # MCP 实现
│ └── README.md # MCP 文档
│
├── news-extractor-ui/ # Web UI 应用
│ └── frontend/ # Vue 3 前端
│
├── video_crawler/ # 视频素材下载器
├── libs/ # 工具库
├── data/ # 输出数据目录
│
├── pyproject.toml # uv workspace 根配置
├── uv.lock # 依赖锁文件
├── Dockerfile # 多阶段 Docker 构建
├── docker-compose.yml # 服务编排配置
├── DOCKER_DEPLOYMENT.md # Docker 部署指南
└── MANUAL_DEPLOYMENT.md # 手动部署指南
本项目仅供学习和研究使用,禁止用于商业用途
使用须知:
- ✅ 仅用于个人学习、研究、教学目的
- ✅ 遵守目标网站的 robots.txt 和服务条款
- ✅ 控制请求频率,避免给服务器造成压力
- ❌ 不得用于非法用途或侵犯他人权益
- ❌ 不得进行大规模商业化爬取
技术说明:
- 部分平台可能有反爬机制,需适当调整策略
- 默认 Headers 可能过期,可使用 Playwright 自动获取最新 Cookie
- 网页结构变化可能导致解析失败,欢迎提交 Issue
欢迎提交 Issue 和 Pull Request!
贡献方向:
- 🐛 修复 Bug
- ✨ 添加新平台支持
- 📝 改进文档
- 🎨 优化 UI/UX
- ⚡ 性能优化
提交流程:
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目仅供学习和研究使用。使用本项目即表示您同意:
- 不将其用于商业目的
- 不进行大规模爬取
- 遵守相关法律法规和目标网站的使用条款
对于因使用本项目内容而引起的任何法律责任,本项目不承担责任。
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!
Made with ❤️ by NanmiCoder
