17 个版本

0.1.62 2022 年 10 月 18 日
0.1.61 2022 年 10 月 16 日
0.1.53 2022 年 4 月 9 日
0.1.43 2022 年 3 月 23 日

#791数据库接口

Download history 7/week @ 2024-03-30

54 每月下载量

自定义许可

21KB
423

Requests2

A Rust 库,该库可以帮助您快速请求、解析和存储数据 (Python BS4 库)。

  • 每个新的请求初始化一个缓存实例,将解析的数据存储在键值对中

  • 当你得到连接的实例时,你可以调用解析方法来以闭包的形式解析数据

  • 使用 dbnote 宏,将数据写入数据库表

  • config 文件中设置连接数据库字符串

  • find、find_all、select、select_all 方法支持 CSS 选择器来解析 DOM 文档

config
    postgres=<host=localhost user=your password=test dbname=postgres>
    sqlite=<dbname=sqlite_db>

自动将 sqlite_db 文件添加到项目目录,支持 sqlite

将数据存储到 csv 和 postgres 数据库,可以使用以下示例代码

// store example
use requests2::{
    dbfile::{self, DBfile},
    dbfile_derive::{dbnote, DBfile},
    *,
};

// change postgres to sqlite same run
#[derive(DBfile)]
#[dbnote(table_name = "test999", driver = "postgres" primary_key = "isbn")]
pub struct PP {
    pub isbn: String,
    pub price: f32,
}

fn main() {
    let pp = PP {
        isbn: String::from("test"),
        price: 0.1,
    };
    pp.create_table();
    pp.to_db();
}
// parse code
let data = Cache::new();
let client = Requests::new(&data);
let rq = client.connect("https://www.qq.com/", Headers::Default);

#[derive(DBfile, Debug)]
#[dbnote(table_name = "test_link", driver = "postgres", primary_key="href")]
struct Link<'a> {
    href: &'a str,
    link_name: String,
    title: &'a str,
}

rq.free_parse(|p| {
    let title = p.select("title").text();

    let links = p
        .select_all("li.nav-item a")
        .iter()
        .map(|x| Link {
            title: "",
            href: x.attr("href").unwrap_or_default(),
            link_name: x.text(),
        })
        .collect::<Vec<Link>>();


    // create a table
    links[0].create_table();

    for (idx, mut link) in links.into_iter().enumerate() {
        if idx == 0 {
            link.title = &title;
            link.write_csv_head();
        }
        link.to_csv("a");
        link.to_db();
    }
});

#[dbnote) 添加到结构体中,可以使用 write_csv_head()to_csv 将数据放入文件,表名作为文件名。使用 createa_table() 你可以在 postgres 中创建表,但必须将配置文件添加到项目中。使用 to_db() 将数据放入表中。

find() find_all() select() select_all() 方法统一使用 CSS 选择器作为第一个参数。

详见测试文件夹中的详细信息

依赖项

~16–29MB
~467K SLoC