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

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

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

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

4、Scrapy框架中间件

5、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 功能都是一样的,也是用于数据交互的。

  • 62
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Scrapy-Redis框架的介绍与应用 摘要: Scrapy-Redis框架Scrapy爬虫框架的一个扩展,它使用Redis数据库作为Scrapy的调度器和数据存储。本文介绍了Scrapy-Redis框架的基本原理、架构和应用,详细阐述了其在分布式爬虫、数据存储和增量式爬虫等方面的优势,并通过实例说明了如何使用Scrapy-Redis框架进行爬虫开发。 关键词:Scrapy-Redis,分布式爬虫,数据存储,增量式爬虫 一、Scrapy-Redis框架的介绍 Scrapy-Redis框架Scrapy爬虫框架的一个扩展,它使用Redis数据库作为Scrapy的调度器和数据存储。Scrapy-Redis框架可以在分布式环境下运行,使多台服务器能够同时进行爬取任务,大大提高了爬取效率。此外,Scrapy-Redis框架还支持增量式爬虫,可以根据之前爬取的结果来更新数据,避免重复爬取。 Scrapy-Redis框架主要包含以下组件: 1. Scrapy-Redis调度器 Scrapy-Redis调度器使用Redis的list数据结构实现,每个爬虫任务对应一个Redis列表,爬虫任务被分为多个URL请求,每个请求对应一个Redis列表元素。Scrapy-Redis调度器通过阻塞读取Redis列表来获取待爬取的URL,保证多个爬虫任务之间的URL请求不重复。 2. Scrapy-Redis去重器 Scrapy-Redis去重器使用Redis的set数据结构实现,对每个爬虫任务的URL进行去重。Scrapy-Redis去重器可以避免重复爬取相同的URL,提高爬取效率。 3. Scrapy-Redis管道 Scrapy-Redis管道使用Redis的hash数据结构实现,将爬取的数据存储到Redis中。Scrapy-Redis管道支持多种数据格式,如json、xml、csv等,可以灵活处理不同类型的数据。 二、Scrapy-Redis框架的应用 1. 分布式爬虫 Scrapy-Redis框架使用Redis作为调度器和数据存储,可以很容易地实现分布式爬虫。多台服务器可以同时运行Scrapy-Redis爬虫,通过Redis列表来共享URL请求和爬取结果。此外,Scrapy-Redis还提供了分布式锁机制,保证多个爬虫任务之间的URL请求不重复,避免数据重复爬取。 2. 数据存储 Scrapy-Redis框架可以将爬取的数据存储到Redis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

止咳糖浆加糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值