ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Scrapy

2019-08-08 23:00:08  阅读:414  来源: 互联网

标签:Engine Downloader Spider 爬虫 Item Scrapy Middlewares


介绍

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

 

标签:Engine,Downloader,Spider,爬虫,Item,Scrapy,Middlewares
来源: https://www.cnblogs.com/q240756200/p/11324419.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有