一、概述

1.中间件的作用

在scrapy运行的整个过程中,对scrapy框架运行的某些步骤做一些适配自己项目的动作.

例如scrapy内置的HttpErrorMiddleware,可以在http请求出错时做一些处理.

2.中间件的使用方法

配置settings.py.详见scrapy文档 https://doc.scrapy.org

二、中间件的分类

scrapy的中间件理论上有三种(Schduler Middleware,Spider Middleware,Downloader Middleware),在应用上一般有以下两种

1.爬虫中间件Spider Middleware

主要功能是在爬虫运行过程中进行一些处理.

2.下载器中间件Downloader Middleware

主要功能在请求到网页后,页面被下载时进行一些处理.

三、使用

1.Spider Middleware有以下几个函数被管理:

- process_spider_input 接收一个response对象并处理,

位置是Downloader-->process_spider_input-->Spiders(Downloader和Spiders是scrapy官方结构图中的组件)

- process_spider_exception spider出现的异常时被调用

- process_spider_output 当Spider处理response返回result时,该方法被调用

- process_start_requests 当spider发出请求时,被调用

位置是Spiders-->process_start_requests-->Scrapy Engine(Scrapy Engine是scrapy官方结构图中的组件)

2.Downloader Middleware有以下几个函数被管理

- process_request  request通过下载中间件时,该方法被调用

- process_response 下载结果经过中间件时被此方法处理

- process_exception 下载过程中出现异常时被调用

编写中间件时,需要思考要实现的功能最适合在那个过程处理,就编写哪个方法.

中间件可以用来处理请求,处理结果或者结合信号协调一些方法的使用等.也可以在原有的爬虫上添加适应项目的其他功能,这一点在扩展中编写也可以达到目的,实际上扩展更加去耦合化,推荐使用扩展.

python中scrapy的middleware是干嘛的_python爬虫常用之Scrapy 中间件相关推荐

  1. python中scrapy的middleware是干嘛的_Python之爬虫(十九) Scrapy框架中Download Middleware用法...

    这篇文章中写了常用的下载中间件的用法和例子. Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所 ...

  2. python中的多线程求值串行和并行_python多线程和多进程——python并行编程实验

    工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: + 进程:对于操作 ...

  3. python用scrapy爬虫豆瓣_python爬虫,用Scrapy爬取豆瓣Top250,存入MySQL

    小白大四生,虽然是计算机专业,但是对学的几门编程语言缘分不深,然后自学了python.(这是我后来补得,因为我发现我写的太笼统了并不适合给新手看,对不起!所以希望大家轻点喷,后面我会从特别特别特别详细 ...

  4. python爬虫天气实例_Python爬虫 --- 2.4 Scrapy之天气预报爬虫实践

    目的 写一个真正意义上一个爬虫,并将他爬取到的数据分别保存到txt.json.已经存在的mysql数据库中. 目标分析: 数据的筛选: 我们使用chrome开发者工具,模拟鼠标定位到相对应位置: 可以 ...

  5. python scrapy爬虫电影_python爬虫如何用scrapy获取影片?

    我们平时生活的娱乐中,看电影是大部分小伙伴都喜欢的事情.周围的人总会有意无意的在谈论,有什么影片上映,好不好看之类的话题,没事的时候谈论电影是非常不错的话题.那么,一些好看的影片如果不去电影院的话,在 ...

  6. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同

    原标题:python怎样判断两个字符串是否相同 python中,判断两个字符串是否相等或一样,可以使用==或者is来判断:判断不一样可以使用 is not. 示例 使用注意事项 1.有时候两个字符串打 ...

  7. python中字典的value可以为任意对象_Python对象作为字典值

    所以我有以下代码,其中字典的值是一个对象,该对象的关键是对象中的一个项目: class MyObject(): def getName(self): return self.name def getV ...

  8. python中内存管理机制一共分为多少层_python 内存管理机制

    内存管理机制 ​python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 ​Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...

  9. python中字典的value可以为任意对象_Python学习入门(13)—字典

    (本号正在连续推出以Python官网文档为主线的系统学习Python的系列文章或视频,感兴趣的朋友们欢迎搜索关注.在这里学习Python事半功倍!本文及后续文章如无特别声明均以Windows平台作为演 ...

最新文章

  1. python管道_python中管道用法入门,举个例子
  2. Nutch开发(三)
  3. yii连接mysql主从_Connection 数据库主从连接源码剖析
  4. mtk 帧同步_【小松教你手游开发】【面试必读(编程基础)】网络游戏同步方式(帧同步和状态同步)...
  5. mpeg4的解码演示程序
  6. 商城前端模板_新零售时代如何玩转微信商城
  7. C# 程序图标设置/winform 图标
  8. Android系统的system/app和system/priv-app
  9. 如何在ChemDraw中输入℃温度符号
  10. 浅谈Unity中的文字显示
  11. 云计算技术架构-云计算四种模式(公有云、私有云、混合云、行业云)
  12. Deepin15.8系统下安装QorIQ Linux SDK v2.0 yocto成功完美运行的随笔
  13. 【绝对经典】骂人口误.......................
  14. likely()与unlikely()函数的作用
  15. 输入电阻、输出电阻、特性阻抗、阻抗匹配
  16. warframe怒焚者结合目标_warframe哪些地图有结合目标 | 手游网游页游攻略大全
  17. 免费数据 | CnOpenData空气质量站点监测数据
  18. 12306外包给阿里巴巴/IBM到底是否可行?
  19. git error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
  20. log4j实现发送邮件功能

热门文章

  1. EJS学习(四)之语法规则下
  2. linux增加 路由使两个不同的网段可以访问
  3. XHProf报告字段含义
  4. PL/SQL在win7/win8 x64位下使用客户端连接oracle
  5. C#:如何去掉groupbox的边框线
  6. postgresql数据库连接池pgbouncer的搭建
  7. 续上篇随笔:陈勇提示做分批载入需要用到的数据
  8. 18.Mysql SQL优化
  9. pdf2swf无法转换某些文档,提示缺少字体时的处理
  10. 历史客人-报表记录信息