scrapy-redis 之处理异常
2024-10-01 03:58:19
今天心情不好 不想多打字 自己看注释吧
from scrapy.http import HtmlResponse
from twisted.internet import defer
from twisted.internet.error import TimeoutError, DNSLookupError, \
ConnectionRefusedError, ConnectionDone, ConnectError, \
ConnectionLost, TCPTimedOutError
from twisted.web.client import ResponseFailed
from scrapy.core.downloader.handlers.http11 import TunnelError class ProcessAllExceptionMiddleware(object):
ALL_EXCEPTIONS = (defer.TimeoutError, TimeoutError, DNSLookupError,
ConnectionRefusedError, ConnectionDone, ConnectError,
ConnectionLost, TCPTimedOutError, ResponseFailed,
IOError, TunnelError) def process_response(self, request, response, spider):
# 捕获状态码为40x/50x的response
if str(response.status).startswith('') or str(response.status).startswith(''):
# 随意封装,直接返回response,spider代码中根据url==''来处理response
response = HtmlResponse(url=str(response.status), status=200)
return response
# 其他状态码不处理
return response def process_exception(self, request, exception, spider):
# 捕获几乎所有的异常
if isinstance(exception, self.ALL_EXCEPTIONS):
# 在日志中打印异常类型
print('Got exception: %s' % (exception))
# 随意封装一个response,返回给spider
response = HtmlResponse(url='exception')
return response
# 打印出未捕获到的异常
print('not contained exception: %s' % exception)
然后根据返回的url不同就可以在spider中进行各种处理了
最新文章
- Message和handler传递对象
- photoshop cs5 key
- 模式的混合-我們真的需要一次一次的讀配置嗎-MultitonPrototypeFactoryMethod
- python2.X和3.X的一些区别【整理中】
- supervisor简介
- 为什么很多人用keepalived来实现redis故障转移
- PHP中::、->;、self、parent::、$this操作符的区别
- new jQuery.common
- JVM性能调优-GC内存模型及垃圾收集算法
- Web Service那点事
- Python中字符串切片操作
- 【转】AC算法详解
- UNIX网络编程——Socket粘包问题
- 创作型---原型模式(C# ICloneable接口的实现)
- June 2. 2018 Week 22nd Saturday
- [LeetCode] Wiggle Sort II 摆动排序之二
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) A,B,C
- 瀑布 敏捷 精益 devops
- leetcode-algorithms-28 Implement strStr()
- Spring事务传播属性介绍(一).required 和 reuqires_new