#url #crawler #web-scraping #scraping #endpoint #web #html-content

stream_crawler

一个用于抓取网页、提取 URL 和端点的 crate

2 个版本

0.1.1 2024 年 7 月 13 日
0.1.0 2024 年 7 月 6 日

网页开发 中排名第 1041

Download history 108/week @ 2024-07-02 125/week @ 2024-07-09 8/week @ 2024-07-16 1/week @ 2024-07-23

每月下载 242

MIT 许可证

14KB
172 行代码(不包括注释)

Stream crawler

stream-scraper 是一个 Rust crate,它提供了一个异步网页爬虫工具。它处理 URL,提取内容和孩子 URL,并处理失败的请求的重试尝试。它使用 tokio 运行时进行异步操作,并使用 reqwest 库进行 HTTP 请求。

功能

  • 使用 tokio 进行异步爬取
  • 从 HTML 中的 <a> 标签中提取 URL
  • 重试失败请求,直到达到指定的尝试次数
  • 使用信号量限制并发请求数量

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
stream_crawler = "0.1.0"
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.11", features = ["json"] }
scraper = "0.12"

用法

use stream_crawler::scrape;
use tokio_stream::StreamExt;

#[tokio::main]
async fn main() {
    let urls = vec![
        String::from("https://www.google.com"),
        String::from("https://www.twitter.com"),
    ];

    let mut result_stream = scrape(urls, 3, 5, 10).await;

    while let Some(data) = result_stream.next().await {
        println!("Processed URL: {:?}", data);
    }
}

功能

  1. scrape 函数 :
  • 接受一个 URL 向量、重试尝试限制和最大并发进程数。
  • 返回一个 ProcessedUrl 结构的流。
  1. ProcessedUrl 结构 :
  • 包含原始 URL、父 URL(如果有)、页面 HTML 内容和从 <a> 标签中提取的孩子 URL 列表。

示例

此示例演示了如何使用 scrape 函数处理 URL 列表。

use stream_crawler::scrape;
use tokio_stream::StreamExt;

#[tokio::main]
async fn main() {
    let urls = vec![
        String::from("https://www.google.com"),
        String::from("https://www.twitter.com"),
    ];

    let mut result_stream = scrape(urls, 3, 5, 10).await;

    while let Some(data) = result_stream.next().await {
        println!("Processed URL: {:?}", data);
    }
}

文档

请参考内联文档以获取详细用法和示例。

ProcessedUrl

#[derive(Debug, PartialEq)]
pub struct ProcessedUrl {
    pub parent: Option<String>,
    pub url: String,
    pub content: String,
    pub children: Vec<String>,
}

贡献

欢迎贡献!请打开一个问题或提交一个 pull 请求。

许可证

此项目采用 MIT 许可证。

README.md 为 crate 提供了概述,包括其功能、安装说明和用法示例。您可以根据特定需求进一步自定义它。

依赖项

~9–20MB
~298K SLoC