资讯专栏INFORMATION COLUMN

Scrapy的架构初探

刘明 / 1440人阅读

摘要:引言本文简单讲解一下的架构。没错,开源的通用提取器就是要集成到架构中,最看重的是的事件驱动的可扩展的架构。架构图就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。

1. 引言

本文简单讲解一下Scrapy的架构。没错,GooSeeker开源的通用提取器gsExtractor就是要集成到Scrapy架构中,最看重的是Scrapy的事件驱动的可扩展的架构。除了Scrapy,这一批研究对象还包括ScrapingHub,Import.io等,把先进的思路、技术引进来。

请注意,本文不想复述原文内容,而是为了开源Python爬虫的发展方向找参照,而且以9年来开发网络爬虫经验作为对标,从而本文含有不少笔者主观评述,如果想读Scrapy官方原文,请点击Scrapy官网的Architecture。

2. Scrapy架构图


Spiders就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。使用Scrapy创建一个爬虫工程的时候,就会生成一个Spider架子,只需往里面填写代码,按照它的运行模式填写,就能融入Scrapy整体的数据流中。GooSeeker开源网络爬虫的目标是节省下程序员一半以上的时间,关键就是提高Spider的定义和测试速度,解决方案参看《1分钟快速生成网页内容提取器》,让整个Scrapy爬虫系统实现快速定制的目标。

3. Scrapy的数据流(Data Flow)

Scrapy中的数据流由执行引擎控制,下面的原文摘自Scrapy官网,我根据猜测做了点评,为进一步开发GooSeeker开源爬虫指示方向:

The Engine gets the first URLs to crawl from the Spider and schedules
them in the Scheduler, as Requests.

URL谁来准备呢?看样子是Spider自己来准备,那么可以猜测Scrapy架构部分(不包括Spider)主要做事件调度,不管网址的存储。看起来类似GooSeeker会员中心的爬虫罗盘,为目标网站准备一批网址,放在罗盘中准备执行爬虫调度操作。所以,这个开源项目的下一个目标是把URL的管理放在一个集中的调度库里面

The Engine asks the Scheduler for the next URLs to crawl.

看到这里其实挺难理解的,要看一些其他文档才能理解透。接第1点,引擎从Spider中把网址拿到以后,封装成一个Request,交给了事件循环,会被Scheduler收来做调度管理的,暂且理解成对Request做排队。引擎现在就找Scheduler要接下来要下载的网页地址

The Scheduler returns the next URLs to crawl to the Engine and the
Engine sends them to the Downloader, passing through the Downloader
Middleware (request direction).

从调度器申请任务,把申请到的任务交给下载器,在下载器和引擎之间有个下载器中间件,这是作为一个开发框架的必备亮点,开发者可以在这里进行一些定制化扩展

Once the page finishes downloading the Downloader generates a Response
(with that page) and sends it to the Engine, passing through the
Downloader Middleware (response direction).

下载完成了,产生一个Response,通过下载器中间件交给引擎。注意,Response和前面的Request的首字母都是大写,虽然我还没有看其它Scrapy文档,但是我猜测这是Scrapy框架内部的事件对象,也可以推测出是一个异步的事件驱动的引擎,对于高性能、低开销引擎来说,这是必须的

The Engine receives the Response from the Downloader and sends it to
the Spider for processing, passing through the Spider Middleware
(input direction).

再次出现一个中间件,给开发者足够的发挥空间

The Spider processes the Response and returns scraped items and new
Requests (to follow) to the Engine.

每个Spider顺序抓取一个个网页,完成一个就构造另一个Request事件,开始另一个网页的抓取

The Engine passes scraped items and new Requests returned by a spider
through Spider Middleware (output direction), and then sends processed
items to Item Pipelines and processed Requests to the Scheduler.

引擎作事件分发

The process repeats (from step 1) until there are no more requests
from the Scheduler.

持续不断地运行

4. 接下来的工作

接下来,我们将进一步研读Scrapy的文档,实现GooSeeker开源Python爬虫与Scrapy的集成

5. 文档修改历史

2016-06-11:V1.0,首次发布

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45472.html

相关文章

  • Scrapy入门程序点评

    摘要:本文大部分内容摘抄自官网的,看到巧妙之处则加了点评。,接下来的工作至此,框架已经明确选定了,接下来,我们将进一步研读的文档,研究怎样把的封装成需要的。,文档修改历史,首次发布 showImg(https://segmentfault.com/img/bVx6ZU); 1,引言 在《Scrapy的架构初探》一文,我基于爬虫开发的经验对Scrapy官网文章作了点评和解读,事件驱动的异步处理...

    baiy 评论0 收藏0
  • Scrapy:python3下第一次运行测试

    摘要:,引言的架构初探一文讲解了的架构,本文就实际来安装运行一下爬虫。第一次运行的测试成功,接下来的工作接下来,我们将使用来实现网络爬虫,省掉对每个人工去生成和测试的工作量。,文档修改历史,首次发布 1,引言 《Scrapy的架构初探》一文讲解了Scrapy的架构,本文就实际来安装运行一下Scrapy爬虫。本文以官网的tutorial作为例子,完整的代码可以在github上下载。 2,运行环...

    dack 评论0 收藏0
  • ScrapySpider更通用

    摘要:而分配任务的是会员中心的爬虫罗盘,实现集中管理分布执行。开源即时网络爬虫项目同样也要尽量实现通用化。网址和提取规则本来应该硬编码到中的,现在隔离出来,由会员中心进行管理,那么就很容易做通用了。 showImg(https://segmentfault.com/img/bVyEnS); 1,引言 《Scrapy的架构初探》一文所讲的Spider是整个架构中最定制化的一个部件,Spider...

    MartinDai 评论0 收藏0
  • Python爬虫之Scrapy学习(基础篇)

    摘要:下载器下载器负责获取页面数据并提供给引擎,而后提供给。下载器中间件下载器中间件是在引擎及下载器之间的特定钩子,处理传递给引擎的。一旦页面下载完毕,下载器生成一个该页面的,并将其通过下载中间件返回方向发送给引擎。 作者:xiaoyu微信公众号:Python数据科学知乎:Python数据分析师 在爬虫的路上,学习scrapy是一个必不可少的环节。也许有好多朋友此时此刻也正在接触并学习sc...

    pkhope 评论0 收藏0
  • scrapy-redis分布式爬虫框架详解

    摘要:分布式爬虫框架详解随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。下载器中间件位于引擎和下载器之间的框架,主要是处理引擎与下载器之间的请求及响应。 scrapy-redis分布式爬虫框架详解 随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。由于互联网是开放的,每个人都可以在网络上...

    myeveryheart 评论0 收藏0

发表评论

0条评论

刘明

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<