scrapy 中间件
一、中间件的分类
scrapy的中间件理论上有三种(Schduler Middleware,Spider Middleware,Downloader Middleware),在应用上一般有以下两种
1.爬虫中间件Spider Middleware
我们可以在Downloader生成的Response发送给Spider之前,也就是在Response发送给Spider之前对Response进行处理。
我们可以在Spider生成的Request发送给Scheduler之前,也就是在Request发送给Scheduler之前对Request进行处理。
我们可以在Spider生成的Item发送给Item Pipeline之前,也就是在Item发送给Item Pipeline之前对Item进行处理。
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 下载过程中出现异常时被调用
编写中间件时,需要思考要实现的功能最适合在那个过程处理,就编写哪个方法.
中间件可以用来处理请求,处理结果或者结合信号协调一些方法的使用等.也可以在原有的爬虫上添加适应项目的其他功能,这一点在扩展中编写也可以达到目的,实际上扩展更加去耦合化,推荐使用扩展.
三.常用功能
downloader middleware中常用功能:
1) 添加User-Agent
class UserAgentMiddleware:@propertydef user_agent(self):USER_AGENT_LIST = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]USER_AGENT = random.choice(USER_AGENT_LIST)return USER_AGENTdef process_request(self, request, spider):# Called for each request that goes through the downloader# middleware.request.headers.setdefault('User-Agent', self.user_agent)return None
2) 添加Proxy
class ProxyMiddleware(object):proxy_list = ["http://110.73.3.113:8123","http://171.13.37.172:808","https://221.229.44.79:808",]def process_request(self, request, spider):ip = random.choice(self.proxy_list)print(ip)request.meta['proxy'] = ip
3) 动态网页使用无头浏览器处理
4)下载页面并返回,不经过downloader
def process_request(self, request, spider):res = requests.get(request.url)body = res.contentreturn scrapy.http.HtmlResponse(url=request.url,body=body,request=request,status=200)
requests 设置代理:
import requestsproxy = {"http":"http://120.158.123.88:8008"}
requests.get(url,proxies=proxy)
转载于:https://www.cnblogs.com/zenan/p/9072065.html
scrapy 中间件相关推荐
- 爬虫基础12(框架Scrapy中间件)
Scrapy中间件 爬虫中间件 class SpiderMiddleware(object):# Not all methods need to be defined. If a method is ...
- Scrapy中间件的使用-爬取豆瓣top250/PM2.5历史数据
python编程快速上手(持续更新中-) python爬虫从入门到精通 Scrapy爬虫框架 文章目录 python编程快速上手(持续更新中-) python爬虫从入门到精通 Scrapy爬虫框架 1 ...
- scrapy中间件详解
scrapy中间件: scrapy中间件介绍 下载器中间件 添加ip代理 UA中间件 cookies中间件 爬虫中间件 核心方法 scrapy中间件介绍 = = scrapy中间件是scrapy框架的 ...
- python中scrapy的middleware是干嘛的_python爬虫常用之Scrapy 中间件
一.概述 1.中间件的作用 在scrapy运行的整个过程中,对scrapy框架运行的某些步骤做一些适配自己项目的动作. 例如scrapy内置的HttpErrorMiddleware,可以在http请求 ...
- 爬虫scrapy框架中间件的使用
1. scrapy中间件的分类和作用 1.1 scrapy中间件的分类 根据scrapy运行流程中所在位置不同分为:[中间件离哪个模块近就称为什么中间件] 下载中间件 爬虫中间件 1.2 scrapy ...
- 彻底搞懂 Scrapy 的中间件
彻底搞懂Scrapy的中间件(一):https://www.cnblogs.com/xieqiankun/p/know_middleware_of_scrapy_1.html 彻底搞懂Scrapy的中 ...
- 《Learning Scrapy》(中文版)第11章 Scrapyd分布式抓取和实时分析
序言 第1章 Scrapy介绍 第2章 理解HTML和XPath 第3章 爬虫基础 第4章 从Scrapy到移动应用 第5章 快速构建爬虫 第6章 Scrapinghub部署 第7章 配置和管理 第8 ...
- scrapy详解及主要应用场景
文章目录 1.scrapy 多页爬取 2.scrapy爬取详情页 3.scrapy发送post请求 4.scrapy中间件 5.下载中间件实现UA池 1.scrapy 多页爬取 # spider编码在 ...
- scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验
最近打算学习 scrapy_splash 来爬取 js 加载的动态网页 selenium 实在太慢了,不在迫不得已的情况下并不推荐使用 下面,直接开始吧 目标网站 JD 某商品 环境需求 已安装 do ...
最新文章
- 【Python自学】六个上手超强的学习工具,你值得有
- jupyter notebook中忽略所有警告,让页面更整洁
- Redis AOF 全持久化
- 最近工程师怎么都在写公众号?这玩意到底能赚多少钱?
- Flume监听文件夹中的文件变化,并把文件下沉到hdfs
- 计算机组成原理实验八报告,计算机组成原理实验八报告
- SAP Commerce Cloud 导入消费OCC API需要使用的credentials
- 【转】JMeter学习(二十七)Jmeter常见问题
- fanuc 机床,加工中心通信总结,机床联网监控系统
- (转)asp.net c#如何采集需要登录的页面?
- 小车手app安卓版下载_美森网校app下载_美森网校安卓版下载[英语培训]
- 【离散数学】集合论 第三章 集合与关系(8) 关系的闭包运算
- 如何制作电话号码二维码?
- windows下,查看apk的包名、以及查找appActivity(aapt命令)
- 中科呐喊WiFi热点广告机APP使用教程(安卓)
- 后缀数组(倍增)学习记录,我尽可能详细的讲了
- 深度学习解决机器阅读理解任务的研究进展
- 番茄炖牛腩做法,味美汤浓开胃爽口,牛腩入口即化,太下饭!
- 截图神器FastStone Capture :小而强悍的截图一哥 (软件-神器系列第1篇)
- 3698: XWW的难题[有源汇上下界最大流]