一、下载中间件

  1. from scrapy import signals
  2. from scrapy.http import Response
  3. from scrapy.exceptions import IgnoreRequest
  4. from AMAZON.proxy_handle import get_proxy,delete_proxy
  5. # print('eeeeeeeeeeee',get_proxy())
  6.  
  7. class DownMiddleware1(object):
  8. def process_request(self, request, spider):
  9. """
  10. 请求需要被下载时,经过所有下载器中间件的process_request调用
  11. :param request:
  12. :param spider:
  13. :return:
  14. None,继续后续中间件去下载;
  15. Response对象,停止process_request的执行,开始执行process_response
  16. Request对象,停止中间件的执行,将Request重新调度器
  17. raise IgnoreRequest异常,停止process_request的执行,开始执行process_exception
  18. """
  19. # spider.name
  20. print('下载中间件1')
  21. print('gggggggggggggggggggg',get_proxy())
  22.  
  23. # request.meta['proxy']='http://user:pwd@ip:port'
  24. request.meta['download_timeout']=10
  25. request.meta['proxy']='http://'+get_proxy()
  26. print(request.meta)
  27. # return Response('http://www.xxx.com')
  28. # print(request.dont_filter)
  29. # return request
  30. # raise IgnoreRequest
  31. # raise TimeoutError
  32.  
  33. def process_response(self, request, response, spider):
  34. """
  35. spider处理完成,返回时调用
  36. :param response:
  37. :param result:
  38. :param spider:
  39. :return:
  40. Response 对象:转交给其他中间件process_response
  41. Request 对象:停止中间件,request会被重新调度下载
  42. raise IgnoreRequest 异常:调用Request.errback
  43. """
  44. print('response1')
  45. return response
  46.  
  47. def process_exception(self, request, exception, spider):
  48. """
  49. 当下载处理器(download handler)或 process_request() (下载中间件)抛出异常
  50. :param response:
  51. :param exception:
  52. :param spider:
  53. :return:
  54. None:继续交给后续中间件处理异常;
  55. Response对象:停止后续process_exception方法
  56. Request对象:停止中间件,request将会被重新调用下载
  57. """
  58. print('异常1')
  59. # return None
  60.  
  61. # 删旧代理 delelte request.meta['proxy']
  62. old_proxy=request.meta['proxy'].split("//")[-1]
  63. print('oooooooooooo',old_proxy)
  64. delete_proxy(old_proxy)
  65.  
  66. request.meta['proxy']='http://'+get_proxy()
  67. return request

scrapy中间件的更多相关文章

  1. scrapy中间件中使用selenium切换ip

    scrapy抓取一些需要js加载页面时一般要么是通过接口直接获取数据,要么是js加载,但是我通过selenium也可以获取动态页面 但是有个问题,容易给反爬,因为在scrapy中间件mid中使用sel ...

  2. Scrapy中间件user-agent和ip代理使用

    一.定义实现随机User-Agent的下载中间件 1.在middlewares.py中完善代码 import random from Tencent.settings import USER_AGEN ...

  3. scrapy 中间件

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

  4. python爬虫常用之Scrapy 中间件

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

  5. scrapy——中间件UserAgent代理

    pip install fake-useragent 使用说明:from fake_useragent import UserAgent# 实例化一个UserAgent对象ua = UserAgent ...

  6. scrapy中间件中发送邮件

    背景介绍:之前写过通过通过scrapy的扩展发送邮件,在爬虫关闭的时候发送邮件.那个时候有个问题就是MailSender对象需要return出去.这次需要在中间件中发送邮件,但是中间件中不能随便使用r ...

  7. 爬虫 - Scrapy中间件

    前提:看Scrapy架构图 不管什么Middlewares,都写在middlewares.py里面. 然后在settings.py里的DOWNLOADER_MIDDLEWARES或者SPIDER_MI ...

  8. 写一个scrapy中间件--ip代理池

    middleware文件 # -*- coding: utf-8 -*- # Define here the models for your spider middleware # See docum ...

  9. scrapy中间件之下载中间件使用(网易新闻爬取)

    scrapy项目中的middlewarse.py中间件 爬虫中间件:目前先不介绍 下载中间件(需要在settings.py中开启) (1)请求处理函数:process_request(self, re ...

随机推荐

  1. typeof操作符--undefined与null

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>ty ...

  2. SVN_2008R2 搭建流程与规范

    Svn服务在win2008 搭建 1:svn服务的原理与架构 1.Svn服务可以理解为加强版的ftp文件服务器, svn采用HTTP协议的方式进行文件传输 2.服务端安装好后,普通用户也需要下载一个c ...

  3. python内置的魔术命令(builtin magic commands)

    在ipython或者jupyter notebook中,会出现"%"开头并且一个很短的命令,例如交互式的matlablib绘图: %matplotlib inline 之前一直不知 ...

  4. ElasticSearch搜索解析

    这篇介绍稍多,篇幅可能有点多,下面会针对一些重要的点做一些小测试 搜索返回文档解析 hits搜索返回的结果中最重要的一部分其中包含了 索引信息(_index,_type,_index,_source, ...

  5. constructor与prototype

    在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们 ...

  6. [转] Javascript模块化编程(一):模块的写法

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  7. [转] Node.js使用MongoDB3.4+Access control is not enabled for the database解决方案

    今天使用MongoDB时遇到了一些问题 建立数据库连接时出现了warnings 出现这个警告的原因是新版本的MongDB为了让我们创建一个安全的数据库 必须要进行验证 后来在外网找到了答案 解决方案如 ...

  8. cookie 详解

    cookie概览 cookie是Web浏览器存储的少量命名数据,它与某个特定的网页或网站关联在一起.cookie是用来给Web浏览器提供内存,以便脚本和服务端程序可以在一个页面使用另一个页面的输入数据 ...

  9. Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)

    前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说 ...

  10. python全栈开发day55-mysql外键的三种变种

    一.昨日内容回顾 二.今日内容总结 三.mysql应知必会 你可以通过INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表来查看. select * from INFORMATI ...