一个基于 Playwright 的增强型网页爬虫工具,专门用于爬取网页内容和下载附件文件。
- 🚀 JavaScript 渲染支持: 使用 Playwright 处理动态网页内容
- 📎 智能附件下载: 自动识别并下载各种格式的附件文件
- 🖼️ iframe 递归处理: 支持处理页面中的 iframe 内容
- 📸 页面截图: 自动保存页面截图
- 🔗 链接提取: 提取页面中的所有链接
- ⚡ 异步处理: 高效的异步爬取机制
- 🛡️ 错误处理: 完善的错误处理和重试机制
- 文档: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX
- 压缩包: ZIP, RAR, 7Z, TAR, GZ, BZ2
- 文本: TXT, CSV
# 安装 uv(如果尚未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 安装项目依赖
uv sync
# 安装浏览器驱动
uv run playwright install chromium# 安装 Python 依赖
pip install playwright aiohttp
# 安装浏览器驱动
playwright install chromium- ⚡ 更快的依赖解析: uv 比 pip 快 10-100 倍
- 🔒 锁文件支持: 通过
uv.lock确保依赖版本一致性 - 🐍 Python 版本管理: 自动管理 Python 版本
- 📦 虚拟环境: 自动创建和管理虚拟环境
- 🛡️ 依赖隔离: 避免依赖冲突
uv run python web_crawler.py urls.txt [output_dir]python web_crawler.py urls.txt [output_dir]urls.txt: 包含要爬取的 URL 列表文件(每行一个 URL)output_dir: 输出目录(可选,默认为 'output')
- 准备 URL 文件 (
urls.txt):
https://www.example.com/page1
https://www.example.com/page2
https://www.example.com/page3
- 运行爬虫:
# 使用 uv(推荐)
uv run python web_crawler.py urls.txt output
# 或使用 Python 直接运行
python web_crawler.py urls.txt output- 查看结果:
output/
├── 0001/
│ ├── page.html # 页面 HTML 内容
│ ├── screenshot.png # 页面截图
│ ├── links.txt # 提取的链接列表
│ ├── url.txt # 原始 URL
│ └── attachments/ # 下载的附件
│ ├── document.pdf
│ └── form.docx
├── 0002/
│ └── ...
└── ...
每个爬取的页面会生成一个编号目录(如 0001, 0002 等),包含:
page.html: 完整的页面 HTML 内容screenshot.png: 页面截图links.txt: 页面中所有链接的列表url.txt: 原始 URLattachments/: 下载的附件文件iframes/: iframe 内容(如果存在)
可以在 web_crawler.py 中修改以下配置:
PAGE_LOAD_TIMEOUT = 60000 # 页面加载超时(毫秒)
NAVIGATION_TIMEOUT = 30000 # 导航超时(毫秒)
WAIT_AFTER_LOAD = 5 # 页面加载后等待时间(秒)
DELAY_BETWEEN_URLS = 2 # URL之间延迟(秒)
DEBUG_MODE = True # 调试模式- 智能附件识别: 通过 URL 扩展名、Content-Type 和页面内容多重判断
- 网络监听: 实时监听网络请求,自动下载附件
- 链接分析: 分析 a 标签中的附件链接
- 点击下载: 尝试点击页面元素触发下载
- Cookie 支持: 自动处理会话 Cookie
- 文件名安全: 自动处理非法字符,避免文件名冲突
- 请遵守网站的 robots.txt 和使用条款
- 合理设置请求间隔,避免对目标网站造成过大压力
- 某些网站可能需要登录或特殊处理,请根据实际情况调整
- 大文件下载可能需要较长时间,请耐心等待
- 浏览器启动失败: 确保已正确安装 Playwright 浏览器
- 附件下载失败: 检查网络连接和目标 URL 可访问性
- 页面加载超时: 增加
PAGE_LOAD_TIMEOUT值 - 内存不足: 减少并发处理数量或增加系统内存
设置 DEBUG_MODE = True 可以查看详细的处理日志,帮助诊断问题。
本项目采用 MIT 许可证。