Python爬虫实战

Python爬虫:和我一起学习scrapy(五)

2021-04-06  本文已影响0人  小志Codings

前言

大部分人的身上,有一种近乎无解的矛盾——

想要养成早起的习惯,却一不小心刷手机到凌晨两点;

看到一篇干货文章,第一反应是加收藏夹下次再看(收藏从未停止,学习从未开始。/ 收藏==学会);

想要瘦身塑形,却在深夜破功:“吃饱了才有力气减肥”;

看到一门不错的课程,却还是告诉自己有时间了再学......

Spider Middleware的使用方法

Spider Middleware是介入到Scrapy的Spider处理机制的钩子框架。

当Downloader生成Response之后,Response会被发送给Spider,在发送Spider之前,Response会首先经过Spider Middleware处理,当Spider处理生成Item和Request之后,Item和Request还会经过Spider Middleware的处理。

Spider Middleware有如下三个作用:

使用说明

需要说明的是Scrapy其实已经提供了许多Spider Middleware,它们被SPIDER_MIDDLEWARES_BASE这个变量所定义。

SPIDER_MIDDLEWARE_BASE变量内容如下:

{
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
    'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
    'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
    'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
}

和Downloader Middleware一样,Spider Middleware首先加入到SPIDER_MIDDLEWARES设置当中,该设置会和Scrapy中SPIDER_MIDDLEWARES_BASE定义的Spider Middleware合并。然后根据键值的数字优先级排序,得到一个有序列表。第一个Middleware是最靠近引擎的,最后一个MIddleware是最靠近Spider的。

核心方法

Scrapy内置的Spider Middleware为Spider提供了基础功能。如果我们想要拓展其功能,只需要实现某个方法即可。

每个Spider Middleware都定义了以下一个或多个方法的类,核心方法有如下4个:

process_spider_input(response, spider)

当Response通过Spider Middleware时,该方法被调用,处理该Response。

方法的参数有两个:

process_spider_input()应该返回None或抛出异常。

process_spider_output(response, result, spider)

当Spider处理Response返回结果时,该方法被调用。

方法的参数有三个:

process_spider_output()必须返回包含Request或Item对象的可迭代对象。

process_spider_exception(response, exception, spider)

当Spider或Spider Middleware的process_spider_input()方法抛出异常时,该方法被调用。

方法的参数有三个:

process_spider_exception()要么返回None,要么返回一个包含Response或Item对象的可迭代对象。

process_start_requests(start_requests, spider)

该方法以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output(),只不过其他没有相关联的Response并且必须返回Request。

方法的参数有两个:

其必须返回一个包含Request对象的可迭代对象。

开启Spider Middleware

每当我们创建一个新的项目的时候,就会生成一个middlewares.py的文件,在这个文件中有一个类:MiddletestSpiderMiddleware,这个类与我们创建的项目名相关,我创建的项目名为``Middletest`。因此,当我们修改这个项目名的时候,这个类名也要跟着修改。

在这个类中,里面就有我们上面所描述的四个核心方法。

我们要开启这个Spider Middleware,可以到settings.py里面去开启:

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
    'middletest.middlewares.MiddletestSpiderMiddleware': 543,
}

只需要取消注释即可。

最后

没有什么事情是可以一蹴而就的,生活如此,学习亦是如此!

因此,哪里会有什么三天速成,七天速成的说法呢?

唯有坚持,方能成功!

啃书君说

文章的每一个字都是我用心敲出来的,只希望对得起每一位关注我的人。在文章末尾点【】,让我知道,你们也在为自己的学习拼搏和努力。

路漫漫其修远兮,吾将上下而求索

我是啃书君,一个专注于学习的人,你懂的越多,你不懂的越多。更多精彩内容,我们下期再见!

上一篇下一篇

猜你喜欢

热点阅读