博客
关于我
pyspider爬虫学习-文档翻译-Architecture.md
阅读量:798 次
发布时间:2023-03-05

本文共 1716 字,大约阅读时间需要 5 分钟。

过去两年,我在一家垂直搜索引擎工作时,面临着多项爬行需求。我们需要收集100-200个网站,这些网站可能是在线的,也可能是离线的,并且可能随时更换模板。为了有效地监控这些网站的变化,并为每个网站编写相应的脚本或模板,我们需要一个强大的监控工具。同时,我们需要在网站更新五分钟内收集到数据。传统的方法是通过频繁检查索引页面,并使用“最后更新时间”或“最后回复时间”来确定哪些页面被修改过。此外,我们还需要在X天后重新检查页面,以防止遗漏。为了应对WWW不断变化的事实,我们需要一个永不停止的系统。另外,我们有一些来自合作伙伴的API,这些API可能需要支持POST、代理、签名请求等操作。全局参数的限制让我们无法完全控制这些组件,因此我们希望通过脚本来完全控制爬行过程。

pyspider的体系结构设计初衷是为了满足以上需求。它通过消息队列连接各个组件,每个组件都可以独立运行并替换。当处理器出现性能瓶颈时,可以部署多个处理器实例,充分利用多个CPU,甚至部署到多台机器上。这种架构使pyspider成为一个非常高效的工具。

### 组件概述

Scheduler调度器接收来自处理器的新任务,并决定任务是否需要重新爬行。它会根据优先级排序任务,并将任务分配给具有流量控制功能的Fetcher。Scheduler还负责处理定期任务、遗失任务和失败任务,并能够通过API`self.crawl`来设定相关参数。目前的实现中,只允许使用一个调度器。

Fether提取者负责抓取网页内容,并将结果发送给处理器。Fetcher支持多种抓取方式,包括通过URL和JavaScript动态抓取(支持PhantomJS)。通过API,可以控制抓取的方法、头部信息、Cookie、代理服务器和ETag等参数。

PhantomJS Fetcher作为一个代理工作,连接到通用的Fetcher,通过JavaScript渲染页面,并将处理后的HTML内容返回给Fetcher。其架构如下:

scheduler -> fetcher -> processor | phantomjs | internet

Processor处理器运行用户编写的脚本,用于解析和提取信息。脚本可以在任何环境下运行,我们提供了如PyQuery等工具帮助用户提取信息和链接。Processor负责捕获异常和日志,并将状态信息(包括任务跟踪)和新任务发送给Scheduler。处理完成的结果则发送给Result Worker。

Result Worker结果工作者(可选)接收Processor的处理结果。pyspider内置了一个结果工作者,将结果保存到`resultdb`中。如果需要,可以通过自定义结果工作者来满足特定需求。

WebUI是一个强大的web前端,集成了多种功能,包括脚本编辑器、调试器、项目管理器、任务监控器和结果查看器等。通过WebUI,可以就像pyspider一样一步步调试脚本,启动或停止项目,实时监控任务状态和结果输出。

### 数据流

pyspider的数据流主要包括以下几个步骤:

  • 当用户通过WebUI点击“Run”按钮时,脚本中的on_start回调函数被提交给Scheduler作为新任务。
  • Scheduler将on_start任务与数据URI一起提交给Fetcher。
  • Fetcher根据任务请求发起抓取,并将结果返回给Processor。
  • Processor执行on_start方法,生成新的爬取URL,并将处理完成的状态和新任务通过消息队列发送给Scheduler。
  • Processor将处理结果发送给Result Worker。
  • Scheduler接收新任务,根据数据库中的记录确定任务是否为新任务或需要重新爬取。如果是新任务或需要重新爬取的任务,Scheduler会将其加入任务队列,并按照优先级进行排序。
  • 这个过程将持续进行,直到WWW停止更新为止。
  • 通过这种架构,pyspider能够在WWW不断变化的情况下,持续、快速地抓取和处理数据。它支持定期任务,确保最新数据的获取,同时也能处理遗失和失败的任务,最大限度地减少数据获取的延迟。

    转载地址:http://ecafk.baihongyu.com/

    你可能感兴趣的文章
    PyTorch-Tutorials【pytorch官方教程中英文详解】- 4 Transforms
    查看>>
    Proxy server 緩存 jsp html
    查看>>
    Proxy 和 Reflect 结合实现代理和拦截( 代码示例 )
    查看>>
    PyTorch-Tutorials【pytorch官方教程中英文详解】- 3 Datasets&DataLoaders
    查看>>
    ProxySQL+MHA搭建MySQL读写分离高可用集群
    查看>>
    Proxy源代码分析--谈谈如何学习linux网络编程
    查看>>
    pr录制自己声音杂音很重
    查看>>
    PyTorch-Tutorials【pytorch官方教程中英文详解】- 2 Tensors
    查看>>
    ps ww
    查看>>
    PS —— 制作喷漆人像
    查看>>
    PS —— 制作证件照
    查看>>
    PS —— 精修图像
    查看>>
    PS 图像调整算法——色调分离
    查看>>
    ps 图层混合模式
    查看>>
    ps2025下载安装教程(附安装包)ps2025超详细安装教程
    查看>>
    PSGSuite 项目推荐
    查看>>
    PSR PHP业界规范
    查看>>
    psv黑商店pkgj最新版下载_黑科技p图app下载-黑科技p图最新版下载v1.0.0
    查看>>
    ps命令详解
    查看>>
    PyTorch-Tutorials【pytorch官方教程中英文详解】- 1 Quickstart
    查看>>