#robots-txt #robots #parser #access-control #web-crawler

bin+lib robotstxt-with-cache

Google 的 robots.txt 解析器和匹配器 C++ 库的本地 Rust 版本

1 个不稳定版本

0.4.0 2021 年 6 月 6 日

#1349解析实现


用于 2 个 crate(通过 crusty-core

Apache-2.0

56KB
987

robotstxt

Crates.io Docs.rs Apache 2.0

Google 的 robots.txt 解析器和匹配器 C++ 库的本地 Rust 版本。

  • 本地 Rust 版本,无第三方 crate 依赖
  • 无不安全代码
  • 保留原始库的所有行为
  • 与原始库一致的 API
  • 100% 通过 Google 原始测试

安装

[dependencies]
robotstxt = "0.3.0"

快速入门

use robotstxt::{DefaultMatcher,DefaultCachingMatcher};

fn main() {
    let mut matcher = DefaultCachingMatcher::new(DefaultMatcher::default());
    let robots_body = "user-agent: FooBot\n\
                   disallow: /\n";
    matcher.parse(robots_body);
    assert_eq!(false, matcher.one_agent_allowed_by_robots("FooBot", "https://foo.com/"));
}

此分支

  • 尝试减少不必要的 CPU 浪费,- 完整解析 robots.txt 只需进行一次
  • 尝试清理库并减少引用/生命周期的杂乱,使其难以在实际项目中使用
  • 修复原始 Google 测试(固定 cmake 依赖项,--no-as-needed 构建,LD 链接)

关于

引用 Google 的 robots.txt 解析器和匹配器仓库中的 README

机器人排除协议(REP)是一种标准,允许网站所有者通过具有特定语法的简单文本文件来控制哪些 URL 可以被自动化客户端(即爬虫)访问。它是我们熟知的互联网的基本构建块之一,也是搜索引擎能够运行的原因。

由于过去 25 年中,REP 仅是一个事实上的标准,不同的实现者对 robots.txt 的解析略有不同,导致混淆。该项目旨在通过发布 Google 使用的解析器来解决这个问题。

该库略有修改(即一些内部头文件和等效符号),用于 Googlebot、Google 的爬虫的生产代码,根据网站管理员在 robots.txt 文件中提供的规则确定它可以访问哪些 URL。该库以开源形式发布,以帮助开发者构建更好地反映 Google 的 robots.txt 解析和匹配的工具。

Crate robotstxt 旨在将 Google 的 robots.txt 解析器和匹配器从 C++ 转换为 Rust。

测试

$ git clone https://github.com/Folyd/robotstxt
Cloning into 'robotstxt'...
$ cd robotstxt/tests
...
$ mkdir c-build && cd c-build
...
$ LDFLAGS="-Wl,--no-as-needed" cmake ..
...
$ make
...
$ make test
Running tests...
Test project ~/robotstxt/tests/c-build
    Start 1: robots-test
1/1 Test #1: robots-test ......................   Passed    0.33 sec

许可证

robotstxt 解析器和匹配器 Rust 库根据 Apache 许可证的条款进行许可。有关更多信息,请参阅 LICENSE

无运行时依赖项