Scrapy框架中间件(一篇文章齐全)

1、Scrapy框架初识(点击前往查阅)

2、Scrapy框架持久化存储(点击前往查阅)

3、Scrapy框架内置管道(点击前往查阅)

4、Scrapy框架中间件

Scrapy 是一个开源的、基于Python的爬虫框架,它提供了强大而灵活的工具,用于快速、高效地提取信息。Scrapy包含了自动处理请求、处理Cookies、自动跟踪链接、下载中间件等功能 

Scrapy框架的架构图(今天的中间件看完,回头来看下) 

  • 引擎(Scrapy)

        用来处理整个系统的数据流处理, 触发事务(框架核心)

  • 调度器(Scheduler)

        用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

    

  • 下载器(Downloader)

        用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)

    

  • 爬虫(Spiders)

        爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面

    

  • 项目管道(Pipeline)

        负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

 什么是中间件?

  • Scrapy的中间件有两个:

    • 爬虫中间件(一般不会去用,就不多赘述了

    • 下载中间件

  • 中间件在五大核心组件的什么位置:

    • 下载中间件位于引擎和下载器之间。

    • 引擎会给下载器传递请求对象,下载器会给引擎返回响应对象。

  • 根据位置了解中间件的作用:

    • 可以拦截到scrapy框架中所有的请求和响应

      • 拦截请求干什么?

        • 修改请求的ip,修改请求的头信息,设置请求的cookie。

      • 拦截响应干什么?

        • 可以修改响应数据。

一、中间件的应用

前置 settings 设置:(需要开启中间件)

1:中间件的介绍

  • 这就是2个中间件,其中 爬虫中间件 很少用到,为了简介明了,我们给他删除或者注释掉就行了。

  •  下载中间件图片中的2个也用不到啥,就删除即可了

  • 精简完的代码,也就是我们需要改写的与操作的(主要参数作用介绍)。 

 1.1:中间件的运行顺序

下图可知:

  • 先执行 process_request :发起的请求先经过该函数。
  • 然后执行 process_respons :返回的数据先经过该函数。
  • 最后才会获取到:返回的响应数据。

process_exception 函数,为啥没执行???

答:因为没报错,process_exception函数 只有在报错才会触发(图二)。

 

So :当我们知道了这个,那可操作的空间就很大了。

例如:

  • 在 process_request 函数中:我们可以设置 UA请求头、Cookie、代理等其他请求头。
  • 在 process_response 函数中:我们可以修改响应回来的数据。
  • 在 process_exception 函数中:我们可以获取错误,并修改错误,重新发起请求(修改错误这个难度太大了,知道有这个功能就行了。)

 

2:process_request 拦截修改请求

在该函数中,我们做哪些设置和操作呢?

1:开发代理中间件

  • request.meta['proxy'] = proxy

 

2:开发UA中间件

  • request.headers['User-Agent'] = ua

 

3:开发Cookie中间件

  • request.cookies = cookies

 

Cookie补充:(具有session的功能)

补充:return返回值

return None  # 这个地方就返回 None 就是正确的。

# return request # 如果返回的是 request 代表重新发起请求,这就死循环了。

 

3:process_response 拦截修改响应

1:修改响应数据

数据的修改需要用到新的模块,需要导入一下:

from scrapy.http import HtmlResponse

参数:

  • request:接收传入的响应对象
  • body:修改后的数据
  • url:就是当前拦截到的请求url
  • encoding:定义编码格式 

补充:return返回值

4、process_exception 拦截错误

  • 拦截和处理发生异常的请求对象。
  • 参数:reqeust就是拦截到的发生异常的请求对象,exception就是异常信息。
  • 方法存在的意义:将发生异常的请求拦截到,然后对其进行修正

 

5、spider的作用 (数据交互)

在中间件的3个函数中,都有 spider 这个参数,那这个参数是做啥的?

 

答:数据交互!

那如何数据交互呢?接着往下看⬇️⬇️⬇️

例如:

图一中:我们在爬虫文件中,设置了一个变量 msg

图二中:我们利用 spider.msg 就可以调用变量 msg

总结:由此我们可以得出,在中间件中只要有参数 spider 就可以调用 爬虫文件中的数据,进行数据交互(spider 就相当于 爬虫文件中类的实例化对象)。

图一: ⬇️

 图二:⬇️

 

补充:管道中 spider 作用

如下图:

  • 管道中的 spider 功能都是一样的,也是用于数据交互的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/205745.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

业务连续性的实施步骤及价值

业务连续性计划不仅仅是面对灾难时的应急措施,更是一种战略性的投资。通过综合的风险评估、计划制定和实施,企业可以提高对各种风险的适应能力,确保业务在任何情况下都能够持续运营。这种全面的准备不仅有助于应对突发事件,还能为…

【社会网络分析第6期】Ucient实操

一、导入数据处理二、核心——边缘分析三、聚类分析四、网络密度 一、导入数据处理 将数据导入Ucinet首先需要对数据进行处理。 承接上一期的数据格式:【社会网络分析第5期】gephi使用指南 原先得到的数据格式如下: 接下来打开ucinet: 之后…

latex中算法的几种模板

latex中算法的几种模板_latex算法模板-CSDN博客文章浏览阅读6.2k次,点赞3次,收藏45次。latex中几种算法模板_latex算法模板https://blog.csdn.net/weixin_50514171/article/details/125136121?spm1001.2014.3001.5506 latex排版原理 常用算法排版伪代码…

「Linux」使用C语言制作简易Shell

💻文章目录 📄前言简易shell实现shell的概念系统环境变量shell的结构定义内建命令完整代码 📓总结 📄前言 对于很多学习后端的同学来讲,学习了C语言,发现除了能写出那个经典的“hello world”以外&#xff…

43.0BaseDao抽取dao公共父类

43.1. 回顾 1. 把数据库表中查询的结果封装到一个实体类中。 命名规则:类名和表名一致 类中属性和表的字段对应。 表中的一条记录对应实体的一个对象 多条记录→集合 43.2. 正文 目录 43.1. 回顾 43.2. 正文 43.3. 抽取dao公共父类。 43.4. 引入数据源 43.3. 抽取dao公共…

文件夹重命名技巧:用关键词替换文件夹名称指定内容的右侧文字

在日常生活中,经常要管理大量的文件夹,这时候掌握一些文件夹重命名的技巧就非常实用。例如文件夹重命名时,经常要将一些通用的文字替换成其他关键词,以便更好地标识和分类文件夹。而用关键词替换文件夹名称指定内容的右侧文字&…

【论文阅读】1 SkyChain:一个深度强化学习的动态区块链分片系统

SkyChain 一、文献简介二、引言及重要信息2.1 研究背景2.2 研究目的和意义2.3 文献的创新点 三、研究内容3.1模型3.2自适应分类账协议3.2.1状态块创建3.2.2合并过程3.2.3拆分过程 3.3评价框架3.3.1性能3.3.1.1共识延迟3.3.1.2重新分片延迟3.3.1.3处理事务数3.3.1.4 约束 3.3.2 …

使用RobotFramework编写BDD代码

背景 行为驱动开发(Behavior Driven Development)即BDD,是一种敏捷开发方法,通常应用在自动化测试中,或者也可称为行为驱动测试。通过使用自然描述语言确定自动化脚本,通过这种方式,能够大大促…

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-BiLSTM-Multihead-…

Openai通用特定领域的智能语音小助手

无穷尽的Q&A 钉钉...钉钉... 双双同学刚到工位,报销答疑群的消息就万马纷沓而来。她只能咧嘴无奈的摇摇头。水都还没有喝一口就开始“人工智能”的去回复。原本很阳光心情开始蒙上一层薄薄阴影。在这无休无止的Q&A中,就算你对工作有磐石一般强硬&#xff0…

XXL-Job详解(一):组件架构

目录 XXL-Job特性系统组成架构图调度模块剖析任务 “运行模式” 剖析执行器 XXL-Job XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 特性 1、简单&#…

探究Kafka原理-6.CAP理论实践

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请&#x1f44…

解决keil右键Go To Definition跳转不过去的问题

解决: 在魔法棒中如图所示打上√

Pycharm新手开发指南

文章目录 前言一、常用功能介绍二、常用高效pycharm使用方法关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言…

京东秒杀之秒杀实现

1 登录判断 用户在未登录状态下可以查看商品列别以及秒杀商品详情&#xff0c;但不可以在未登录状态进行秒杀商品的操作&#xff0c;当用户点击开始秒杀时&#xff0c;进行登陆验证 <!DOCTYPE html> <head><title>商品详情</title><meta http-eq…

习题补充整理

目录 一、自己封装response 二、在响应头中放数据 HttpResponse redirect ​编辑 render JsonResponse 三、函数和方法区别 ----》绑定方法区别 四、上传图片和开启media访问 五、页面静态化(解决访问率高的问题) 一、自己封装response 第一步&#xff0c;在app01下…

使用vue脚手架创建vue项目

Vue是一个流行的前端框架&#xff0c;可以用简洁的语法和组件化的思想开发单页面应用。Vue脚手架是一个官方提供的命令行工具&#xff0c;它可以帮你快速搭建和配置vue项目的基本结构和依赖。 本文介绍如何使用vue脚手架创建一个vue2项目&#xff0c;并选择一些常用的功能和插件…

【JavaFX漏扫开发基础】JavaFx项目基础

文章目录 前言一、创建项目二、运行程序三、application的启动方式和生命周期四、生命周期前言 创建第一个javafx项目,用Idea编辑器来创建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、创建项目 初创项目,第一个javafx的窗口。 依次点击,新建项目 点击Jaca…

字节的“游戏心脏”,真的停止跳动了吗?

字节跳动在游戏行业的宏大叙事&#xff0c;终究变成了一场游戏一场梦。 近日&#xff0c;朝夕光年首次公开回应此前的裁员传闻&#xff0c;明确表示会有业务方向和组织调整&#xff0c;游戏业务将迎来大规模收缩&#xff0c;未来会更加聚焦部分创新型游戏及相关技术的探索。 …

spring RedisTemplate RedisLockRegistry opsForXxx 基本使用总结以及介绍

一、基本介绍 RedisTemplate 为 spring 对 redis 操作的高度封装&#xff0c;基本已经满足所有使用场景。 若存在其他拓展使用我们可以自行封装工具类对基本操作进行组装。 RedisLockRegistry 对 redis 锁的一些封装 二、不同环境下依赖以及基本配置 2.1 spring-boot 下依赖…