Spider

crate version

Multithreaded web crawler/indexer written in Rust main repo.

Dependencies

On Linux

Example

This is a basic blocking example crawling a web page, add spider to your Cargo.toml:

toml [dependencies] spider = "1.14.1"

And then the code:

```rust,no_run extern crate spider;

use spider::website::Website; use spider::tokio;

[tokio::main]

async fn main() { let mut website: Website = Website::new("https://choosealicense.com"); website.crawl().await;

for page in website.get_pages() {
    println!("- {}", page.get_url());
}

} ```

You can use Configuration object to configure your crawler:

```rust // .. let mut website: Website = Website::new("https://choosealicense.com"); website.configuration.blacklisturl.push("https://choosealicense.com/licenses/".tostring()); website.configuration.respectrobotstxt = true; website.configuration.subdomains = true; website.configuration.delay = 2000; // Defaults to 250 ms website.configuration.useragent = "myapp/version".tostring(); // Defaults to spider/x.y.z, where x.y.z is the library version website.onlinkfind_callback = |s| { println!("link target: {}", s); s }; // Callback to run on each link find

website.crawl().await; ```

Regex Blacklisting

There is an optional "regex" crate that can be enabled:

toml [dependencies] spider = { version = "1.14.1", features = ["regex"] }

```rust,no_run extern crate spider;

use spider::website::Website; use spider::tokio;

[tokio::main]

async fn main() { let mut website: Website = Website::new("https://choosealicense.com"); website.configuration.blacklisturl.push("/licenses/".tostring()); website.crawl().await;

for page in website.get_pages() {
    println!("- {}", page.get_url());
}

} ```

Features

Currently we have three optional feature flags. Regex blacklisting and randomizing User-Agents.

toml [dependencies] spider = { version = "1.14.1", features = ["regex", "ua_generator"] }

Jemalloc performs better for concurrency and allows memory to release easier.

This changes the global allocator of the program so test accordingly to measure impact.

toml [dependencies] spider = { version = "1.14.1", features = ["jemalloc"] }

Blocking

If you need a blocking sync imp use a version prior to v1.12.0 .