Google robots.txt解析与匹配库
Google开源robots.txt解析库的完整中文译文,涵盖访问规则、构建与使用限制。
修订历史
- 版本 1 · 中文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 许可证;本译文保留原文全部章节,命令及其示例输出按原文保留,文字译为中文。示例输出是原文的一部分,不代表独立执行结果。
读者评论 0
暂无已公开评论。