Files
universal-crawler/README.md
T

93 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 通用爬虫系统 (universal-crawler)
基于原 tpu_crawlerPlaywright + stealth + 系统 Chrome)改造的全能网页爬取管理系统。
**可爬取任意网址**,自带 Web 管理界面,支持批量、定时、自动三种模式。
## 快速开始
```bash
./start.sh # 启动 (默认端口 16062)
./start.sh stop # 停止
./start.sh restart # 重启
./start.sh status # 查看状态
```
启动后打开管理界面:`http://<服务器IP>:16062/`
环境要求(本机已具备):
- Python 3.12 (`/home/hz1/miniconda3/envs/openclaw/bin/python`)
- flask / playwright / playwright-stealth
- 系统 Chrome `/usr/bin/google-chrome`
## 功能总览
### 1. 前端管理界面
- 任务卡片总览:状态、进度、统计、下次调度时间一目了然
- 一键操作:开始 / 暂停 / 恢复 / 终止 / 编辑 / 删除
- 任务详情:历次运行记录、结果明细表(HTML/TXT 在线预览)、图片缩略图、实时日志
- 运行中的任务参数支持**热更新**(修改后从下一页起生效)
### 2. 批量爬取模式
一次粘贴多个网址(每行一个,`#` 注释),可配置:
- 项目名称、输出目录(默认 `out/<任务ID>`,可填绝对路径)
- 爬取间隔(随机秒数区间,防封 IP)、单页超时
- 失败重试次数 / 重试间隔
- 是否爬取图片(自动下载页面图片到 `xxx_img/` 目录)
- 完成后邮件通知(复用 send_email.py,默认发到 wlq@tphai.com
### 3. 定时爬取模式
- **间隔调度**:每 N 分钟 / 小时 / 天
- **cron 表达式**:5 段式(分 时 日 月 周,周 0/7=周日),如 `0 3 * * *` 每天凌晨 3 点
- 可启用/停用调度,自动计算下次执行时间;到点自动开跑,跑完自动计算下一次
### 4. 自动爬取模式
给定一个起始网址,系统自动从页面里发现链接、按规则筛选后 BFS 爬取:
- **包含规则**:只爬包含指定子串(或正则)的链接
- **排除规则**:跳过匹配的链接(如 login、/tag/
- **仅同域名**:限制在起始网站内
- **最大页数 / 最大深度**:控制爬取规模
- 其余参数(间隔、重试、图片、通知)同批量模式
## 输出文件
每个任务输出到独立目录(默认 `out/<任务ID>/`):
- `NNNN_<域名>_<时间戳>.html` — 完整网页
- `NNNN_<域名>_<时间戳>.txt` — 提取的纯文本正文
- `NNNN_<域名>_<时间戳>_img/` — 下载的图片(开启图片爬取时)
## API 速查
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/api/tasks` | 任务列表(含最新运行) |
| POST | `/api/tasks` | 创建任务 |
| GET/PUT/DELETE | `/api/tasks/<id>` | 详情 / 修改 / 删除 |
| POST | `/api/tasks/<id>/start` | 开始爬取 |
| POST | `/api/tasks/<id>/pause` | 暂停 |
| POST | `/api/tasks/<id>/resume` | 恢复 |
| POST | `/api/tasks/<id>/stop` | 终止 |
| GET | `/api/runs/<rid>` | 运行详情(结果+日志) |
| GET | `/api/runs/<rid>/logs?offset=N` | 增量日志 |
| GET | `/api/file?task_id=&path=` | 读取输出文件(HTML/TXT/图片) |
## 目录结构
```
universal-crawler/
├── app.py # Flask 主服务 (端口 16062)
├── engine.py # 爬虫引擎 (批量/自动/图片/重试/暂停恢复)
├── scheduler.py # 定时调度器 (间隔 + cron)
├── store.py # 任务/运行记录持久化 (JSON)
├── notify.py # 邮件通知
├── static/ # 前端管理界面
├── data/ # 运行时数据 (任务、运行记录、cookie)
├── out/ # 默认爬取输出
├── legacy/ # 原 tpu_crawler 脚本备份
└── start.sh # 启动脚本 (PID 文件管理)
```
## 注意事项
- 爬取前尊重目标站点 robots.txt / 使用条款,仅用于合法用途
- 延迟别设太低(建议 ≥1s),高频访问会被封 IP
- 每个任务独立的 cookie 文件,互不干扰;被反爬拦截时删除 `data/cookies_<任务ID>.json` 重新验证