我使用scrapy抓取douban.com'中的用户页面。 我的数据库中有2W用户,我需要抓取所有这些独立用户'页面。
但问题是,有时网站会阻止我的抓取工具,如果我立即注意到,我可以通过Ctrl + C手动关闭蜘蛛并重启蜘蛛并继续前进。 在模拟这种行为的过程中,我遇到了很多问题,我有两个想法,如下所示:
if response.status == 403: reactor.callLater(0, lambda: time.sleep(60))
这不起作用,因为睡眠不会导致连接关闭,无论它睡多久,它都不会像手动重启蜘蛛一样。
所以我不知道如何完全暂停scrapy并自动重启。
答案 0 :(得分:0)
您可以使用 errback 这些令人讨厌的请求,例如
return Request(url, callback=parse, errback=error_handler)
并像这样定义你的错误处理程序
def error_handler(self, failure):
time.sleep(time_to_sleep) //time in seconds
//after time expires, send next request
它将处理200以外的所有响应状态。