Google robots.txt解析与匹配库

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

修订历史

  1. 版本 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

暂无已公开评论。

登录后可发表评论。

提交纠错

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