1 个不稳定版本

0.1.16 2022 年 8 月 25 日
0.1.15 2022 年 8 月 24 日

#10#crawl

MIT/Apache 许可协议

21KB
447 行(不含注释)

gar-crawl

具有简洁构建器的高级 HTML 捕获器。

本库的目标是使用最少的模板代码完成爬取和抓取任务。提供了默认的传播器,或者你可以创建自己的传播器,并且你可以在构建爬取器之前修改使用的 Reqwest 客户端。

示例

使用默认选项的基本用法(爬取深度:2,工作线程:40,重访:否)

Crawler::builder()
    .add_default_propagators()                         // crawl to href and src links
    .add_handler("*[href]", |args| {                   // add handler
        if let Some(href) = args.element.unwrap().value().attr("href") {
            println!("{href}");
        }
    })
    .build()?                                          // construct crawler
    .crawl("https://example.org")                      // begin crawl
    .await?;

使用更多功能的示例

Crawler::builder()
    .add_default_propagators()                         // crawl to href and src links
    .revisit(true)                                     // default false
    .whitelist("https://example.org")                  // stay on this site
    .user_agent("Mozilla/5.0 (X11; Linux x86_64)...")  // set user agent
    .proxy("127.0.0.1:8080", "/path/to/cacert.der")?   // set up https proxy
    .add_handler("*[href]", |args| {                   // add handler
        if let Some(href) = args.element.unwrap().value().attr("href") {
            println!("{href}");
        }
    })
    .on_page(|args| {
        // do stuff with page
    })
    .depth(3)                                          // default 2
    .workers(100)                                      // default 40
    .timeout(5, 0)                                     // timeout requests after 5 seconds
    .build()?                                          // construct crawler
    .crawl("https://example.org")                      // begin crawl
    .await?;

查看 examples/gar-crawl-cli/ 以获取更多示例

依赖项

~9–24MB
~342K SLoC