Python 如何使用其他URL重试失败的刮取?
我有一个功能强大的刮板,可以从数据库中刮取大量网站,并将结果读取到同一个数据库中。我从数据库中获取域,并手动附加。在url上。即使此url不正确,绝大多数站点都可以正确重定向爬行器,但对于少数站点,我得到了DNSLookup错误,因为没有重定向,即使站点显然存在,并且可以通过浏览器访问Python 如何使用其他URL重试失败的刮取?,python,scrapy,Python,Scrapy,我有一个功能强大的刮板,可以从数据库中刮取大量网站,并将结果读取到同一个数据库中。我从数据库中获取域,并手动附加。在url上。即使此url不正确,绝大多数站点都可以正确重定向爬行器,但对于少数站点,我得到了DNSLookup错误,因为没有重定向,即使站点显然存在,并且可以通过浏览器访问 我的问题是,有没有一种方法可以使用不同的URL重试出现DNSLookup错误的刮取?我目前正在errback中处理我的错误,根据我遇到的错误类型向数据库插入必要的信息。有没有办法从刮取结果中请求新的刮取?当您向某
我的问题是,有没有一种方法可以使用不同的URL重试出现DNSLookup错误的刮取?我目前正在errback中处理我的错误,根据我遇到的错误类型向数据库插入必要的信息。有没有办法从刮取结果中请求新的刮取?当您向某个url发出请求时,除了
回调
,您还可以设置errback
,在那里您可以捕获此类情况。在官方文档中,您可以找到非常好的使用示例:
还要检查一下,也许
RetryMiddleware
符合您的目标。在这里查看官方文档中的scrapy
:当您向某个url发出请求时,除了回调
,您还可以设置errback
,在这里您可以捕获此类情况。在官方文档中,您可以找到非常好的使用示例:
还要检查一下,也许
RetryMiddleware
符合您的目标。查看官方文档中的scrapy
此处:您能提供一些您已经尝试过的代码示例吗?请参阅如何编写MCVE的指南。您可以提供一些您已经尝试过的代码示例吗?请参阅如何编写MCVE的指南谢谢您的回答。恐怕我的问题有点不清楚;我已经在使用errback捕捉错误了——我希望的是从errback重新启动一个scrape,使用与以前不同的start\u url。当我输入这个时,我意识到这是一个很多问题,可能没有一个简单的方法来做,但其他的选择需要在这一次对程序进行太多的重组。谢谢你的回答。恐怕我的问题有点不清楚;我已经在使用errback捕捉错误了——我希望的是从errback重新启动一个scrape,使用与以前不同的start\u url。当我输入这个时,我意识到这是一个很大的问题,可能没有一个简单的方法来做,但其他的选择需要在这个时候对程序进行太多的重组。
def start_requests(self):
for u in self.start_urls:
yield scrapy.Request(u, callback=self.parse_httpbin,
errback=self.errback_httpbin,
dont_filter=True)
def errback_httpbin(self, failure):
# log all failures
self.logger.error(repr(failure))
if failure.check(DNSLookupError):
# this is the original request
request = failure.request
self.logger.error('DNSLookupError on %s', request.url)