6 个版本

0.2.0 2022 年 5 月 4 日
0.1.31 2022 年 1 月 7 日
0.1.4 2022 年 3 月 18 日

#driven 中排名 #6

MIT 许可证

34KB
580 行 代码

waxy

为 Rust 开发的爬虫。注意:由于对 README 的更改需要另一个 cargo publish,因此请使用 GitHub 获取最新文档。

这是一个正在进行中的项目。

"presser" 是爬虫。爬虫正在构建以生成或 "press" 不同的文档,如 "HtmlRecord" / "XMLRecord" 等。通用文档格式。HTMLPresser 压缩 HtmlRecords

特定记录将实现解析自身的方法。

这是一个缓慢的爬取过程,并且是盲目的。任何人都不会希望爬虫无法爬取。

您现在可以

  • 爬取任何网站,而不用担心无法爬取。
  • 您现在可以

使用爬虫进行数据收集,而不用担心无法访问。

您现在可以

轻松地处理大量数据,而不用担心性能问题。

您现在可以

  1. 根据您的需求自定义爬虫的功能。
  2. 您现在可以
  3. 轻松地与其他工具集成。

您现在可以

使用该爬虫进行高效的数据分析和挖掘。

03/18/22

  • 您现在可以
  • 轻松地处理复杂的数据结构。
  • 您现在可以

根据您的需求进行定制。

您现在可以

轻松地与其他工具集成。

[dependencies]
waxy = "0.2.0"
tokio = { version = "1", features = ["full"] }
use waxy::pressers::HtmlPresser;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    

    //Wax worker

    /*
    
    create a single record from url

    */
    match HtmlPresser::press_record("https://example.com").await{
        Ok(res)=>{
            println!("{:?}", res);
        },
        Err(..)=>{
            println!("went bad")
        }

    }

    println!();
    println!("----------------------");
    println!();

    /*
    
    crawl a vector or urls for a vector of documents

    */

    match HtmlPresser::press_records(vec!["https://example.com"]).await{
        Ok(res)=>{
            println!("{:?}", res.len());
        },
        Err(..)=>{
            println!("went bad")
        }

    }

    println!();
    println!("----------------------");
    println!();

   /*
    
    crawl a domain, the "1" is the limit of pages you are willing to crawl

    */

    match HtmlPresser::press_records_blind("https://funnyjunk.com",1).await{
        Ok(res)=>{
            println!("{:?}", res.len());
        },
        Err(..)=>{
            println!("went bad")
        }

    }

    /*
    blind crawl a domain for links, 
    inputs:
    url to site
    link limit, limit of the number of links willing to be grabbed
    page limit, limit of the number of pages to crawl for links
    */

    match HtmlPresser::press_urls("https://example.com",1,1).await{
        Ok(res)=>{
            println!("{:?}", res.len());
        },
        Err(..)=>{
            println!("went bad")
        }

    }

    println!();
    println!("----------------------");
    println!();

    /*
    blind crawl a domain for links that match a pattern, 
    inputs:
    url to site
    pattern the  url should match
    link limit, limit of the number of links willing to be grabbed
    page limit, limit of the number of pages to crawl for links
    */
    match HtmlPresser::press_curated_urls("https://example.com", ".", 1,1).await{
        Ok(res)=>{
            println!("{:?}", res);
        },
        Err(..)=>{
            println!("went bad")
        }

    }

    println!();
    println!("----------------------");
    println!();

        /*
    blind crawl a domain for document whose urls that match a pattern, 
    inputs:
    url to site
    pattern the  url should match
    page limit, limit of the number of pages to crawl for links
    */
    match HtmlPresser::press_curated_records("https://example.com", ".", 1).await{
        Ok(res)=>{
            println!("{:?}", res);
        },
        Err(..)=>{
            println!("went bad")
        }

    }

    println!();
    println!("----------------------");
    println!();
    
    //get doc
    let record = HtmlPresser::press_record("https://funnyjunk.com").await.unwrap();

    //get anchors
    println!("{:?}",record.anchors().unwrap());
    println!();
    println!("{:?}",record.anchors_curate(".").unwrap());
    println!();
    println!("{:?}",record.domain_anchors().unwrap());
    println!();
    //call headers
    println!("{:?}",record.headers);
    println!();
    //call meta data
    println!("{:?}",record.html_meta().unwrap());
    println!();
    //tag text and html
    println!("{:?}",record.tag_html("title").unwrap());
    println!();
    println!("{:?}",record.tag_text("title").unwrap());
    println!();
    println!();
    //get all emails contained in the string.
    if let Some(emails) = record.get_emails() {
        println!("{:?}",emails);
    }else{
        println!("no emaila")
    }

    Ok(())


}


您现在可以

根据您的需求进行定制。
您现在可以