Python爬虫教程之Scrapy 框架

一、Scrapy 框架

Scrapy 是⽤纯 Python 实现⼀个为了爬取⽹站数据、提取结构性数据⽽编写的应⽤框架,⽤途⾮常⼴泛。

框架的⼒量,⽤户只需要定制开发⼏个模块就可以轻松的实现⼀个爬⾍,⽤来抓取⽹⻚内容以及各种图⽚,⾮常之⽅便。

Scrapy 使⽤了 Twisted ['twɪstɪd] (其主要对⼿是 Tornado)异步⽹络框架来处理⽹络通讯,可以加快我们的下载速度,不⽤⾃⼰去实现异步框架,并且包含了各种中间件接⼝,可以灵活的完成各种需求。

Scrapy 架构图(绿线是数据流向):

Python爬虫教程之Scrapy 框架

  • Scrapy Engine(引擎) : 负责 Spider 、 ItemPipeline 、 Downloader 、 Scheduler
    中间的通讯, 信号、数据传递等。
  • Scheduler(调度器) : 它负责接受 引擎 发送过来的 Request 请求,并按照⼀定的⽅式进⾏整理排列,⼊队,当引擎需要时,交还给 引擎 。
  • Downloader(下载器) :负责下载 Scrapy Engine(引擎) 发送的所有Requests 请求,并将其获取到的Responses 交还给 ScrapyEngine(引 擎) ,由 引擎 交给 Spider 来处理。
  • Spider(爬⾍) :它负责处理所有 Responses,从中分析提取数据,获取Item 字段需要的数据,并将需要跟进的 URL 提交给引擎 ,再次进⼊ Scheduler(调度器)。
  • Item Pipeline(管道) :它负责处理 Spider 中获取到的 Item,并进⾏进⾏后期处理(详细分析、过滤、存储等)的地⽅。
  • Downloader Middlewares(下载中间件) :你可以当作是⼀个可以⾃定义扩展下载功能的组件。
  • Spider Middlewares(Spider 中间件) :你可以理解为是⼀个可以⾃定扩展和操作 引擎 和 Spider 中间 通信的功能组件(⽐如进⼊ Spider 的Responses;和从 Spider 出去的 Requests)

二、Scrapy 的运作流程

代码写好,程序开始运⾏…

  1. 引擎 :Hi! Spider , 你要处理哪⼀个⽹站?
  2. Spider :⽼⼤要我处理 xxxx.com。
  3. 引擎 :你把第⼀个需要处理的 URL 给我吧。
  4. Spider :给你,第⼀个 URL 是 xxxxxxx.com。
  5. 引擎 :Hi! 调度器 ,我这有 request 请求你帮我排序⼊队⼀下。
  6. 调度器 :好的,正在处理你等⼀下。
  7. 引擎 :Hi! 调度器 ,把你处理好的 request 请求给我。
  8. 调度器 :给你,这是我处理好的 request
  9. 引擎 :Hi!下载器,你按照⽼⼤的 下载中间件 的设置帮我下载⼀下这个 request 请求
  10. 下载器 :好的!给你,这是下载好的东⻄。(如果失败:sorry,这个request 下载失败了。然后 引擎 告诉 调度器 ,这个 request 下载失败了,你记录⼀下,我们待会⼉再下载)
  11. 引擎 :Hi! Spider ,这是下载好的东⻄,并且已经按照⽼⼤的 下载中 间 件 处理过了,你⾃⼰处理⼀***意!这⼉responses 默认是交给 defparse() 这个函数处理的)
  12. Spider :(处理完毕数据之后对于需要跟进的 URL),Hi! 引擎 , 我 这⾥有两个结果,这个是我需要跟进的 URL,还有这个是我获取到的 Item 数据。
  13. 引擎 :Hi ! 管道 我这⼉有个 item 你帮我处理⼀下! 调度器 !这是需 要跟进 URL 你帮我处理下。然后从第四步开始循环,直到获取完⽼⼤需要全部信息。
  14. 管道``调度器 :好的,现在就做!

注意!只有当 调度器 中不存在任何 request 了,整个程序才会停⽌,(也就是说,对于下载失败的 URL,Scrapy 也会重新下载。)

制作 Scrapy 爬⾍ ⼀共需要 4 步:

  • 新建项⽬ (scrapy startproject xxx):新建⼀个新的爬⾍项⽬
  • 明确⽬标 (编写 items.py):明确你想要抓取的⽬标 制作爬⾍
  • (spiders/xxspider.py):制作爬⾍开始爬取⽹⻚
  • 存储内容 (pipelines.py):设计管道存储爬取内容
    点击获取 爬虫****和爬虫学习资料。

Scrapy 框架官⽅⽹址:http://doc.scrapy.org/en/latest Scrapy 中⽂维护站
点:http://scrapychs.readthedocs.io/zh_CN/latest/index.html