Scrapy

那年仲夏 提交于 2019-11-26 14:42:33

介绍

Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性强,可以灵活完成各种需求

结构介绍

 

 它可以分为以下几个部分

  1. Engine :引擎 -- 处理整个系统的数据流 / 触发事件,是整个框架的核心
  2. Item : 项目 -- 它定义了爬去结果的数据结构,爬去的数据会被赋值成该 Item 对象
  3. Scheduler :调度器 -- 接受引擎发送过来的请求并将其加入队列中。在引擎在次请求的时候将请求提供给引擎
  4. Downloader :下载器 -- 下载网页内容。并将网页内容返回给爬虫文件
  5. Spider :爬虫文件 -- 定义了爬去的逻辑和网页解析,它主要负责解析和响应并生成提取的结果和新的请求
  6. Item Pipline :管道 -- 负责由爬虫文从网页中的数据进行清洗 / 验证和存储
  7. Downloader Middlewares :下载中间件 -- 位于引擎和下载器之间的钩子框架,处理引擎和下载器之间的请求及响应
  8. Spider Middlewares :爬虫中间件 -- 位于引擎和爬虫文件之间的钩子框架,主要处理爬虫文件输入的响应和输出的结果及新的请求

数据流

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

  1. Engine 打开一个网站,找到处理该网站的 Spider。并向该 Spider 请求第一个要爬取的 URL
  2. Engine 从 Spider 中国区第一个要爬去的 URL,并通过 Scheduler 以及 Request 的形式调度
  3. Engine 向 Scheduler 请求下一个要爬取的 URL
  4. Schedler 返回下一个要爬取的 URL 给 Engine ,Engine将 URL 通过Downloader Middlewares 转发给 Downloader 下载
  5. 一旦页面下载完毕, Downloader 生成该页面的 Response, 并将其通过 Downloader Middlewares 发送给 Engine
  6. Engine 从下载器中接收到 Response, 并将其通过 Spider Middlewares 发送给 Spider 处理
  7. Spider 处理 Response ,并返回爬取到的 Item 及新的 Response 给 Engine
  8. Engine 将 Spider 返回的 Item 给 Item Pipline,将新的 Request 给 Scheduler
  9. 重复 2--8 之间的操作,直到 Scheduler 中没有更多的 Request, Engine 关闭该网页,爬取结束

项目结构

  • scrapy.cfg :它是 Scrapy 的配置文件,定义了项目的配置文件路径 / 部署相关信息等内容
  • items.py :它定义了 Item 数据结构,所有的 Item 的定义都可以放在这里
  • pioelines.py :  它定义了 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放在这里
  • settings.py :它定义项目的全局配置
  • middlewares.py : 它定义 Spider Middlewares 和Downloader Middlewars 的实现
  • spiders :包含一个个的 Spider 的实现,每个 Spider 都有一个文件

使用

创建项目

scrapy startproject first

创建爬虫文件

cd first
scrapy genspider firstboold www.xxx.com

进入 项目文件夹下,然后执行 genspider 命令 ,'firstboold'为文件的名字(自定义),'www.xxx.com'为岂是URL(在文件中可更改)

配置文件

在配置文件(settings.py)中设置User-Agent / 日志等级 / 是否遵从 RBOTES协议 / 开启管道等

启动

scrapy crawl firstboold

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!