scrapy 获取http错误代码并将网圵写入日志的2种方法

[scrapy] 2024-04-27 圈点958

摘要:scrapy正常情况下,会对访问正常的网页进行采集处理。但是对于400以上的http错误的页面忽视,也就是不采取任何动作。这个时候,就有可能忽略掉一些有用的页面。应该记录下来。scrapy 获取http错误代码并将网圵写入日志的2种方法

scrapy正常情况下,会对访问正常的网页进行采集处理。但是对于400以上的http错误的页面忽视,也就是不采取任何动作。这个时候,就有可能忽略掉一些有用的页面。应该记录下来,甚至是再重新载入队列进行采集。其实很多时候,本来正常的页面,经常会因为一些特殊原因,而出现502等错误,至少应该记录下来,以供记录并下次采集。


scrapy 获取http错误代码并将网圵写入日志的2种方法:

1,在spider class 中写handle_httpstatus_list

操作方法:

在spider class中,加入:

handle_httpstatus_list = [500,502,503,504,400,403,404,408]


然后在第一个pause()中进行判断和处理

if response.status == 500:

pass

elif:

pass


解释:其实scrapy 默认是忽视这些http错误码的,这样设置后,将其继续下去。所以一定要注意后续的逻辑。


注意:官方说明中强烈提示,如果你知道自己在做什么,否则不要这样处理。确实如此,如果不懂其中的逻辑,其非常有可能造成未知的情况。


2,在Middleware.py中 创建class,在其中进行判断处理。

1)在middleware.py中创建:

class Faillog(object):
   @classmethod
def from_crawler(cls, crawler):
return cls()

def process_response(self, request, response, spider):
if response.status >= 400:
reason = response.status
self._faillog(request, u'HTTPERROR',reason, spider)
return response

def process_exception(self, request, exception, spider):
self._faillog(request, u'EXCEPTION', exception, spider)
return request

def _faillog(self, request, errorType, reason, spider):
with open('logfail.log', 'a') as file:
file.write("%(now)s [%(error)s] %(url)s reason: %(reason)s \r\n" %
{'now':time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()),
'error': errorType,
'url': request.url,

'reason': reason}

复制进来的内容,格式有点错误。测试OK!


2)setting中设置

DOWNLOADER_MIDDLEWARES中添加

'dy.middlewares.Faillog':520,


这个数字要稍大,如果太小,可能会抓取不到500后边的代码。比如1,就只能抓到400左右的代码,500后的代码会收集不到。

即可啦。

scrapy  http错误代码  

感谢反馈,已提交成功,审核后即会显示