高效率爬虫框架之 pyspider

阅读文本大概须要 5 分钟。python

为何要使用爬虫框架

在咱们日常的爬虫使用过程当中,只是简单的利用 requsets, xpath 等爬虫库,远远没法达到一个爬虫框架的要求。一个爬虫框架的雏形,应该包含调度器、队列、请求对象等。咱们平时写的爬虫程序,连最基本的框架都不具有。git

可是这样的架构和模块仍是太简单,远远达不到一个框架的要求。若是咱们将各个组件独立出来,定义成不一样的模块,也就慢慢造成了一个框架。github

有了框架以后,咱们就没必要关心爬虫的所有流程,异常处理、任务调度等都会集成在框架中。咱们只须要关心爬虫的核心逻辑部分便可,如页面信息的提取,下一步请求的生成等。这样,不只开发效率会提升不少,并且爬虫的健壮性也更强。
数据库

在项目实战过程当中,咱们每每会采用爬虫框架来实现抓取,这样可提高开发效率、节省开发时间。而 pyspider 就是一个很是优秀的爬从框架,它的操做便捷、功能强大、利用它咱们能够快速方便地完成爬虫的开发。后端

pyspider 框架介绍

pyspider 是由国人 binux 编写的强大的网络爬从系统,它带有强大的 WebUI、脚本编辑器、任务监控器、项目管理以及结果处理器,它支持多种数据库后端、多种消息队列、JavaScript 渲染页面的爬取。使用起来很是方便。网络

其 GiHub 地址为:架构

https://github.com/binux/pyspider框架

官方文档地址:编辑器

http://docs.pyspider.org/分布式

pyspider 基本功能

pyspider 的功能有以下几点:

  • 1 提供方便易用的 WebUI 系统,可视化地编写和调式爬虫

  • 2 提供爬取进度监控、爬取结果查看、爬虫项目管理等功能。

  • 3 支持多种后端数据库,如 MySQL、MongoDB、Reids、SQLite、Elasticsearch、PostgreSQL。

  • 4 支持多种消息队列、如 RabbitMQ、Beanstalk、Redis、Kombu。

  • 5 提供优先级控制、失败重试、定时抓取等功能。

  • 6 对接了 PhantomJS、能够抓取 JavaScript 渲染的页面。

  • 7 支持单机和分布式部署、支持 Docker 部署。

若是想要快速方便地实现一个页面的抓取,使用 pyspider 不失为一个好的选择。如快速抓取某个普通新闻网站的新闻内容。但若是应对反爬程度很强、超大规模的抓取、推荐使用 Scrapy、如抓取封 IP、封帐号、高频验证的网站的大规模数据采集。

pyspider 的架构

pyspider 的架构主要分为 Scheduler(调度器)、Fetcher(抓取器)、Processer(处理器)三个部分。整个爬取过程受到 Monitor(监控器)的监控,抓取的结果被 Result Worker(结果处理器)处理。

Scheduler 发起任务调度,Fetcher 负责抓取网页内容,Processer 负责解析网页内容,而后将新生成的 Request 发给 Scheduler 进行调度,将生成的提取结果输出保存。

pyspider 的任务执行流程的逻辑很清晰,具体过程以下所示:

  • 1 每一个 pysipder 的项目对应一个 Python 脚本,该脚本定义了一个 Handler 类,它有一个 on_start() 方法。爬取首先调用 on_start() 方法生成最初的抓取任务,而后发送给 Scheduler。

  • 2 Scheduler 将抓取任务分发给 Fetcher 进行抓取,Fetcher 执行并获得响应、随后将响应发送给 Processer。

  • 3 Processer 处理响应并提取出新的 URL 生成新的抓取任务,而后经过消息队列的方式通知 Scheduler 当前抓取任务执行状况,并将新生成的抓取任务发送给 Scheduler。若是生成了新的提取结果,则将其发送到结果队列等待 Result Worker 处理。

  • 4 Scheduler 接收到新的抓取任务,而后查询数据库,判断其若是是新的抓取任务或者是须要重试的任务就继续进行调度,而后将其发送回 Fetcher 进行抓取。

  • 5 不断重复以上工做、直到全部的任务都执行完毕,抓取结束。

  • 6 抓取结束后、程序会回调 on_finished() 方法,这里能够定义后处理过程。


今天带你们了解下 pyspider 的基本功能和架构,对 pysider 有个总体的认知。接下来会在出篇 pysipder 实战项目,带你更进一步了解 pysipder 的使用。


本文首发于公众号「痴海」,天天分享 python 干货,回复「1024」,你懂的。

相关文章
相关标签/搜索