一个基于 Microsoft Playwright(C#) 的多源新闻抓取工具集,使用 系统 Edge 浏览器模拟真实用户行为,支持抓取多个新闻网站的热搜列表及相关新闻正文内容,并保存为 JSON 文件。
- ✅ 使用 Playwright(Chromium) 自动化浏览器
- ✅ 指定 本机 Edge 浏览器(msedge.exe)
- ✅ 支持多个新闻源:
- 🔍 百度热搜 - 抓取百度首页热搜榜及相关新闻
- 📰 澎湃新闻 - 支持关键词搜索和按栏目采集
- 🎓 教育部新闻 - 按新闻类型抓取政策解读、工作动态等
- 👷 中工网新闻 - 按新闻类型抓取全总、工会、评论、权益等
- ✅ 防反爬延时处理
- ✅ 抓取结果自动保存为 JSON
- ✅ 提供 WPF 图形界面(NewsSpider)统一管理
NewsSpider/
│
├── BaiduSpider/ # 百度热搜爬虫(控制台应用)
│ ├── Program.cs
│ └── BaiduSpider.csproj
│
├── ThePaperSpider/ # 澎湃新闻爬虫(控制台应用)
│ ├── Program.cs
│ └── ThePaperSpider.csproj
│
├── MoeSpider/ # 教育部新闻爬虫(控制台应用)
│ ├── Program.cs
│ └── MoeSpider.csproj
│
├── WorkerCnSpider/ # 中工网新闻爬虫(控制台应用)
│ ├── Program.cs
│ └── WorkerCnSpider.csproj
│
├── Spider.Common/ # 公共库(核心服务与模型)
│ ├── Models/ # 数据模型
│ │ ├── Baidu/ # 百度相关模型
│ │ ├── ThePaper/ # 澎湃新闻相关模型
│ │ ├── Moe/ # 教育部相关模型
│ │ ├── WorkerCn/ # 中工网相关模型
│ │ └── SpiderSource.cs # 爬虫源枚举
│ ├── Services/ # 核心服务
│ │ ├── PlaywrightService.cs # Playwright 基础服务(抽象类)
│ │ ├── FileService.cs # 文件保存服务
│ │ ├── Baidu/ # 百度爬虫服务
│ │ ├── ThePaper/ # 澎湃新闻爬虫服务
│ │ ├── Moe/ # 教育部爬虫服务
│ │ └── WorkerCn/ # 中工网爬虫服务
│ └── Helpers/ # 辅助工具
│
└── NewsSpider/ # WPF 图形界面应用
├── Views/ # 视图
├── ViewModels/ # 视图模型(MVVM)
├── Services/ # 应用服务
├── Models/ # 应用模型
└── App.xaml.cs # 应用入口
所有爬虫服务的基类,提供 Playwright 初始化和浏览器管理功能。
public abstract class PlaywrightService
{
public IBrowser Browser;
public IPage Page;
public async Task InitializeAsync()
{
// 初始化 Playwright 并使用系统 Edge 浏览器
}
}统一的数据保存服务,支持将抓取结果保存为 JSON 文件。
public class FileService
{
public async Task SaveAllContentToJson<T>(
T newsContents,
SpiderSource spiderSource)
{
// 保存为 {SpiderSource}_{时间戳}.json
}
}BaiduSpiderService- 百度热搜爬虫服务PaperSpiderService- 澎湃新闻爬虫服务MoeService- 教育部新闻爬虫服务WorkCnService- 中工网新闻爬虫服务
确保已安装 .NET 10.0 或更高版本。
dotnet add package Microsoft.Playwright初始化浏览器依赖:
playwright install- Windows 操作系统(依赖 Edge 浏览器)
- Microsoft Edge(Chromium 内核)
- Edge 默认路径:
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
cd BaiduSpider
dotnet run功能:
- 自动打开百度首页
- 抓取热搜榜列表
- 进入每个热搜详情页,提取相关新闻链接(最多 10 条)
- 逐条访问新闻页面,提取正文内容
- 保存为 JSON 文件到
./Baidu目录
cd ThePaperSpider
dotnet run功能:
- 搜索模式:根据关键词搜索新闻
- 采集模式:按栏目采集新闻(时事、国际、财经、科技、暖文、智库)
- 支持分页和每页数量设置
- 保存为 JSON 文件到
./ThePaper目录
cd MoeSpider
dotnet run功能:
- 交互式选择新闻类型:
- 政策解读
- 工作动态
- 自动抓取对应类型的新闻列表和正文
- 保存为 JSON 文件到
./Moe目录
cd WorkerCnSpider
dotnet run功能:
- 交互式选择新闻类型:
- 全总
- 工会
- 评论
- 权益
- 自动抓取对应类型的新闻列表和正文
- 保存为 JSON 文件到
./WorkCn目录
cd NewsSpider
dotnet run功能:
- 提供现代化的 WPF UI 界面(基于 WPF-UI)
- 统一管理多个爬虫
- 目前主要支持百度爬虫功能
- 使用 MVVM 架构模式
// 热搜条目
public class NewsCover
{
public required string Title { get; set; }
public required string Url { get; set; }
}
// 新闻内容
public class NewsContent
{
public required string Url { get; set; }
public required string Content { get; set; }
}
// 完整新闻
public class News
{
public required NewsCover Item { get; set; }
public required List<NewsContent> Contents { get; set; }
}public class NewsCover
{
public required string Title { get; set; }
public required string Link { get; set; }
// ... 其他属性
}
public class News
{
public required NewsCover Cover { get; set; }
public required string NewsContent { get; set; }
}类似结构,包含 NewsCover 和 News 模型。
项目中已内置基础防反爬措施:
- ⏱ 页面访问间隔延时(
WaitForTimeoutAsync(800)) - 🌐 使用真实浏览器(Edge)
- 🧍 非 Headless 模式(可见浏览器窗口)
- 🔄 顺序访问,避免并发请求
- 📝 模拟真实用户行为
如需进一步加强,可扩展:
- 随机 User-Agent
- 随机延迟时间
- 页面行为模拟(滚动、点击、鼠标移动)
- 代理池支持
- 使用
FileService.SaveAllContentToJson统一保存 - 文件命名格式:
{SpiderSource}_{yyyyMMdd_HHmmss}.json - 保存位置:
- 百度:
./Baidu/ - 澎湃新闻:
./ThePaper/ - 教育部:
./Moe/ - 中工网:
./WorkCn/
- 百度:
所有数据以美观格式(缩进)保存,便于阅读和后续处理。
支持后续扩展为:
- CSV 格式
- 数据库存储(SQL Server、MySQL、PostgreSQL)
- Elasticsearch 索引
- 其他数据存储方案
- 各网站的页面结构 可能随时变化
- 若抓取失败,请优先检查:
- CSS Selector 是否失效
- 页面是否被重定向
- 网站是否更新了反爬机制
NetworkIdle在部分新闻站点可能不稳定- 可调整为:
WaitUntil = WaitUntilState.DOMContentLoaded
- 爬虫采用顺序访问,避免对目标网站造成过大压力
- 建议在合理的时间间隔内运行
- 遵守网站的访问频率限制
- .NET 10.0 - 开发框架
- Microsoft Playwright - 浏览器自动化
- WPF - Windows 桌面应用框架
- WPF-UI - 现代化 UI 组件库
- Microsoft.Extensions.Hosting - 依赖注入容器
- CommunityToolkit.Mvvm - MVVM 工具包
- System.Text.Json - JSON 序列化
- Newtonsoft.Json - JSON 处理(部分服务使用)
本项目仅用于 学习与技术研究,请遵守目标网站的 robots 协议 和相关法律法规,禁止用于任何非法用途。
使用本工具时,请:
- ✅ 遵守目标网站的使用条款
- ✅ 尊重网站的访问频率限制
- ✅ 不要用于商业用途或大规模数据采集
- ✅ 不要对目标网站造成不必要的负担
请查看 LICENSE 文件了解详情。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过 Issue 反馈。