高效率爬虫框架之pyspider

代码极光
• 阅读 3879

高效率爬虫框架之pyspider

为什么要使用爬虫框架

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

但是这样的架构和模块还是太简单,远远达不到一个框架的要求。如果我们将各个组件独立出来,定义成不同的模块,也就慢慢形成了一个框架。

有了框架之后,我们就不必关心爬虫的全部流程,异常处理、任务调度等都会集成在框架中。我们只需要关心爬虫的核心逻辑部分即可,如页面信息的提取,下一步请求的生成等。这样,不仅开发效率会提高很多,而且爬虫的健壮性也更强。

在项目实战过程中,我们往往会采用爬虫框架来实现抓取,这样可提升开发效率、节省开发时间。而 pyspider 就是一个非常优秀的爬从框架,它的操作便捷、功能强大、利用它我们可以快速方便地完成爬虫的开发。

pyspider 框架介绍

高效率爬虫框架之pyspider

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

其 GiHub 地址为:

https://github.com/binux/pysp...

官方文档地址:

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

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」,你懂得。

高效率爬虫框架之pyspider

点赞
收藏
评论区
推荐文章
Irene181 Irene181
4年前
3000字 “婴儿级” 爬虫图文教学 | 手把手教你用Python爬取 “实习网”!
1\.为"你"而写这篇文章,是专门为那些"刚学习"Python爬虫的朋友,而专门准备的文章。希望你看过这篇文章后,能够清晰的知道整个"爬虫流程"。从而能够"独立自主"的去完成,某个简单网站的数据爬取。好了,咱们就开始整个“爬虫教学”之旅吧!2\.页面分析①你要爬取的网站是什么?首先,我们应该清楚你要爬去的网站是什么?由于这里我们想要
分享如何使用java写个小爬虫
爬虫行业的兴起是大数据时代下必须的产物,大家学习阿爬虫肯定是为了爬取有价值的数据信息。关于爬虫的基础知识我们这里不进行阐述,今天我们就只是进行一个简单的爬虫实践。那首先我们就需要确定下我们的目标网站,这里我们就以一些房产信息的网站为例统计一些信息。关于爬虫中的一系列反爬问题我们也不在这里做深入的了解,都是学习爬虫的必备知识,最简单的就是在访问过程中我们肯定会
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Aimerl0 Aimerl0
4年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
九路 九路
4年前
一个爬虫的故事:这是人干的事儿?
本文转载自轩辕之风的文章,链接https://mp.weixin.qq.com/s/YygbUWpa2mbPZPuPNhdt2w爬虫原理我是一个爬虫,每天穿行于互联网之上,爬取我需要的一切。image.png(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/656d
python使用aiohttp通过设置代理爬取基金数据
说到python爬虫,我们就会想到它那强大的库,很多新手小白在选择框架的时候都会想到使用Scrapy,但是仅仅停留在会使用的阶段。在实际爬虫过程中遇到反爬机制是再常见不过的,今天为了增加对爬虫机制的理解,我们就通过手动实现多线程的爬虫过程,同时引入IP代理
Stella981 Stella981
3年前
Python爬取暴走漫画动态图
最近再之乎上看到比较好的Python爬虫教程,看过之后对爬虫有了大概的了解,随后自己写了个爬取暴走漫画(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbaozoumanhua.com%2Fcatalogs%2Fgif)动图的爬虫练练手,另外附上Python爬虫教程(https://w
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
如何利用日志记录与分析处理Python爬虫中的状态码超时问题
在编写Python爬虫的时候,经常会遇到状态码超时的问题。这个问题对于爬虫开发者来说是一个巨大的挑战,因为它会导致爬虫的效率降低,甚至无法正常工作。需要解决这个问题,我们可以利用日志记录与分析的方法来定位并处理状态码超时问题。首先,我们需要在爬虫代码中添加
代码极光
代码极光
Lv1
待到重阳日,还来就菊花。
文章
3
粉丝
0
获赞
0