当前位置: 首页 > news >正文

scrapy框架——下载器中间件(Downloader Middlewares)

一、什么是下载器中间件?

      简单来说,下载器中间件就是引擎和下载器之间通信的中间件。主要目的用来更换请求头、设置代理IP来达到应对网站反爬的情况

      举个例子来说:

1、在我们频繁访问一个页面时,如果请求头一直保持一致,那么就很容易被服务器发现,从而禁止掉这个请求头访问,那么我们就需要设置请求头中间件来应对网站反爬。

2、同样的,我们也可以通过设置 代理IP 来应对网站反爬。

      这就是设置下载器中间件的原因与方法。

二、如何设置下载器中间件?

1.自行定义请求头中间件:

常见的请求头列表网址:

http://www.useragentstring.com/pages/useragentstring.php?typ=Browser

class UserAgentDownloadMiddleware(object):
    USER_AGENTS = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
        'Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2919.83 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2866.71 Safari/537.36',
        'Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2820.59 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2762.73 Safari/537.36'
    ]

    def process_request(self,request,spider):
        user_agent = random.choice(self.USER_AGENTS)
        request.headers['User-Agent'] =user_agent

2.设置代理IP:

  1. 快代理:快代理 - 企业级代理云服务提供商
  2. 蚂蚁代理:​​​​​​​​​​​​​​​​​​​​​蚂蚁代理-最新免费代理ip,高质量代理ip

class IPProxyDownloadMiddleware(object):
     PROXIES = [
        "ip:port"
     ]
     def process_request(self,request,spider):
         proxy = random.choice(self.PROXIES)
         print('被选中的代理:%s' % proxy)
         request.meta['proxy'] =  proxy

相关文章:

  • 如何使用scrapy下载图片
  • 关于windows上的lsass.exe进程
  • 如何匹配Python库的版本?
  • 如何将 Windows 2000 安装移到不同的硬件
  • 如何安装Redis?
  • 华中之旅--逃离广州(二)
  • 人人网如何注册与设置密码
  • 华中之旅-- 瑞雪岳阳城
  • 谈一下分布式爬虫
  • redis-desktop-manager安装
  • 时间管理的40项准则
  • centos7安装redis
  • centos7安装anaconda
  • 会移动的文字(Marquee)
  • 配置其他机器连接Redis
  • CentOS 7 修改主机名
  • dva中组件的懒加载
  • ECMAScript6(0):ES6简明参考手册
  • gcc介绍及安装
  • JavaScript 奇技淫巧
  • JavaScript新鲜事·第5期
  • Java编程基础24——递归练习
  • mac修复ab及siege安装
  • React Native移动开发实战-3-实现页面间的数据传递
  • Redis字符串类型内部编码剖析
  • 你不可错过的前端面试题(一)
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前嗅ForeSpider采集配置界面介绍
  • 深度解析利用ES6进行Promise封装总结
  • 首页查询功能的一次实现过程
  • 通信类
  • 延迟脚本的方式
  • 我们雇佣了一只大猴子...
  • #、%和$符号在OGNL表达式中经常出现
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (分布式缓存)Redis哨兵
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (强烈推荐)移动端音视频从零到上手(上)
  • (学习日记)2024.01.19
  • (一)插入排序
  • (原創) 物件導向與老子思想 (OO)
  • (转)【Hibernate总结系列】使用举例
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .“空心村”成因分析及解决对策122344
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET NPOI导出Excel详解
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 后台导出excel ,word
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET关于 跳过SSL中遇到的问题
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET面试题(二)