基于 Crawl4AI 和 PyQt6 开发的图形化网络爬虫工具,支持单页爬取、深度爬取和批量爬取功能。
- 单页爬取:快速爬取单个网页的内容
- 深度爬取:支持 BFS、DFS、BestFirst 三种爬取策略
- 批量爬取:支持多 URL 批量爬取,每行一个 URL
- 结果预览:实时预览 Markdown 渲染结果
- 结果保存:支持单独保存每个 URL 的结果
- 现代化 UI:采用 PyQt6 构建的现代化界面
- 主题切换:支持亮色/暗色主题切换
- 页面导航:顶部导航栏,快速切换不同功能页面
- 实时状态:右上角实时显示爬取状态和进度
- 浏览器检测绕过:内置 JavaScript 代码绕过浏览器检测
- URL 过滤:支持 URL 模式过滤、域名过滤
- 关键词评分:BestFirst 策略支持关键词相关性评分
- 流式输出:深度爬取支持流式输出,实时显示结果
- 默认保存路径:可设置默认保存路径,提高效率
- Python >= 3.12
- Windows / Linux / macOS
git clone <repository-url>
cd webcrawl使用 uv(推荐):
uv syncuv run python main.py或直接运行:
python main.py如果您使用 uv 管理项目依赖:
- 安装打包工具:
uv pip install pyinstaller- 运行 uv 打包脚本:
python build_exe_uv.py或直接使用命令:
uv run pyinstaller --name=WebCrawler --windowed --onefile --add-data="webcrawl;webcrawl" --collect-all=PyQt6 --collect-all=crawl4ai main.py- 安装打包依赖:
pip install pyinstaller- 运行打包脚本:
python build_exe.py打包完成后,可执行文件位于 dist/WebCrawler.exe
- 安装 PyInstaller:
pip install pyinstaller或使用 uv:
uv pip install pyinstaller- 使用 spec 文件打包:
pyinstaller webcrawl.spec或使用 uv:
uv run pyinstaller webcrawl.specpyinstaller --name=WebCrawler --windowed --onefile --add-data="webcrawl;webcrawl" --collect-all=PyQt6 --collect-all=crawl4ai main.py--windowed/-w:不显示控制台窗口(GUI 应用)--onefile/-F:打包成单个可执行文件--name:指定生成的可执行文件名称--add-data:添加数据文件或目录--hidden-import:添加隐藏导入的模块--icon:指定图标文件(.ico 格式)
- 文件大小:由于包含了 PyQt6 和 WebEngine,打包后的文件可能较大(100MB+)
- 首次运行:首次运行可能需要较长时间解压文件
- 依赖检查:确保所有依赖都已正确安装
- 测试:打包后建议在干净的 Windows 系统上测试运行
如果文件太大,可以使用以下选项:
pyinstaller --name=WebCrawler --windowed --onedir --add-data="webcrawl;webcrawl" main.py使用 --onedir 替代 --onefile 会生成一个文件夹,包含可执行文件和依赖库,文件会更小但需要保持文件夹结构。
- 打开应用,默认进入"基础爬取"页面
- 在"目标 URL"输入框中输入要爬取的 URL(支持批量,每行一个)
- 配置爬取选项:
- 无头模式:是否在后台运行浏览器
- 详细输出:是否显示详细日志
- 延迟时间:页面加载后的等待时间(秒)
- 模拟用户行为:模拟真实用户操作
- 魔法模式:启用高级反检测功能
- 等待图片加载:等待页面图片完全加载
- 点击右上角"开始爬取"按钮
- 等待爬取完成,查看结果
- 点击"保存结果"按钮保存到本地
- 切换到"深度爬取"页面
- 输入目标 URL(支持批量)
- 勾选"启用深度爬取"
- 配置深度爬取选项:
- 爬取策略:选择 BFS(广度优先)、DFS(深度优先)或 BestFirst(最佳优先)
- 最大深度:设置爬取的最大深度(1-10)
- 最大页面数:限制爬取的页面数量(1-1000)
- 包含外部链接:是否爬取外部域名链接
- 流式输出:实时显示爬取结果
- 配置 URL 过滤器(可选):
- URL 模式:使用通配符匹配 URL(如
*blog*,*docs*) - 允许的域名:只爬取指定域名的链接
- 阻止的域名:排除指定域名的链接
- URL 模式:使用通配符匹配 URL(如
- 配置关键词评分器(BestFirst 策略):
- 关键词:用逗号分隔的关键词列表
- 权重:关键词的权重(0.0-1.0)
- 评分阈值:BFS/DFS 策略的评分阈值
- 点击"开始爬取"开始深度爬取
- 在 URL 输入框中输入多个 URL,每行一个:
https://www.example.com/ https://www.example2.com/ https://www.example3.com/ - 配置爬取选项(与单页爬取相同)
- 点击"开始爬取"
- 系统会逐个爬取每个 URL,显示进度(当前/总数)
- 所有 URL 爬取完成后,结果会合并显示
- 保存时,每个 URL 的结果会单独存储到各自的文件夹
- 切换到"设置"页面
- 主题设置:点击按钮切换亮色/暗色主题
- 默认保存路径:
- 点击"浏览..."选择默认保存目录
- 设置后,保存结果时会自动使用该路径
- 点击"清除"可移除默认路径
webcrawl/
├── main.py # 应用程序启动入口
├── pyproject.toml # 项目配置和依赖
├── README.md # 项目说明文档
├── webcrawl/ # 主包目录
│ ├── __init__.py # 包初始化
│ ├── main_window.py # 主窗口 UI 和业务逻辑
│ ├── worker.py # 爬虫工作线程
│ ├── utils.py # 工具函数(Markdown 渲染等)
│ └── config.py # 配置构建模块(深度爬取策略)
└── gui.py # 原始 GUI 文件(已重构)
result_{timestamp}.md # Markdown 文件
result_{timestamp}.html # HTML 文件
console_{timestamp}.txt # 控制台消息
page_1/ # 页面 1 文件夹
├── page_1.md
├── page_1.html
└── page_info.txt
page_2/ # 页面 2 文件夹
├── page_2.md
├── page_2.html
└── page_info.txt
combined_{timestamp}.md # 合并的 Markdown
combined_{timestamp}.html # 合并的 HTML
combined_console_{timestamp}.txt # 合并的控制台消息
batch_crawl_{timestamp}/
├── url_1_{url_safe_name}/ # URL 1 的结果文件夹
│ ├── result_{timestamp}.md
│ ├── result_{timestamp}.html
│ ├── console_{timestamp}.txt
│ └── url_info.txt
├── url_2_{url_safe_name}/ # URL 2 的结果文件夹
│ └── ...
└── batch_summary.txt # 批量爬取汇总信息
- 应用标题:显示应用名称和图标
- 导航按钮:基础爬取、深度爬取、设置
- 控制按钮:开始爬取、停止、保存结果
- 状态显示:实时显示当前爬取状态
- URL 输入区域
- 基础配置选项
- 结果显示区域(预览、Markdown 源码、HTML、控制台消息)
- URL 输入区域
- 深度爬取配置
- URL 过滤器
- 关键词评分器
- 基础配置选项
- 主题设置
- 默认保存路径设置
- 关于信息
- 无头模式:浏览器在后台运行,不显示窗口
- 详细输出:显示详细的爬取日志信息
- 延迟时间:页面加载后等待的时间(秒),建议 3-5 秒
- 模拟用户行为:模拟鼠标移动、滚动等操作
- 魔法模式:启用高级反检测功能
- 等待图片加载:等待页面图片完全加载后再提取内容
- 先爬取同一深度的所有页面,再进入下一层
- 适合需要全面覆盖的场景
- 沿着链接深入爬取,直到达到最大深度
- 适合需要深入探索的场景
- 根据关键词相关性评分,优先爬取评分高的页面
- 适合需要聚焦特定内容的场景
A: 检查以下几点:
- URL 是否正确
- 网络连接是否正常
- 目标网站是否有反爬虫机制(尝试启用"魔法模式")
- 延迟时间是否足够(建议 5 秒以上)
A: 可以尝试:
- 减少最大深度
- 减少最大页面数
- 使用 URL 过滤器限制范围
- 启用流式输出查看实时进度
A: 建议:
- 启用"魔法模式"和"模拟用户行为"
- 增加延迟时间
- 使用合适的 User-Agent
- 避免过于频繁的请求
A: 点击右上角"停止"按钮,已爬取的结果会保留
crawl4ai>=0.7.6:核心爬虫引擎PyQt6>=6.6.0:GUI 框架PyQt6-WebEngine>=6.6.0:Web 引擎(用于 Markdown 预览)markdown>=3.5.0:Markdown 渲染
main_window.py:主窗口类,包含所有 UI 和业务逻辑worker.py:爬虫工作线程,处理异步爬取任务utils.py:工具函数,包括 Markdown 渲染和 HTML 生成config.py:配置构建模块,构建深度爬取策略
- ✨ 初始版本发布
- ✨ 支持单页爬取和深度爬取
- ✨ 支持批量 URL 爬取
- ✨ 支持亮色/暗色主题切换
- ✨ 支持结果预览和保存
- ✨ 支持默认保存路径设置
本项目采用 MIT 许可证。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请提交 Issue。
注意:请遵守目标网站的 robots.txt 和使用条款,合理使用爬虫工具。

