Python--Scrapy框架介绍

Scrapy框架概述

  图表展现了Scrapy的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示)。 下面对每个组件都做了简单介绍,并给出了详细内容的链接。数据流如下所描述。

 

Scrapy architecture

Scrapy Engine

引擎负责与其他模块进行通信,控制数据流在系统所有组件上的流动。

调度器(Scheduler)

用来接收引擎发送过来的request,并压入队列中,并在引擎再次请求的时候返回一个URL。我们可以把它想象成一个URL优先队列,由它来进行URL的去重,并决定下一个要抓取的URL是什么,随后返回给引擎,再由引擎将request传送给下载器。

下载器(Downloader)

下载器负责从网络上获取页面数据并返回response给引擎,随后由引擎传送给Spider。

Spiders

Spider负责分析response,提取item实体,并返回给引擎,随后由引擎传送给Item Pipeline。也可以从中提取出URL返回给Scheduler,让Scrapy继续抓取下一个页面。

Item Pipeline

Item Pipeline负责处理被spider提取出来的item。主要功能有持久化实体(传入数据库)、验证实体有效性、清除不需要的信息。

下载器中间件(Downloader middlewares)

下载器中间件负责处理Scrapy引擎与下载器之间的请求及响应。通过插入自定义代码来扩展Scrapy功能。如:增加http头信息、代理信息来隐藏自己等。

Spider中间件(Spider middlewares)

处理spider的输入(response)和输出(items及requests)。 

事件驱动网络(Event-driven networking)

Scrapy基于事件驱动网络框架Twisted编写。因此,Scrapy基于并发性考虑由非阻塞(即异步)的实现。

 

 

数据流(Data flow)

Scrapy中的数据流由执行引擎控制,其过程如下:

  • 引擎打开一个网站(open a domain),找到处理该网站的Spider并向该Spider请求第一个要爬取的URL。
  • 引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。
  • 引擎向调度器请求下一个要爬取的URL。
  • 调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。
  • 一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。
  • 引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。
  • Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。
  • 引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。
  • (从第二步)重复直到调度器中没有更多地request,引擎关闭该网站。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值