#http-framework #框架 #http #tokio #async #web #http-response

scrappy_do

一个基于 Rust 的并发异步网页爬虫框架

2 个不稳定版本

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

#27 in #http-framework

自定义许可

33KB
511

scrappy_do

Build Status Documentation Current Crates.io Version

这是一个针对 Rust 的并发异步网页爬虫框架。

目标

  • 友好的、简单的用户界面
  • 速度
  • unsafe 代码
  • 并发和异步处理

关于

scrappy_do 是围绕动态链接 HTTP 响应处理器构建的。调用者定义处理器、被爬取的项目以及处理器间传递的上下文,告诉蜘蛛从哪里开始,蜘蛛负责调度处理器并将项目返回给调用者。调用者需要大量解析 HTTP 响应,但包含了一些我认为有用的实用工具。

此包当前需要使用 Rust 夜间通道编译。

示例包含在仓库 此处

关键结构

库定义的结构

回调

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

不确定的

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

提供的宏

#[handle(item=I)]

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

wrap!(foo)

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

调用者定义的结构体

Item

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

上下文

这是一个可选的结构体,它允许处理程序传递元数据以实现动态行为。其内容由调用者定义。它应仅包含无法直接从 Response 中推断/难以推断的信息。

依赖项

~9–20MB
~311K SLoC