一篇文章带你理解Scrapy框架

时间:2024-03-15 16:50:34

首先,什么是Scrapy框架?
Scrapy是一个快速、高层次、轻量级的屏幕抓取和web抓取的python爬虫框架

那什么是爬虫框架呢?
爬虫框架是实现爬虫功能的一个软件结构和功能组件集合;爬虫框架是一个半成品, 能够帮助用户实现专业网络爬虫。

Scrapy框架图如下:
一篇文章带你理解Scrapy框架
先来看看Scrapy的5+2结构(五个主体+两个中间件):

  1. Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

  2. Scheduler(调度器): 负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

  3. Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

  4. Spiders(爬虫):负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

  5. Item Pipelines(管道):负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

  6. Downloader Middlewares(下载中间件):实施Engine、Schedule和Downloader之间进行用户可配置的控制。用户可通过对中间件的编写修改、丢弃、新增请求或响应(对Requests、Response的修改)

  7. Spider Middlewares(Spider中间件):对请求和爬取项的再处理。用户可以通过对Spider Middlewares的编写修改、丢弃、新增请求或爬取项

以上,可以总结为下表:

部件名称 作用 是否已实现
Scrapy Engine 总指挥:负责数据和信号的在不同模块间的传递 Scrapy已经实现
Scheduler 一个队列,存放引擎发过来的request请求 Scrapy已经实现
Downloader 下载被引擎发过来的requests请求,并返回给引擎 Scrapy已经实现
Spiders 处理引擎发来来的response,提取数据,提取url,并交给引擎 需自己编写
Item Pipelines 处理引擎传过来的数据,比如存储 需自己编写
Downloader Middlewares 可以自定义的下载扩展,比如设置代理 Scrapy已经实现
Spider Middlewares 可以自定义requests请求和进行response过滤 Scrapy已经实现

再来看看三条主要的数据流路径:

  • 路径一:① —➤ ②

    Engine从Spiders获得爬取用户的请求(Requests)(请求可理解为一个URL),Scheduler模块负责对爬取请求进行调度

  • 路径二:③ —➤ ④ —➤ ⑤ —➤ ⑥
    Engine从Scheduler获得下一个要爬取的网络请求(一个真实的,要到网络上爬取的请求);
    Engine将请求通过中间件发送给Downloader模块;后者获得请求后,真实连接互联网并爬取相关网页;
    爬取到网页后,Downloader将内容形成一个Response对象,再将其通过中间件、Engine发送给Spiders

  • 路径三:⑦ —➤ ⑧
    Spiders处理从Downloader获得的响应,处理后产生两个数据类型:爬取项(Scrapy ITEM)、新的爬取请求(Requests);
    Spiders生成两个数据类型后,将它们发送给Engine模块,后者收到后,将ITEM发送给Item Pipelines,将Requests发送给Scheduler进行调度。

    注:在编写Spiders模块时,若网页中有其他链接是我们感兴趣的,可在Spiders中增加相关功能对新链接发起再次爬取。

综上,我们可以知道,Spiders向整个框架提供要访问的URL链接,解析从网络上获得的页面内容,是Scrapy框架的“入口”;Item Pipelines负责对提供的信息进行后处理,是Scrapy框架的“出口”。

说了这么多,那Scrapy框架有什么优点呢?

  1. 更容易构建大规模抓取项目;
  2. 采取了可读性更强的 xpath 代替正则
  3. 异步处理请求的速度快
  4. 可同时在不同的 url 上爬行
  5. 可编写 middleware,方便写一些统一的过滤器
  6. 使用自动调节机制自动调整爬取速度
  7. 可通过管道的方式存入数据库