如何重新安排在scrapy中稍后要抓取​​的403 HTTP状态代码?

Rah*_*hul 8 python scrapy web-scraping

根据这些说明,我可以看到HTTP 500错误,连接丢失错误等总是被重新安排,但是如果403错误被重新安排,或者它们被简单地视为有效响应或在达到重试限制后被忽略,我找不到任何地方.

同样来自同一指令:

一旦蜘蛛完成了对所有常规(非失败)页面的爬行,在抓取过程中收集失败的页面并在结束时重新安排.一旦没有更多失败的页面重试,该中间件就会发送一个信号(retry_complete),因此其他扩展可以连接到该信号.

这些Failed Pages是指什么?它们包含403错误吗?

此外,当scrapy遇到HTTP 400状态时,我可以看到引发此异常:

2015-12-07 12:33:42 [scrapy] DEBUG: Ignoring response <400 http://example.com/q?x=12>: HTTP status code is not handled or not allowed
Run Code Online (Sandbox Code Playgroud)

从这个例外情况来看,我认为很明显HTTP 400响应被忽略而不是重新安排.

我不确定403 HTTP状态是否被忽略或重新安排在最后被抓取.所以我尝试根据这些文档重新安排具有HTTP状态403的所有响应.这是我到目前为止所尝试的:

在middlewares.py文件中:

def process_response(self, request, response, spider):
    if response.status == 403:
        return request
    else:
        return response
Run Code Online (Sandbox Code Playgroud)

在settings.py中:

RETRY_TIMES = 5
RETRY_HTTP_CODES = [500, 502, 503, 504, 400, 403, 404, 408]
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这些Failed Pages是指什么?它们包含403错误吗?
  2. 我是否需要写入process_response重新安排403错误页面,还是通过scrapy自动重新安排?
  3. 什么类型的异常和(HTTP代码)由scrapy重新安排?
  4. 如果我重新安排404错误页面,我是否会进入无限循环或是否有超时,之后重新安排将不会进一步完成?

eLR*_*uLL 10

  1. 您可以在此处找到要重试的默认状态.

  2. RETRY_HTTP_CODESsettings.py文件中添加403 应该处理该请求并重试.

  3. 在里面的那些RETRY_HTTP_CODES,我们已经检查了默认的.

  4. RETRY_TIMES手柄多少次尝试错误页面,默认情况下它被设置为2,您可以覆盖它的settings.py文件.