Scrapy中的Spider Middleware

2024-04-17 16:08
文章标签 scrapy spider middleware

本文主要是介绍Scrapy中的Spider Middleware,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(一)Spider Middleware作用

  1. Downloader生成的Response发送给Spider之前
  2. Spider生成的Request发送给Scheduler之前
  3. Spider生成的Item发送给ItemPipeline之前

(二)核心方法

  • process_spider_input(response,spider)
  • process_spider_output(response,result,spider)
  • process_spider_exception(response,exception,spider)
  • process_start_requests(start_requets,spider)
    只需要实现其中一个或多个方法就可以定义一个Spider Middleware

1.process_spider_input

当Response被Spider Middleware调用处理时,process_spider_input被调用
process_spider_input 应该返回None或者抛出一个异常

  • 返回None时:
    Scrapy会继续处理Response,调用其他所有的Spider Middleware,直到spider处理该Response
  • 抛出异常时:
    Scrapy将不会调用任何其他Spider Middleware的process_spider_input方法,而调用Request的errback方法。errback的输出将会被重新输入到中间件中,使用process_spider_output方法来处理,当其抛出异常时则调用process_spider_exception来处理

2.process_spider_output

当Spider处理Response返回结果时,process_spider_output会被调用
process_spider_output方法必须返回包含Request或Item的可迭代对象

3.process_spider_exception

当Spider或Spider Middleware的process_spider_input方法抛出异常时process_spider_exception会被调用
方法必须返回None或者返回一个包含Request或者Item的可迭代对象

  • 返回None时:
    Scrapy继续处理该异常,调用其他Spider Middleware的process_spider_exception方法,直到所有Spider Middleware被调用
  • 返回可迭代对象时:
    调用其他Spider Middleware的process_spider_output方法

4.process_start_requests

process_start_requests方法以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output,只不过他没有相关联的Response,并且必须返回一个包含Request的可迭代对象。

这篇关于Scrapy中的Spider Middleware的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912256

相关文章

scrapy 出现404处理

第一种解决策略: from scrapy.http import Requestfrom scrapy.spider import BaseSpiderclass MySpider(BaseSpider):handle_httpstatus_list = [404, 500]name = "my_crawler"start_urls = ["http://github.com/illeg

scrapy 爬网站 显示 Filtered offsite request to 错误.

爬取zol 网站图片,无法抓取. 在 setting.py 文件中 设置 日志 记录等级  LOG_LEVEL= 'DEBUG' LOG_FILE ='log.txt' 查看日志 发现报 2015-11-07 14:43:43+0800 [meizitu] DEBUG: Filtered offsite request to 'bbs.zol.com.cn': <GET h

Scrapy基础——Debug和test

写代码的最常做的事情就是debug和test,那么如何在Scrapy中检查爬虫能否正常运行,保证在大规模作业时不会遇到奇奇怪怪的问题呢?这里主要根据实例说些debug的方法。 Debug三部曲 Parse parse命令主要用于从method级别去检查爬虫不同部分的行为。它有以下几个可选项: --spider=SPIDER,指定爬虫--a NAME=VALUE,设置爬虫变量--call

Scrapy实战-下载豆瓣图书封面

紧接着再识Scrapy-爬取豆瓣图书,我们打算把每一本图书的封面都爬下来,毕竟下载图片是一件很棒的事。可以凭借这招去搜集各种表情包呢,还可以省了在某榴辛辛苦苦一个一个打开网页的烦恼呢。 根据官方文档,下载图片其实pipeline.py的额外工作而已,大致分为以下几步 在Spider中,额外定义一个image_urls用来存放图片链接的 item;这个item会从spider中传递到pipelin

Scrapy实战-爬取豆瓣漫画

背景知识 (一)什么是Scrapy呢?Python上优秀的爬虫框架。什么是爬虫?可以看我的心得感悟,也可以自行谷歌百度。 (二)建议看下初识Scrapy的事前准备安装Scrapy。 (三)Selectors根据XPath和CSS表达式从网页中选择数据。XPath和CSS表达式是什么东西,我们不用太过于纠结,只需要知道可以使用它们在网页中选择数据。用法:利用chrome去复制所需数据的位置信息

Python爬虫学习 | Scrapy框架详解

一.Scrapy框架简介 何为框架,就相当于一个封装了很多功能的结构体,它帮我们把主要的结构给搭建好了,我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据,提取数据的框架,我们熟知爬虫总共有四大部分,请求、响应、解析、存储,scrapy框架都已经搭建好了。scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架,scrapy使用了一

在scrapy中使用Selector提取数据

经院吉吉:     首先说明一下,在scrapy中使用选择器是基于Selector这个对象滴,selector对象在scrapy中通过XPATH或是CSS来提取数据的,我们可以自己创建selector对象,但在实际开发中我们不需要这样做,因为response内置有selector对象,我们可以直接调用其方法,scrapy源码中相关实现过程如下: 可以看到scrapy.selector模块在

pyhton爬虫Scrapy架构分析

所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,更专业的描述就是,抓取特定网站网页的HTML数据。  Python 开源的爬虫框架Scrapy是一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以 用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了

Scrapy爬虫爬取天气数据存储为txt和json等多种格式

一、创建Scrrapy项目 scrapy startproject weather      二、 创建爬虫文件 scrapy genspider wuhanSpider wuhan.tianqi.com     三、SCrapy项目各个文件    (1) items.py import scrapyclass WeatherItem(scrapy.Item):#

Asp.net core Authoriation Middleware实现权限控制的例子

ASP.NET Core Authorization Middleware 是 ASP.NET Core 框架中用于处理授权的中间件组件。它允许开发者在应用程序中实现细粒度的访问控制,确保只有合适的用户才能访问特定的资源或执行特定的操作。 核心概念 策略(Policies):策略是一组规则,定义了哪些用户或角色可以访问特定的资源。策略可以基于角色、用户声明、年龄或其他自定义要求。 要求(R