python中scrapy的middleware是干嘛的_python爬虫常用之Scrapy 中间件
一、概述
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 中间件相关推荐
- python中scrapy的middleware是干嘛的_Python之爬虫(十九) Scrapy框架中Download Middleware用法...
这篇文章中写了常用的下载中间件的用法和例子. Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所 ...
- python中的多线程求值串行和并行_python多线程和多进程——python并行编程实验
工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: + 进程:对于操作 ...
- python用scrapy爬虫豆瓣_python爬虫,用Scrapy爬取豆瓣Top250,存入MySQL
小白大四生,虽然是计算机专业,但是对学的几门编程语言缘分不深,然后自学了python.(这是我后来补得,因为我发现我写的太笼统了并不适合给新手看,对不起!所以希望大家轻点喷,后面我会从特别特别特别详细 ...
- python爬虫天气实例_Python爬虫 --- 2.4 Scrapy之天气预报爬虫实践
目的 写一个真正意义上一个爬虫,并将他爬取到的数据分别保存到txt.json.已经存在的mysql数据库中. 目标分析: 数据的筛选: 我们使用chrome开发者工具,模拟鼠标定位到相对应位置: 可以 ...
- python scrapy爬虫电影_python爬虫如何用scrapy获取影片?
我们平时生活的娱乐中,看电影是大部分小伙伴都喜欢的事情.周围的人总会有意无意的在谈论,有什么影片上映,好不好看之类的话题,没事的时候谈论电影是非常不错的话题.那么,一些好看的影片如果不去电影院的话,在 ...
- python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
原标题:python怎样判断两个字符串是否相同 python中,判断两个字符串是否相等或一样,可以使用==或者is来判断:判断不一样可以使用 is not. 示例 使用注意事项 1.有时候两个字符串打 ...
- python中字典的value可以为任意对象_Python对象作为字典值
所以我有以下代码,其中字典的值是一个对象,该对象的关键是对象中的一个项目: class MyObject(): def getName(self): return self.name def getV ...
- python中内存管理机制一共分为多少层_python 内存管理机制
内存管理机制 python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...
- python中字典的value可以为任意对象_Python学习入门(13)—字典
(本号正在连续推出以Python官网文档为主线的系统学习Python的系列文章或视频,感兴趣的朋友们欢迎搜索关注.在这里学习Python事半功倍!本文及后续文章如无特别声明均以Windows平台作为演 ...
最新文章
- python管道_python中管道用法入门,举个例子
- Nutch开发(三)
- yii连接mysql主从_Connection 数据库主从连接源码剖析
- mtk 帧同步_【小松教你手游开发】【面试必读(编程基础)】网络游戏同步方式(帧同步和状态同步)...
- mpeg4的解码演示程序
- 商城前端模板_新零售时代如何玩转微信商城
- C# 程序图标设置/winform 图标
- Android系统的system/app和system/priv-app
- 如何在ChemDraw中输入℃温度符号
- 浅谈Unity中的文字显示
- 云计算技术架构-云计算四种模式(公有云、私有云、混合云、行业云)
- Deepin15.8系统下安装QorIQ Linux SDK v2.0 yocto成功完美运行的随笔
- 【绝对经典】骂人口误.......................
- likely()与unlikely()函数的作用
- 输入电阻、输出电阻、特性阻抗、阻抗匹配
- warframe怒焚者结合目标_warframe哪些地图有结合目标 | 手游网游页游攻略大全
- 免费数据 | CnOpenData空气质量站点监测数据
- 12306外包给阿里巴巴/IBM到底是否可行?
- git error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
- log4j实现发送邮件功能