6个版本
0.1.51 | 2022年10月16日 |
---|---|
0.1.50 | 2022年4月6日 |
0.1.4 | 2022年3月21日 |
395 在 #store 中排名
每月下载 23 次
用于 requests2
18KB
351 行
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选择器作为第一个参数。
更多详细信息请参阅测试文件夹
依赖项
~1.5MB
~36K SLoC