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 · 中文Google robots.txt解析与匹配库
发布完整译文并保留原始来源。
读者评论 0
暂无已公开评论。