ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

kage爬虫如何礼貌抓取:robots.txt解析、Crawl-delay与sitemap.xml种子机制完整说明

kage爬虫如何礼貌抓取:robots.txt解析、Crawl-delay与sitemap.xml种子机制完整说明 kage爬虫如何礼貌抓取robots.txt解析、Crawl-delay与sitemap.xml种子机制完整说明【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kagekage是一款把网站“影子化”shadow的离线镜像爬虫它用无头浏览器逐页渲染、剥掉全部 JavaScript再产出可离线浏览的本地文件夹。与粗暴爬取不同kage 默认是一个礼貌爬虫polite crawler——开始前先读取目标站的robots.txt并遵守 Allow/Disallow 规则按Crawl-delay控制抓取间隔并从sitemap.xml自动播种 URL。下面完整拆解这套礼貌抓取机制的实现细节。一、抓取前必读kage如何读取robots.txtkage 的礼貌性写在引擎启动流程里。每次kage clone运行时在开始渲染任何页面前会先完成两件事抓取并解析 robots.txt以种子协议://种子主机/robots.txt发起请求限制最多 1 MB并用kage作为 agent 令牌交给解析器安装 Crawl-delay 限流器根据解析出的延迟值构建限速器约束后续每一页的渲染启动间隔。对应源码在 clone/cloner.go 的loadRobots与setupCrawlDelayLimiter两个函数中调用顺序见 cloner.go 的 Run 流程。两个礼貌开关的默认值都在 clone/config.go 中明确设为开启RespectRobots: true—— 默认遵守 robots.txtFollowSitemap: true—— 默认启用 sitemap 播种二、robots.txt 解析三条核心规则解析器实现于 robots/robots.go是一个纯函数式的解析匹配器测试用例在 robots/robots_test.go。理解它只需掌握三条规则。1. User-agent 分组匹配最具体的组优先robots.txt 可以包含多个User-agent分组。kage 以kage作为自己的 agent 令牌匹配时不区分大小写选择逻辑在 selectGroup若存在名字能匹配到kage的分组前缀或子串匹配优先采用**名称最长最具体**的那个分组否则回退到通配分组User-agent: *。User-agent: kage Disallow: /private Crawl-delay: 2 User-agent: * Disallow:上面的写法对 kage 生效的是第一个分组而Disallow:空值在*组中意味着“允许所有”。2. 最长规则获胜Allow/Disallow 匹配对具体路径的判定由 Matcher.Allowed 完成规则如下所有匹配的 Allow/Disallow 规则中模式串最长的一条获胜长度相同时Allow 优先于 Disallow没有任何规则命中时默认允许。3. 通配符支持*与$锚点路径模式匹配matchPattern支持两种通配写法*匹配任意字符序列如/tmp/*结尾$表示精确到路径末尾如/docs/report$。被 Disallow 命中的页面会被直接跳过并记为已完成——即使后续断点续爬也不会回头抓取从 processPage 的入口检查 可以看到这一判定发生在任何渲染之前。三、Crawl-delay控制抓取节奏Crawl-delay声明了两次抓取之间建议等待的秒数。kage 的处理方式是解析时从选中分组里取出延迟值Parse 的 crawl-delay 分支运行时把它交给一个令牌桶限流器rate.NewLimiter(rate.Every(delay), 1)每启动一页渲染前都要先取令牌见 setupCrawlDelayLimiter命令行显式指定则优先--crawl-delay的值会覆盖 robots.txt 中的声明。# 用 5 秒间隔覆盖站点声明的 Crawl-delay kage clone example.com --crawl-delay 5s这是 kage 把“礼貌”落到实处的关键设计不是简单地在代码里sleep而是用限流器保证整个并发 worker 池共享同一条速率曲线。四、sitemap.xml 种子机制自动播种起点光靠跟随页面链接大站的深层内容很难被发现。kage 因此内置了 sitemap 播种实现于 clone/sitemap.go启动逻辑在 seedSitemaps种子来源有两处robots.txt 中所有Sitemap:声明的地址 默认路径https://站点/sitemap.xml两种文档格式都支持解析器同时处理urlset页面清单和sitemapindex索引文件并对索引向下追一层见 sitemapDoc 结构20 秒时间预算整个播种过程共享一个 20 秒的超时窗口避免异常站点拖死启动流程collectSitemaps范围过滤后才入队每个 URL 都会做规范化只有通过 urlx.InScope 且被判定“像页面”的地址才会进入爬取队列日志会打印sitemap: seeded N URLs。如果站点不需要 sitemap 加速或它的 sitemap 有误导可以关闭kage clone example.com --no-sitemap五、何时以及如何绕过--no-robots 的边界官方文档 robots.md 明确了一点robots.txt 表达的是站点偏好advisory不是访问控制enforcement。因此 kage 提供了--no-robots开关# 跳过 Allow / Disallow / Crawl-delay 规则 kage clone example.com --no-robots注意两点绕过后显式的--crawl-delay仍然生效礼貌节奏不受影响如果你必须阻止访问正确做法是服务端鉴权而不是依赖 robots.txt。更完整的礼貌边界配合--max-pages、--scope-prefix、--exclude控制抓取量见官方指南 Scoping a crawl。六、礼貌抓取常用参数速查参数默认作用--no-robots关忽略 robots.txt 的 Allow/Disallow/Crawl-delay--crawl-delay0跟随 robots.txt覆盖页面间隔如--crawl-delay 5s--no-sitemap关不从 sitemap.xml 播种 URL--user-agent桌面版 Chrome资产与 robots 请求使用的 UA-p, --max-pages0限制最多渲染页面数控制总抓取量-d, --max-depth0限制链接跟随深度完整 CLI 说明见 cli/clone.go 与参考文档 CLI Reference。七、小结kage 的礼貌抓取可以浓缩为一条启动时间线读 robots.txt → 选 kage 专属规则组 → 装 Crawl-delay 限流器 → 从 sitemap 播种 → 每页先查 Disallow 再限流渲染。整套机制让它在保持高性能并发默认 4 个页面 worker 8 个资产 worker的同时始终尊重目标站点声明的边界——这正是“影子克隆”与粗暴爬取的本质区别。【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表