2 个不稳定版本
0.2.1 | 2021年11月19日 |
---|---|
0.2.0 |
|
0.1.0 | 2021年3月16日 |
#27 in #http-framework
33KB
511 行
scrappy_do
这是一个针对 Rust 的并发异步网页爬虫框架。
目标
- 友好的、简单的用户界面
- 速度
- 无
unsafe
代码 - 并发和异步处理
关于
scrappy_do
是围绕动态链接 HTTP 响应处理器构建的。调用者定义处理器、被爬取的项目以及处理器间传递的上下文,告诉蜘蛛从哪里开始,蜘蛛负责调度处理器并将项目返回给调用者。调用者需要大量解析 HTTP 响应,但包含了一些我认为有用的实用工具。
此包当前需要使用 Rust 夜间通道编译。
示例包含在仓库 此处。
关键结构
库定义的结构
回调
此结构定义了一个需要在未来的某个时刻执行的回调。它接受处理器、生成响应的请求以及新的上下文状态作为参数。应该注意使用包含的 Client
生成请求,以确保任何相关的状态(如cookie和头部信息)可以正确应用于该请求。
不确定的
一个 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
中推断/难以推断的信息。
依赖项
~9–20MB
~311K SLoC