如何处理http状态码没有发出信号的临时错误?

2024-09-26 22:54:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Scrapy(Python)编写一个爬虫程序,不知道如何处理某些错误。你知道吗

我有一个网站,有时返回一个空的机构或一个正常的网页与错误信息。两个回复都带有标准的200http状态码。你知道吗

当我遇到这种情况时,我想做的是告诉斯拉皮

  • 不要将响应保存到缓存(我使用的是HTTPCACHE_ENABLED = True),因为成功请求的内容看起来不同
  • 重新安排请求
  • 降低请求速率(我正在使用AUTOTHROTTLE_ENABLED = True

有没有一种简单的方法,比如在laraise scrapy.TemporaryError中引发某个异常,或者我必须手动执行所有操作。在后一种情况下,如何从缓存中删除内容或与自动油门模块通话?你知道吗

我知道我可以对请求使用dont_cache来不缓存它们。但通常我确实想缓存我的请求,并且只有在我想保留它时才决定响应。文档也不清楚这个标志是否避免了将请求的响应保存到缓存或者如果它也避免了从缓存读取请求。。。你知道吗

Autothrottle使用下载延迟来调整请求速率。throttling algorithm将非200响应视为失败响应,并且不减少下载延迟。但是,我的请求返回200个状态码。所以自动油门无法处理这种情况。必须有一种方法告诉autothrottle使用其限制逻辑,并将这些特定请求视为失败。你知道吗


Tags: 方法程序true网页内容机构网站速率
1条回答
网友
1楼 · 发布于 2024-09-26 22:54:24

在您的响应中,您可以检查一个条件并决定重新排列URL。你知道吗

requests disappear after queueing in scrapy

def parse(self, response):
    if blank_data or should_rescrape:
       yield Request(respone.url, dont_filter=True, callback=self.response)

动态调整油门

如果您选中self.crawler.extensions.middlewares,您将看到它已经加载了所有扩展

对我来说

self.crawler.extensions.middlewares[5]给出<scrapy.extensions.throttle.AutoThrottle object at 0x10b75a208>(当然,您将循环遍历元组并找到属于AutoThrottle类型的元组)

Throttling

现在您可以使用这个对象并在scraper中动态调整值

相关问题 更多 >

    热门问题