一、中间件的分类

  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 中间件相关推荐

  1. 爬虫基础12(框架Scrapy中间件)

    Scrapy中间件 爬虫中间件 class SpiderMiddleware(object):# Not all methods need to be defined. If a method is ...

  2. Scrapy中间件的使用-爬取豆瓣top250/PM2.5历史数据

    python编程快速上手(持续更新中-) python爬虫从入门到精通 Scrapy爬虫框架 文章目录 python编程快速上手(持续更新中-) python爬虫从入门到精通 Scrapy爬虫框架 1 ...

  3. scrapy中间件详解

    scrapy中间件: scrapy中间件介绍 下载器中间件 添加ip代理 UA中间件 cookies中间件 爬虫中间件 核心方法 scrapy中间件介绍 = = scrapy中间件是scrapy框架的 ...

  4. python中scrapy的middleware是干嘛的_python爬虫常用之Scrapy 中间件

    一.概述 1.中间件的作用 在scrapy运行的整个过程中,对scrapy框架运行的某些步骤做一些适配自己项目的动作. 例如scrapy内置的HttpErrorMiddleware,可以在http请求 ...

  5. 爬虫scrapy框架中间件的使用

    1. scrapy中间件的分类和作用 1.1 scrapy中间件的分类 根据scrapy运行流程中所在位置不同分为:[中间件离哪个模块近就称为什么中间件] 下载中间件 爬虫中间件 1.2 scrapy ...

  6. 彻底搞懂 Scrapy 的中间件

    彻底搞懂Scrapy的中间件(一):https://www.cnblogs.com/xieqiankun/p/know_middleware_of_scrapy_1.html 彻底搞懂Scrapy的中 ...

  7. 《Learning Scrapy》(中文版)第11章 Scrapyd分布式抓取和实时分析

    序言 第1章 Scrapy介绍 第2章 理解HTML和XPath 第3章 爬虫基础 第4章 从Scrapy到移动应用 第5章 快速构建爬虫 第6章 Scrapinghub部署 第7章 配置和管理 第8 ...

  8. scrapy详解及主要应用场景

    文章目录 1.scrapy 多页爬取 2.scrapy爬取详情页 3.scrapy发送post请求 4.scrapy中间件 5.下载中间件实现UA池 1.scrapy 多页爬取 # spider编码在 ...

  9. scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验

    最近打算学习 scrapy_splash 来爬取 js 加载的动态网页 selenium 实在太慢了,不在迫不得已的情况下并不推荐使用 下面,直接开始吧 目标网站 JD 某商品 环境需求 已安装 do ...

最新文章

  1. 【Python自学】六个上手超强的学习工具,你值得有
  2. jupyter notebook中忽略所有警告,让页面更整洁
  3. Redis AOF 全持久化
  4. 最近工程师怎么都在写公众号?这玩意到底能赚多少钱?
  5. Flume监听文件夹中的文件变化,并把文件下沉到hdfs
  6. 计算机组成原理实验八报告,计算机组成原理实验八报告
  7. SAP Commerce Cloud 导入消费OCC API需要使用的credentials
  8. 【转】JMeter学习(二十七)Jmeter常见问题
  9. fanuc 机床,加工中心通信总结,机床联网监控系统
  10. (转)asp.net c#如何采集需要登录的页面?
  11. 小车手app安卓版下载_美森网校app下载_美森网校安卓版下载[英语培训]
  12. 【离散数学】集合论 第三章 集合与关系(8) 关系的闭包运算
  13. 如何制作电话号码二维码?
  14. windows下,查看apk的包名、以及查找appActivity(aapt命令)
  15. 中科呐喊WiFi热点广告机APP使用教程(安卓)
  16. 后缀数组(倍增)学习记录,我尽可能详细的讲了
  17. 深度学习解决机器阅读理解任务的研究进展
  18. 番茄炖牛腩做法,味美汤浓开胃爽口,牛腩入口即化,太下饭!
  19. 截图神器FastStone Capture :小而强悍的截图一哥 (软件-神器系列第1篇)
  20. 3698: XWW的难题[有源汇上下界最大流]

热门文章

  1. 孙溟㠭禅意篆刻《天地宽》《不染一尘》
  2. 亚马逊卖家账户被判物流欺诈封号,我们应该怎么做?
  3. 单位转换(KiB,KB)
  4. linux内核强制网卡为100m,linux系统 查看网卡是100M还是1000M
  5. PAT 乙级 1018 锤子剪刀布 (20分)
  6. 利用gltfloader.dll或者SharpGLTF生成gltf、glb数据
  7. 一摞Python风格的麻将
  8. 毕业设计-基于深度学习的花卉识别分类
  9. spring.factories文件
  10. 创建maven模板Java项目