IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python爬虫从入门到精通:(33)scrapy中间件_Python涛哥 -> 正文阅读

[Python知识库]Python爬虫从入门到精通:(33)scrapy中间件_Python涛哥

中间件

  • 作用:批量拦截请求和响应

  • 爬虫中间件

  • 下载中间件(推荐)

    • 拦截请求:
      • 篡改请求url
      • 伪装请求头信息
        • UA
        • Cookie
      • 设置代理(重点)
    • 拦截响应:
      • 篡改响应数据

详解

我们创建个工程middlePro,爬取百度和搜狗。

import scrapy

class MiddleSpider(scrapy.Spider):
    name = 'middle'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['https://www.baidu.com/', 'https://www.sogou.com']

    def parse(self, response):
        print(response)

然后我们看下中间件这个文件middlewares.py

在这里插入图片描述

这里我们不需要爬虫中间件,把它删除。主要看下载中间件里的内容:

下载中间件MiddleproDownloaderMiddleware中也有一个不需要的方法和注释,删除掉,只需留下下面三个需要重写的方法:

在这里插入图片描述

# 拦截所有(正常&异常)的请求
# 参数:request就是拦截到的请求,spider就是爬虫类实例化的对象
def process_request(self, request, spider):
    return None
# 拦截所有的响应对象
# 参数:respone拦截到的响应对象,request响应对象对应的请求对象
def process_response(self, request, response, spider):
    return response
# 拦截异常的请求
# 参数:request就是拦截到的发生异常的请求
# 作用:想要将异常的请求进行修正,将其变成正常的请求,然后对其进行重新发送
def process_exception(self, request, exception, spider):
  	pass

打印之前,需要在配置文件settings.py中设置中间件:

# 打开下载中间件
DOWNLOADER_MIDDLEWARES = {
    'middlePro.middlewares.MiddleproDownloaderMiddleware': 543,
}

在这里插入图片描述

管道也打开。但这里先不设置UAROBOTSTXT_OBEY = True

运行下:

在这里插入图片描述

我们看到网页被请求中间件响应中间件正常拦截了(不然不会打印)。其中搜狗没有异常拦截,百度有异常拦截

我们设置ROBOTSTXT_OBEY = False,再去运行下:

在这里插入图片描述

这时,因为我们忽略了robots协议,就都没有异常拦截了


举例

process_exception:

    # 代理的话,需要写在process_exception方法中
  def process_exception(self, request, exception, spider):
        # 请求的ip被禁掉,该请求就会变成一个异常单 请求
        # request.meta['proxy']='http://ip:port' # 设置代理
        print('process_exception()')
        return  request # 将异常单 请求修正后将其进行重新发送

process_response:

def process_response(self, request, response, spider):
    print('process_response()')
    # 请求头伪装,一般不用,只是举例
    request.headers['User-Agent']='xxx'
    request.headers['Cookie'] = 'xxx'
    return response
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:21:19  更:2021-10-18 17:23:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:59:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码