当前位置: 首页 > news >正文

网站在线布局计算机网站开发是那个语言

网站在线布局,计算机网站开发是那个语言,网站设计排版怎么做,注册公司需要提供的资料及公司注册流程前言: 为什么要讲这个RetryMiddleware呢?因为他很重要~ 至少在你装配代理ip或者一切关于重试的时候需要用到!----最关键的是:大部分的教学视频里面,没有提及这个!!!! 正文: 源代码分析 这个RetryMiddleware是来自: from scrapy.downloadermiddlewares.retry import Retry…前言: 为什么要讲这个RetryMiddleware呢?因为他很重要~ 至少在你装配代理ip或者一切关于重试的时候需要用到!----最关键的是:大部分的教学视频里面,没有提及这个!!!! 正文: 源代码分析 这个RetryMiddleware是来自: from scrapy.downloadermiddlewares.retry import RetryMiddleware 我们可以看他的源码:(我已经添加了中文注释) class RetryMiddleware:EXCEPTIONS_TO_RETRY (defer.TimeoutError, # 等待超时错误TimeoutError, # 执行超时错误DNSLookupError, # DNS解析错误ConnectionRefusedError, # 连接被拒绝错误ConnectionDone, # 连接已关闭错误ConnectError, # 连接错误ConnectionLost, # 连接丢失错误TCPTimedOutError, # TCP超时错误ResponseFailed, # 响应失败错误IOError, # IO错误通常发生在HttpCompression中间件尝试解压缩空响应时TunnelError, # 隧道错误)def __init__(self, settings):if not settings.getbool(RETRY_ENABLED):raise NotConfiguredself.max_retry_times settings.getint(RETRY_TIMES)self.retry_http_codes set(int(x) for x in settings.getlist(RETRY_HTTP_CODES))self.priority_adjust settings.getint(RETRY_PRIORITY_ADJUST)classmethoddef from_crawler(cls, crawler):return cls(crawler.settings)def process_response(self, request, response, spider):if request.meta.get(dont_retry, False):return responseif response.status in self.retry_http_codes:reason response_status_message(response.status)return self._retry(request, reason, spider) or responsereturn responsedef process_exception(self, request, exception, spider):if isinstance(exception, self.EXCEPTIONS_TO_RETRY) and not request.meta.get(dont_retry, False):return self._retry(request, exception, spider)def _retry(self, request, reason, spider):max_retry_times request.meta.get(max_retry_times, self.max_retry_times)priority_adjust request.meta.get(priority_adjust, self.priority_adjust)return get_retry_request(request,reasonreason,spiderspider,max_retry_timesmax_retry_times,priority_adjustpriority_adjust,)这段代码是Scrapy框架中scrapy.downloadermiddlewares.retry模块中的RetryMiddleware类。它是重试下载器中间件用于处理下载请求的重试逻辑。 让我来逐行解释这段代码的注释和功能 EXCEPTIONS_TO_RETRY是一个元组包含了需要重试的异常类型。如果发生这些异常而且请求没有设置dont_retry元数据标志则会进行重试。__init__方法初始化重试中间件的参数。它从settings中获取配置信息包括是否启用重试、最大重试次数、重试的HTTP响应状态码和优先级调整。from_crawler是一个类方法用于从crawler对象获取设置创建RetryMiddleware实例并返回。process_response方法处理响应。如果请求的dont_retry元数据标志为True直接返回响应。如果响应的状态码在重试的HTTP响应状态码列表中使用_retry方法进行重试并返回重试请求否则返回响应本身。process_exception方法处理异常。如果发生的异常属于EXCEPTIONS_TO_RETRY类型并且请求的dont_retry元数据标志为False使用_retry方法进行重试。_retry方法执行实际的重试逻辑。它从请求的元数据中获取最大重试次数和优先级调整然后使用get_retry_request方法创建一个带有重试参数的新请求并返回该请求。 修改源代码: 为什么要修改这个源代码?因为,在修改他的时候,你能通过这个已经封装好的重试中间件,做很多自定义的事情!!! 修改后的代码:(这里以:对超过重试次数的ip在redis里面删除为例) from scrapy.downloadermiddlewares.retry import RetryMiddleware# 确保在 retry_times 用尽后仍然移除失败代理需要重写 RetryMiddleware class RedisRetryMiddleware(RetryMiddleware):继承并重写RetryMiddleware添加代理移除逻辑def __init__(self, settings):# Redis 实例化逻辑读取配置self.server redis.StrictRedis(hostsettings.get(REDIS_HOST),portsettings.get(REDIS_PORT),dbsettings.get(REDIS_DB)) #获取redis的链接设置self.proxy_key settings.get(REDIS_PROXY_KEY) #redis的key值super(RedisRetryMiddleware, self).__init__(settings)classmethoddef from_crawler(cls, crawler):# 读取爬虫配置的 RETRY_TIMESreturn cls(crawler.settings)def _retry(self, request, reason, spider):proxy request.meta.get(proxy)if proxy:# 代理失败删除代理self.server.srem(self.proxy_key, proxy)spider.logger.debug(fRemove Proxy: {proxy}. Reason: {reason})# 调用超类爬虫默认重试方法return super(RedisRetryMiddleware, self)._retry(request, reason, spider) 总结: from scrapy.downloadermiddlewares.retry import RetryMiddleware是用来导入Scrapy框架内置的RetryMiddleware中间件类。这个中间件类用于处理请求的重试逻辑当请求失败或遇到特定的异常时可以根据配置的参数进行自动重试。 在Scrapy-Redis中你可以根据需要使用RetryMiddleware来实现诸如以下功能 增加请求重试次数: 通过修改RETRY_TIMES设置项来增加请求的最大重试次数。处理HTTP响应错误: 可以配置RETRY_HTTP_CODES设置项指定需要重试的HTTP响应状态码。当相应的HTTP响应状态码出现时中间件会自动发起重试。自定义重试机制: 可以通过重写process_response和process_exception方法在特定条件下进行自定义的重试逻辑判断。例如可以根据响应内容确定是否需要重试或是自定义异常类型进行处理。调整请求优先级: 可以通过RETRY_PRIORITY_ADJUST设置项来调整重试请求的优先级使其具有比原始请求更高或更低的优先级。在分布式爬虫中使用: 在Scrapy-Redis中可以结合Redis数据库和分布式队列使用RetryMiddleware实现在集群中共享重试请求和状态。 总而言之RetryMiddleware是Scrapy框架提供的一个非常实用的中间件用于处理请求的重试可以根据需要进行配置和定制。在Scrapy-Redis中它常常被用来增加爬虫的容错性和稳定性确保爬取的数据的完整性和准确性。
http://www.hkea.cn/news/14460820/

相关文章:

  • 网站是用什么做的吗优秀网页设计
  • flash做网站步骤飞鱼crm系统官网
  • 支付通道网站怎么做一家专门做特卖的网站
  • 找南昌网站开发公司江门发布最新通告
  • 如何在网站上添加备案号wordpress和e
  • 大数据平台建站免费百度网站建设
  • 招商网站建设费用价格中国机械加工网官方网站
  • 网站上的弹框如何做网页高端网站建设 骆
  • 网站建设有关的职位北京南站地图
  • 轻饮食网络推广方案吉林百度seo公司
  • 做网站怎么买域名网站开发优秀论文
  • 网站无法排版网站建设与维护工资
  • 网站建设与运营公司主营业务收入与成本中国纪检监察报电子版阅读
  • 网站开发专业就业指导怎么做韩剧网站的翻译
  • 阿里企业网站托管企业简介内容
  • 做网站租服务器一年多少钱工作台
  • 忘记网站后台admin密码山西seo谷歌关键词优化工具
  • 贵阳网站app制作公司做网站的费用入账
  • 海南建设交易中心网站网站广告条素材
  • 建设企业网站登录入口宁波建站平台
  • 计算机应用技术网站建设白云网站 建设信科网络
  • 宁夏手机网站建设搜索引擎推广费用
  • 集团公司网站案例ps海报设计教程网页
  • 介绍自己做的电影网站重庆网络推广经理
  • 什么是网站建设需求分析深圳排名前十的跨境电商公司
  • vip影视网站如何做app温州做美食网站
  • 网站能自己做吗php网站栏目 添加和删除
  • 怎样进入当地建设局网站网龙网络公司校园招聘
  • 投资网站模版下载上海正规装修公司排名
  • 智能网站建设平台建筑工程网站哪个好