Google robots.txt解析与匹配库

Google开源robots.txt解析库的完整中文译文,涵盖访问规则、构建与使用限制。

Google robots.txt 解析与匹配库

本仓库将 Google 的 robots.txt 解析器和匹配器作为一个符合 C++14 标准的 C++ 库提供。

关于这个库

机器人排除协议(Robots Exclusion Protocol,REP)是一项标准。网站所有者通过具有特定语法的简单文本文件,控制自动化客户端(即爬虫)可以访问哪些 URL。它是互联网的基本组成部分之一,也是搜索引擎得以运行的基础。

由于 REP 在过去25年中只是事实标准,不同实现对 robots.txt 的解析方式略有差异,造成了混淆。本项目通过公开 Google 使用的解析器,尝试解决这一问题。

本库是在 Googlebot(Google 的爬虫)生产代码基础上略作修改的版本,修改涉及部分内部头文件和等效符号。Googlebot 使用这些代码,根据网站管理员在 robots.txt 文件中提供的规则,判断可以访问哪些 URL。开源这个库,是为了帮助开发者构建更准确反映 Google robots.txt 解析和匹配方式的工具。

项目还为网站管理员提供了一个小型可执行程序,用于根据一份 robots.txt 测试单个 URL 和 user-agent。

构建这个库

快速开始

库中附带的小型可执行程序,可以针对指定 user-agent 和 URL 测试本地 robots.txt。运行该程序需要:

  • 兼容的平台,例如 Windows、macOS 或 Linux。大多数平台都受到完整支持。
  • 至少支持 C++14 的兼容 C++ 编译器。主流编译器大多受到支持。
  • 用于与源代码仓库交互的 Git。安装方法见 GitHub 的 Set Up Git 指南。
  • 可以使用自己的构建系统,但本指南的大部分文档假定使用 Bazel。Bazel 及其依赖的下载安装方法见 Bazel 安装指南。

使用 Bazel 构建

Bazel 是本库的官方构建系统,支持 Linux、Windows、macOS 等主流平台和编译器。

构建并运行可执行程序:

$ git clone https://github.com/google/robotstxt.git robotstxt
Cloning into 'robotstxt'...
...
$ cd robotstxt/
bazel-robots$ bazel test :robots_test
...
/:robots_test                                                      PASSED in 0.1s

Executed 1 out of 1 test: 1 test passes.
...
bazel-robots$ bazel build :robots_main
...
Target //:robots_main up-to-date:
  bazel-bin/robots_main
...
bazel-robots$ bazel run robots_main -- ~/local/path/to/robots.txt YourBot https://example.com/url
  user-agent 'YourBot' with URI 'https://example.com/url': ALLOWED

使用 CMake 构建

CMake 是社区支持的构建系统。

使用 CMake 构建这个库,可以依次执行以下步骤:

$ git clone https://github.com/google/robotstxt.git robotstxt
Cloning into 'robotstxt'...
...
$ cd robotstxt/
...
$ mkdir c-build && cd c-build
...
$ cmake .. -DROBOTS_BUILD_TESTS=ON
...
$ make
...
$ make test
Running tests...
Test project robotstxt/c-build
    Start 1: robots-test
1/1 Test #1: robots-test ......................   Passed    0.02 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) =   0.02 sec
...
$ robots ~/local/path/to/robots.txt YourBot https://example.com/url
  user-agent 'YourBot' with URI 'https://example.com/url': ALLOWED

注意:如果 robots 文件为空,解析器还会输出:

notice: robots file is empty so all user-agents are allowed

退出码:0 表示允许访问(ALLOWED),1 表示禁止访问(DISALLOWED)。

注意事项

robots.txt 文件本身的解析方式与 Googlebot 的生产版本完全一致,包括对规则中百分号编码和 Unicode 字符的处理。不过,传给 AllowedByRobots、OneAgentAllowedByRobots 函数,或 robots 工具 URI 参数的 URI,必须符合 RFC3986 指定的格式。本库不会对这些 URI 参数执行完整的规范化处理。只有 URI 符合该格式时,匹配才会按 REP 规范进行。

此外,本库和附带程序不处理爬虫在解析与匹配之外可能采用的实现逻辑。例如,当被测试的 robots.txt 没有明确配置 Googlebot-Image 时,实际爬虫可能遵守 User-agent: Googlebot 的规则;这类逻辑不属于本库的处理范围。

许可证

robots.txt 解析与匹配 C++ 库按 Apache 许可证条款发布。详细信息见原仓库 LICENSE。

相关链接

进一步了解本项目:


译自 Google Robots.txt Parser and Matcher Library README,原作者与项目:Google。原文采用 Apache-2.0 许可证;本译文保留原文全部章节,命令及其示例输出按原文保留,文字译为中文。示例输出是原文的一部分,不代表独立执行结果。

相关文章

修订历史

查看此版本正文 ↗

  1. 版本 1 · 中文Google robots.txt解析与匹配库

    发布完整译文并保留原始来源。

读者评论 0

暂无已公开评论。

登录后可发表评论。

提交纠错

登录后可提交纠错并查看处理进度。