Scrapy中间件

  爬虫中间件

class SpiderMiddleware(object):# Not all methods need to be defined. If a method is not defined,# scrapy acts as if the spider middleware does not modify the# passed objects.
@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()return sdef process_spider_input(self,response, spider):"""下载完成,执行,然后交给parse处理:param response: :param spider: :return: """passdef process_spider_output(self,response, result, spider):"""spider处理完成,返回时调用:param response::param result::param spider::return: 必须返回包含 Request 或 Item 对象的可迭代对象(iterable)"""return resultdef process_spider_exception(self,response, exception, spider):"""异常调用:param response::param exception::param spider::return: None,继续交给后续中间件处理异常;含 Response 或 Item 的可迭代对象(iterable),交给调度器或pipeline"""return None# 只在爬虫启动时,执行一次。def process_start_requests(self,start_requests, spider):"""爬虫启动时调用:param start_requests::param spider::return: 包含 Request 对象的可迭代对象"""return start_requests

配置方法:

SPIDER_MIDDLEWARES = {'xdb.sd.SpiderMiddleware': 666,'xdb.sd.Sd2': 667,}

应用:

- 深度
- 优先级

下载中间介件

class DownMiddleware1(object):@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()return sdef process_request(self, request, spider):"""请求需要被下载时,经过所有下载器中间件的process_request调用:param request: :param spider: :return:  None,继续后续中间件去下载;Response对象,停止process_request的执行,开始执行process_responseRequest对象,停止中间件的执行,将Request重新调度器raise IgnoreRequest异常,停止process_request的执行,开始执行process_exception"""# 1. 返回Response# import requests# result = requests.get(request.url)# return HtmlResponse(url=request.url, status=200, headers=None, body=result.content)# 2. 返回Request# return Request('https://dig.chouti.com/r/tec/hot/1')# 3. 抛出异常# from scrapy.exceptions import IgnoreRequest# raise IgnoreRequest# 4. 对请求进行加工(*)# request.headers['user-agent'] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"passdef process_response(self, request, response, spider):"""spider处理完成,返回时调用:param response::param result::param spider::return: Response 对象:转交给其他中间件process_responseRequest 对象:停止中间件,request会被重新调度下载raise IgnoreRequest 异常:调用Request.errback"""print('response1')return responsedef process_exception(self, request, exception, spider):"""当下载处理器(download handler)或 process_request() (下载中间件)抛出异常:param response::param exception::param spider::return: None:继续交给后续中间件处理异常;Response对象:停止后续process_exception方法Request对象:停止中间件,request将会被重新调用下载"""return None

配置方法:

DOWNLOADER_MIDDLEWARES = {#'xdb.middlewares.XdbDownloaderMiddleware': 543,# 'xdb.proxy.XdbProxyMiddleware':751,'xdb.md.DownMiddleware1':666,'xdb.md.Md2':667,
}

应用:

- user-agent
- 代理 

转载于:https://www.cnblogs.com/L5251/articles/9276341.html

爬虫基础12(框架Scrapy中间件)相关推荐

  1. 【视频教程免费领取】聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎

    领取方式 关注公众号,发送Python0407获取下载链接. 扫码关注公众号,公众号回复 Python0407 获取下载地址 目录结构 目录:/读书ReadBook [57.6G] ┣━━48G全套J ...

  2. 爬虫基础篇之Scrapy抓取京东

    虚拟环境 同一台服务器上不同的项目可能依赖的包不同版本,新版本默认覆盖旧版本,可能导致其他项目无法运行,通过虚拟环境,完全隔离各个项目各个版本的依赖包,实现运行环境互不影响. virtualenv p ...

  3. Python爬虫基础:安装Scrapy爬虫框架和创建Scrapy爬虫项目

    首先为了避免国外镜像不稳定,我们使用了清华大学的python库镜像:https://pypi.tuna.tsinghua.edu.cn/simple 1.安装scrapy 1.1.安装pywin32( ...

  4. 爬虫基础(五)-----scrapy框架简介

    ---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...

  5. 爬虫基础分享Scrapy框架流程图与安装

    从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑.所以,我们一起 ...

  6. python的scrapy框架的安装_Python爬虫基础(四)--Scrapy框架的安装及介绍

    Scrapy框架的介绍 安装: pip3 install Scrapy 安装测试: cmd命令行界面,输入:scrapy -h 框架安装完成: scrapy框架: 分为五个模块+两个中间件(5+2结构 ...

  7. Python基础知识回顾及scrapy框架爬虫基础

    1.函数 函数参数:必须 默认 关键 可变 函数种类:外部 内部 匿名 lambda 装饰函数:@语法糖 函数总是要返回的 ,若没有return,None总是被返回   2.面向对象: 对象:已存在, ...

  8. 爬虫框架scrapy之中间件

    中间件是Scrapy里面的一个核心概念.使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫. "中间件"这个中文名字和前面章节讲到 ...

  9. python爬虫scrapy安装_零基础写python爬虫之爬虫框架Scrapy安装配置

    前面十章爬虫笔记陆陆续续记录了一些简单的Python爬虫知识, 用来解决简单的贴吧下载,绩点运算自然不在话下. 不过要想批量下载大量的内容,比如知乎的所有的问答,那便显得游刃不有余了点. 于是乎,爬虫 ...

最新文章

  1. JS调用PageMethods(转)
  2. HashTree(哈希树) ——和trie类似,只是将字符换成了质数,sphinx用到了???...
  3. 基于nginx和uWSGI在Ubuntu系统上部署Django项目
  4. php html 转xml,用PHP生成XML文档(转义字符)
  5. Codeforces Round #700 (Div. 2) C. Searching Local Minimum 交互二分
  6. STM8学习笔记---读取STM8S003单片机序列号
  7. Web Service视频分享
  8. Eclipse查看JDK源码报错——Failed to create the part’s controls
  9. Linux Centos date使用心得
  10. lock free(无锁并发)是什么
  11. Miracast/WIDI浅谈
  12. 如何使用MSGEQ7音频频谱分析仪芯片
  13. 值得收藏!教你如何在火星直播中使用分享码
  14. 第三方平台通过钉钉扫码登录实现方案
  15. android照片同步到另一部手机,换手机后怎么把照片转移到新手机上?
  16. POJ1260 Pearls(多重捆绑成0-1背包)
  17. 计算机科学技术学院迎新晚会主题,我校计算机科学与技术学院举行迎新晚会
  18. Facebook营销策略大全,脸书营销技巧详细教程
  19. 数据分析之 —— 常用的统计学指标
  20. SSOP48的定位尺寸

热门文章

  1. mysql--MySQL数据库的简单认识
  2. 插入排序(边输边排)
  3. Remove Duplicates from Sorted Array II
  4. Hibernate ‍java.lang.ClassCastException ERROR解决方法
  5. VC++ 2005 使用BOOST库和WinPcap库
  6. Spark源码分析之MemoryManager
  7. Hive 之 导入导出数据
  8. curl http_code 状态码 意义及信息
  9. 基于FPGA实现压缩算法
  10. c++ vector排序_个性化推荐系统源代码之基于LR模型的推荐系统离线排序方案