scrapy的五大核心组件

引擎(Scrapy)

对整个系统的数据流进行处理, 触发事务(框架核心).

调度器(Scheduler)

用来接受引擎发过来的请求. 由过滤器过滤重复的url并将其压入队列中, 在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么.

下载器(Downloader)

用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的).

爬虫(Spiders)

爬虫是主要干活的, 它可以生成url, 并从特定的url中提取自己需要的信息, 即所谓的实体(Item). 用户也可以从中提取出链接, 让Scrapy继续抓取下一个页面.

项目管道(Pipeline)

负责处理爬虫从网页中抽取的实体, 主要的功能是持久化实体、验证实体的有效性、清除不需要的信息. 当页面被爬虫解析后, 将被发送到项目管道, 并经过几个特定的次序处理数据.

工作流程


  当我们执行爬虫文件的时候,这五大组件就已经开始工作了 。其中,

  • 1 首先,我们最原始的起始url是在我们爬虫文件中的,通常情况系,起始的url只有一个,当我们的爬虫文件执行的时候,首先对起始url发送请求,将起始url封装成了请求对象,将请求对象传递给了引擎,引擎就收到了爬虫文件给它发送的封装了起始URL的请求对象。我们在爬虫文件中发送的请求并没有拿到响应(没有马上拿到响应),只有请求发送到服务器端,服务器端返回响应,才能拿到响应。

  • 2 引擎拿到这个请求对象以后,又将请求对象发送给了调度器,队列接受到的请求都放到了队列当中,队列中可能存在多个请求对象,然后通过过滤器,去掉重复的请求

  • 3 调度器将过滤后的请求对象发送给了引擎,

  • 4 引擎将拿到的请求对象给了下载器

  • 5 下载器拿到请求后将请求拿到互联网进行数据下载

  • 6 互联网将下载好的数据发送给下载器,此时下载好的数据是封装在响应对象中的

  • 7 下载器将响应对象发送给引擎,引擎接收到了响应对象,此时引擎中存储了从互联网中下载的数据。

  • 8 最终,这个响应对象又由引擎给了spider(爬虫文件),由parse方法中的response对象来接收,然后再parse方法中进行解析数据,此时可能解析到新的url,然后再次发请求;也可能解析到相关的数据,然后将数据进行封装得到item,

  • 9 spider将item发送给引擎,

  • 10 引擎将item发送给管道。

其中,在引擎和下载中间还有一个下载器中间件,spider和引擎中间有爬虫中间件,

爬虫中间件

  • 拦截请求和响应,对请求和响应进行处理。

下载器中间件(重点)

  • 可以拦截请求和响应对象,请求和响应交互的时候一定会经过下载中间件,可以处理请求和响应。

    • 拦截请求:

      • 篡改请求url
      • 伪装请求头信息UA Cookie
      • 设置请求代理(重点)
    • 拦截响应
      • 篡改响应数据
    • 代理操作必须使用中间件才可以实现
      • process_exception:

        • request.meta[‘proxy’] = ‘http://ip:port’ # 设置代理

创建工程

创建一个爬虫工程:scrapy startproject proName
进入工程目录创建爬虫源文件:scrapy genspider spiderName www.xxx.com
执行工程:scrapy crawl spiderName

对middlewares.py进行精简并编辑

  • 只留下下载中间件的类容
from scrapy import signals
from itemadapter import is_item, ItemAdapterclass MiddleproDownloaderMiddleware(object):# 拦截所有(正常&异常)的请求# 参数: request就是拦截到的请求,spider就是爬虫类实例化的对象def process_request(self, request, spider):print('process_request()')return None # or request# 拦截所有的响应对象# 参数:response拦截到的响应对象,request响应对象对应的请求对象def process_response(self, request, response, spider):print('process_response()')return response# 拦截异常的请求# 参数:request就是拦截到的发生异常的请求# 作用:想要将异常的请求进行修正,将其变成正常的请求,然后对其进行重新发送def process_exception(self, request, exception, spider):# 请求的ip被禁掉,该请求就会变成一个异常的请求request.meta['proxy'] = 'http://ip:port'  # 设置代理print('process_exception()')return request #将异常的请求修正后进行重新发送

17-爬虫之scrapy框架五大核心组件工作流程及下载中间件介绍04相关推荐

  1. Python爬虫之Scrapy框架系列(18)——深入剖析中间件及实战使用

    目录: 1.下载中间件: (1)终端获取下载中间件状态信息的命令: (2)下载中间件的API: (3)中间件的项目应用:通过添加中间件设置UA代理及IP代理 ①在middlewares.py中间件文件 ...

  2. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  3. 爬虫之scrapy框架的数据持久化存储/保存为scv,json文件

    文章目录 前情回顾 selenium+phantomjs/chrome/firefox execjs模块使用 今日笔记 scrapy框架 小试牛刀 猫眼电影案例 知识点汇总 数据持久化存储(MySQL ...

  4. NO.17——应用Scrapy框架实现美女图片的打包下载

    一.基础知识 Scrapy是基于Twisted的异步处理框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates ...

  5. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  6. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  7. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

  8. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  9. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

最新文章

  1. DeepMind-深度学习: AI革命及其前沿进展 (54页ppt报告)
  2. java map是有序的吗_Java:如何初始化和填充最终的静态有序Map?
  3. 力扣700. 二叉搜索树中的搜索(JavaScript)
  4. 计算机专业是安大好还是合工大好,合肥工业大学和安徽大学哪个比较好?2019年志愿填报参考!...
  5. 测试自己幸运数字的软件,心理测试:4个数字哪个是你的幸运数字?测试你的心理年龄!...
  6. 关于html转换为pdf案例的一些测试与思考
  7. 遥感原理与应用总结——第一章:遥感原理的基本概念
  8. 3dmaxobj导出选项,3DMAX将模型导出OBJ格式和贴图
  9. 图片转Word文档怎么转
  10. 通信工程/电子信息工程 保研夏令营/预推免流程分析
  11. Ubuntu实现划词翻译
  12. 打印机 树莓派安装cpus_树莓派安装网络打印机
  13. 我的世界服务器显示弹幕,我的世界直播弹幕模组
  14. mysql 统计表_MySQL统计表的设计
  15. php继电器信号,中间继电器是将 信号变成 信号的继电器,主要起中间转换作用,其输入为线圈的 和 ,输出信号是触点的断开和闭合。它可将输出信号同时传给几个控制元件或回路。...
  16. Unitree Go1——开发指南
  17. SEO点击软件是否对网站排名有帮助
  18. 第十四章 习题14-11-习题14-20
  19. 【软件工程】软件工程知识点提纲7
  20. 调用海康工业相机图像获取方式之主动取流(getimagebuffer )

热门文章

  1. linux 写脚本登录ftp,Linux使用Shell脚本实现ftp的自动上传下载-Go语言中文社区
  2. altera fpga 型号说明_基于FPGA的USB2.0接口通信
  3. java nio 阻塞_Java NIO和传统阻塞IO
  4. 多媒体计算机技术论文结束语,论述多媒体计算机技术在广播电视工程中的应用成果论文...
  5. android获取文件上级目录,Android 文件存储
  6. Linux服务器IP下了,linux – DDOS攻击下的服务器 – 如何查找IP?
  7. 基于matlab的单相pwm逆变电路的仿真研究,基于MATLAB的单相PWM逆变电路的仿真研究...
  8. 【ruoyi若依】layer 重置大小/resize
  9. 【quartz】执行一次功能
  10. 更换Spring底层日志框架