2个不稳定版本
0.2.0 | 2021年11月19日 |
---|---|
0.1.0 | 2021年3月16日 |
#15 in #caller
在scrappy_do中使用
8KB
180 行
scrappy_do
这是一个用于Rust的并发异步网页抓取框架。
目标
- 友好的简单用户界面
- 速度
- 没有
不安全
代码 - 并发和异步处理
关于
scrappy_do
围绕动态链接HTTP响应处理器的想法构建。调用者定义处理器、抓取的项目以及处理器之间传递的上下文,告诉蜘蛛从哪里开始,蜘蛛负责安排处理器并返回项目给调用者。调用者主要需要弄清楚他们想要如何解析HTTP响应,但包含了一些我发现通常很有用的实用工具。
这个crate目前需要使用nightly Rust通道来编译。
示例包含在这里的仓库中。
关键构造
库定义的结构
回调
这个结构定义了一个需要在未来的某个时刻执行的回调。它接受一个处理器、由处理器摄入的请求以及新的上下文状态作为参数。应该使用包含的Client
生成请求,以确保任何相关的状态(如cookies和headers)可以正确应用于该请求。
不确定
一个 Indeterminate
是一个枚举,它表示一个 Item
或一个 Callback
的可能性。它有两个分支,分别是 Indeterminate::Callback
和 Indeterminate::Item
。为了方便,标准转换已经被提供,允许通过调用 into()
方法将任何结构体转换为 Indeterminate::Item
。如果你对一个 Callback
调用 into()
,它将被转换成 Indeterminate::Callback
。 scrappy-do
通过使用 handle
宏自动为调用者应用这些转换,使得调用者可以基本上忽略此类型,但它已被包含在文档中,以帮助解决编译错误。
提供的宏
#[handle(item=I)]
此宏实际上只是在异步流中包装内部函数逻辑,并设置适当的返回类型。它接受一个参数,即 item
,这是被抓取的类型。
wrap!(foo)
此宏只是将一个函数包装在具有一些附加元数据的具体 Handler 结构体中。
调用者定义的结构体
Item
此结构体是调用者想要从响应链中抓取的结构体。它必须由调用者定义。
上下文
这是一个可选的结构体,它允许处理程序传递元数据以进行动态行为。其内容由调用者定义。它应该只包含无法直接从 Response
推断或推断成本较高的信息。
依赖项
~1.5MB
~35K SLoC