Files
ai-web/docs/crawler-rule-guide.md
cjd 260460df03
Some checks failed
Tests / PHP 8.2 (push) Has been cancelled
Tests / PHP 8.3 (push) Has been cancelled
Tests / PHP 8.4 (push) Has been cancelled
爬虫开发
2026-02-18 12:56:36 +08:00

220 lines
4.8 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.
# 采集规则使用文档(含 AI 工具 Demo
本文面向当前项目内置采集器,目标是让你从 0 到 1 跑通一条规则,并把数据入库到站点模块(如 `AI 工具``AI 模型`)。
## 1. 功能概览
当前支持:
- 后台配置采集规则(入口 URL、定时、抓取参数、Extractor JSON、AI 配置)。
- 定时执行Laravel Scheduler与手动触发。
- 运行日志、失败明细、告警中心。
- 目标模块入库:`AI 工具``AI 模型`
- 三种抽取模式:
- `xpath`:只用 XPath 规则。
- `ai`:只用 AI 抽取结构化数据。
- `hybrid`XPath + AI 合并XPath 优先)。
- 页面预览 + 点选元素生成 XPath。
- AI 一键生成 Extractor 规则(从页面内容推断)。
## 2. 前置准备
### 2.1 迁移数据库
```bash
php artisan migrate --force
```
确保存在以下表:
- `crawl_rules`
- `crawl_runs`
- `crawl_run_items`
- `crawl_alerts`
### 2.2 启动队列与调度
采集任务通过队列执行,建议至少一个 worker
```bash
php artisan queue:work
```
系统 cron 每分钟执行一次调度器:
```cron
* * * * * cd /path/to/ai-web && php artisan schedule:run >> /dev/null 2>&1
```
### 2.3 AI 配置(用于 AI 抽取/AI 规则生成)
`.env` 中配置:
```env
CRAWLER_AI_ENDPOINT=
CRAWLER_AI_KEY=
CRAWLER_AI_MODEL=gpt-4o-mini
```
## 3. 后台入口
- 采集规则:`/admin/crawlers`
- 运行记录:`/admin/crawl-runs`
- 告警中心:`/admin/crawl-alerts`
## 4. AI 工具 Demo推荐先跑
### 4.1 新建规则
`采集规则` 页面点击“新建采集规则”:
- 规则名称:`AI工具-Demo`
- 目标模块:`AI 工具`
- 发布策略:`草稿待审核`
- Cron`0 */6 * * *`
- 时区:`Asia/Shanghai`
- 最大页面数:`30`
- 启用规则:勾选
- 入口 URL
```text
https://your-demo-site.com/ai-tools
```
### 4.2 选择抽取模式
可按场景选:
- 页面结构稳定:`xpath`
- 页面结构变化大:`ai`
- 追求稳定 + 覆盖:`hybrid`
### 4.3 配置 Extractor JSONXPath 模式/Hybrid 建议)
可直接用:
```json
{
"list_link_xpath": "//a[contains(@class,'tool-link')]/@href",
"fields": {
"name": "//h1/text()",
"summary": "//meta[@name='description']/@content",
"official_url": "//a[contains(@class,'visit-official')]/@href",
"logo_url": "//meta[@property='og:image']/@content",
"pricing_type": "//span[@data-field='pricing']/text()",
"platform": "//span[@data-field='platform']/text()",
"language": "//span[@data-field='language']/text()",
"description": "//article[contains(@class,'tool-content')]//text()"
}
}
```
或使用示例文件:`docs/examples/ai-tools-extractor.json`
### 4.4 用“页面预览 + 选元素”快速生成 XPath
1. 在表单里输入 `预览 URL`
2. 点击“加载预览”。
3. 在预览 iframe 点击目标元素,页面会显示当前 XPath。
4. 填写“写入字段”(如 `name` / `summary` / `list_link_xpath`)。
5. 点击“写入 Extractor JSON”。
### 4.5 用 AI 一键生成规则
1. 填写可选AI 提示词、模型、温度等。
2. 点击“AI 生成抽取规则并合并到 Extractor JSON”。
3. 检查合并后的 JSON 并微调。
### 4.6 Mapping / Dedupe可选
`Mapping JSON` 示例:`docs/examples/ai-tools-mapping.json`
```json
{
"name": "title",
"summary": "desc",
"official_url": "website"
}
```
`Dedupe JSON` 当前可先留空对象:`docs/examples/ai-tools-dedupe.json`
```json
{}
```
## 5. 如何执行
### 5.1 后台手动执行
在规则列表点击“立即执行”。
### 5.2 命令行执行
执行指定规则:
```bash
php artisan crawler:run 规则ID --sync
```
按 cron 执行到期规则:
```bash
php artisan crawler:run
```
忽略 cron 执行全部启用规则:
```bash
php artisan crawler:run --all
```
重试某次运行:
```bash
php artisan crawler:retry-failed 运行ID
```
## 6. 验证结果
1. 打开 `/admin/crawl-runs` 查看该次运行状态。
2. 进入运行详情看 `list/detail/extract/upsert` 各阶段结果。
3. 到目标模块(如 AI 工具)确认有新数据,状态应为 `draft`
## 7. 常见问题
### 7.1 `Table '...crawl_rules' doesn't exist`
未执行迁移:
```bash
php artisan migrate --force
```
### 7.2 保存时报 `validation.json` 或 JSON 格式错误
检查以下字段是否是合法 JSON
- `Extractor JSON`
- `Mapping JSON`
- `Headers JSON`
- `Cookies JSON`
### 7.3 运行成功但没入库
通常是缺少必填字段:
- AI 工具至少需 `name``summary`
- AI 模型至少需 `name``summary``modality``deployment_mode`
去运行详情看 `extract` 阶段的 `Missing required fields`
### 7.4 预览或 AI 规则生成失败
常见原因:
- URL 不可访问
- URL 命中安全限制(内网/保留地址)
- AI 配置缺失(`CRAWLER_AI_ENDPOINT` / `CRAWLER_AI_KEY`