关于 algo-seo-crawl
面向构建网站审计、结构化数据采集或 SEO 站点地图的开发者的网页爬取指南,介绍遵守 robots.txt 和按域名限速的范围内爬取流程。
主要功能
- 01管理 URL 队列
- 02检查 robots.txt 和爬取范围
- 03按延迟与重试策略抓取页面
- 04提取链接、内容和元数据
- 05规范化 URL 并规避爬取陷阱
适用场景
- 01为网站审计发现页面及链接结构
- 02大规模采集网站结构化数据
- 03绘制用于 SEO 分析的站点架构
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-seo-crawl安装后在 Claude Code 中输入/algo-seo-crawl确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/sample_scenario.mdreferences/distributed-crawl.mdurl-normalization.md详细介绍
网页爬虫
概述
网页爬虫通过发现 URL、获取内容、解析 HTML 并存储结果,系统地遍历网页。它使用 BFS 或基于优先级的待爬队列管理方式。其性能受 I/O 限制,通常受礼貌性约束影响,而非计算能力限制。
适用场景
触发条件:
- 构建网站审计工具,以发现所有页面及其链接结构
- 大规模收集网站上的结构化数据
- 绘制网站架构图以进行 SEO 分析
不适用场景:
- 需要从单个 API 端点获取数据时(直接使用 HTTP 客户端)
- sitemap.xml 已提供所需的全部 URL 时(改为解析 sitemap)
算法
IRON LAW: Respect robots.txt and Rate Limits
A crawler MUST:
1. Parse and obey robots.txt before crawling any path
2. Enforce crawl-delay (default 1s if unspecified)
3. Identify itself with a descriptive User-Agent
Ignoring these is unethical and will get your IP blocked.
阶段 1:输入验证
解析种子 URL,获取并解析每个域名的 robots.txt,设置爬取范围(同域、子域或跨域)。 **关卡:**种子 URL 有效,已加载 robots.txt 规则,已定义爬取范围。
阶段 2:核心算法
- 使用种子 URL 初始化 URL 待爬队列(优先级队列或 FIFO)
- 取出 URL,检查其是否尚未访问、是否允许 robots.txt 爬取,以及是否在范围内
- 设置超时和重试逻辑来获取页面,并遵守 crawl-delay
- 解析 HTML:提取链接(规范化、去重),提取内容和元数据
- 将发现的 URL 加入队列,并存储解析后的数据
- 重复以上步骤,直到待爬队列为空或达到限制
阶段 3:验证
检查:爬取日志中没有违反 robots.txt 的记录,没有存储重复页面,所有发现的 URL 均已处理。 **关卡:**爬取在指定范围内完成,并遵守礼貌性要求。
阶段 4:输出
返回包含页面、链接图和提取的元数据的网站地图。
输出格式
{
"pages": [{"url": "...", "status": 200, "title": "...", "links_out": 15, "depth": 2}],
"metadata": {"pages_crawled": 500, "errors": 12, "duration_seconds": 300, "domain": "example.com"}
}
示例
示例输入/输出
**输入:**种子:"https://example.com",max_depth:2,max_pages:100 **预期:**爬取树中首页位于深度 0,链接页面位于深度 1–2,并遵守 robots.txt
边界情况
| 输入 | 预期 | 原因 |
|---|---|---|
| robots.txt 禁止爬取 / | 爬取 0 个页面 | 必须遵守完整的禁止规则 |
| 重定向循环 | 5 次重定向后停止 | 防止无限循环 |
| 软 404(错误页面返回 200) | 标记为软 404 | 仅凭状态码不足以判断 |
注意事项
- URL 规范化:
http://Example.COM/path/和http://example.com/path是同一个 URL。规范化方式:将主机名转为小写、移除默认端口、移除末尾斜杠、对查询参数排序。 - JavaScript 渲染的内容:基础 HTTP 获取无法获取 JavaScript 渲染的内容。对于 SPA,使用无头浏览器(Playwright/Puppeteer)。
- 陷阱检测:日历页面、URL 中的会话 ID 和无限分页都会形成爬虫陷阱。设置最大深度和 URL 模式限制。
- 自行触发速率限制:并行获取却不按域名限制速率,会压垮小型服务器。使用按域名划分的信号量。
- 字符编码:并非所有页面都使用 UTF-8。根据 HTTP 标头和 meta 标签检测编码;检测失败时,使用字符集检测库。
参考资料
- URL 规范化规则(RFC 3986),参见
references/url-normalization.md - 分布式爬取架构,参见
references/distributed-crawl.md
评论
支持 Markdown