2个不稳定版本

0.2.0 2021年11月19日
0.1.0 2021年3月16日

#15 in #caller


scrappy_do中使用

自定义许可证

8KB
180

scrappy_do

Build Status Documentation Current Crates.io Version

这是一个用于Rust的并发异步网页抓取框架。

目标

  • 友好的简单用户界面
  • 速度
  • 没有不安全代码
  • 并发和异步处理

关于

scrappy_do围绕动态链接HTTP响应处理器的想法构建。调用者定义处理器、抓取的项目以及处理器之间传递的上下文,告诉蜘蛛从哪里开始,蜘蛛负责安排处理器并返回项目给调用者。调用者主要需要弄清楚他们想要如何解析HTTP响应,但包含了一些我发现通常很有用的实用工具。

这个crate目前需要使用nightly Rust通道来编译。

示例包含在这里的仓库中。

关键构造

库定义的结构

回调

这个结构定义了一个需要在未来的某个时刻执行的回调。它接受一个处理器、由处理器摄入的请求以及新的上下文状态作为参数。应该使用包含的Client生成请求,以确保任何相关的状态(如cookies和headers)可以正确应用于该请求。

不确定

一个 Indeterminate 是一个枚举,它表示一个 Item 或一个 Callback 的可能性。它有两个分支,分别是 Indeterminate::CallbackIndeterminate::Item。为了方便,标准转换已经被提供,允许通过调用 into() 方法将任何结构体转换为 Indeterminate::Item。如果你对一个 Callback 调用 into(),它将被转换成 Indeterminate::Callbackscrappy-do 通过使用 handle 宏自动为调用者应用这些转换,使得调用者可以基本上忽略此类型,但它已被包含在文档中,以帮助解决编译错误。

提供的宏

#[handle(item=I)]

此宏实际上只是在异步流中包装内部函数逻辑,并设置适当的返回类型。它接受一个参数,即 item,这是被抓取的类型。

wrap!(foo)

此宏只是将一个函数包装在具有一些附加元数据的具体 Handler 结构体中。

调用者定义的结构体

Item

此结构体是调用者想要从响应链中抓取的结构体。它必须由调用者定义。

上下文

这是一个可选的结构体,它允许处理程序传递元数据以进行动态行为。其内容由调用者定义。它应该只包含无法直接从 Response 推断或推断成本较高的信息。

依赖项

~1.5MB
~35K SLoC