Scrapy-确保我从一个域获取所有页面/如何告诉我没有';怎么办?

Scrapy-确保我从一个域获取所有页面/如何告诉我没有';怎么办?,scrapy,http-status-code-403,Scrapy,Http Status Code 403,我有一只非常普通的蜘蛛,我可以用它来广泛爬行。我给它提供了几百个起始URL,限制了允许的_域,让它变得疯狂(我遵循建议的“避免被禁止”措施,如自动节流、无cookie、旋转用户代理、旋转代理等) 一切都进展顺利,直到一周前,这批起始URL包括一个相当大的已知域。当时,幸运的是,我正在监视刮取,并注意到大域刚刚“被跳过”。在调查原因时,域名似乎意识到我使用的是公共代理,并将我的初始请求发送到了'https://www.exampledomain.com/,因此爬行器没有找到任何要跟踪的URL,因此

我有一只非常普通的蜘蛛,我可以用它来广泛爬行。我给它提供了几百个起始URL,限制了允许的_域,让它变得疯狂(我遵循建议的“避免被禁止”措施,如自动节流、无cookie、旋转用户代理、旋转代理等)

一切都进展顺利,直到一周前,这批起始URL包括一个相当大的已知域。当时,幸运的是,我正在监视刮取,并注意到大域刚刚“被跳过”。在调查原因时,域名似乎意识到我使用的是公共代理,并将我的初始请求发送到了'https://www.exampledomain.com/,因此爬行器没有找到任何要跟踪的URL,因此没有为该域刮取URL

然后,我尝试使用一组不同的代理和/或VPN,当时我能够刮取一些页面,但不久就被禁止了

问题是我需要把每一页都刮到三层。我不能错过一个。此外,正如您所想象的,在默认或第一级缺少请求可能会导致缺少URL的未发送或根本没有URL被刮取

当一个页面在最初的请求中失败时,它会很直接地告诉您出了什么问题。然而,当你一次从多个域抓取数千个URL时,很难判断是否有遗漏。即使我注意到有403,我被禁止了,我唯一要做的事情似乎是交叉手指,再次运行整个域,因为我不能说由于403而错过的url(以及我从更深层次获得的所有url)没有从包含403 url的任何其他url中刮取

想到的唯一一件事就是以某种方式收集失败的URL,在scrape结束时将它们保存到一个文件中,使它们成为起始URL,然后再次运行scrape。但这会刮除以前成功刮除的所有其他页面。要防止这种情况发生,需要以某种方式传递一个成功抓取的URL列表,并将其设置为拒绝。但这也不是一个完全全的解决方案,因为尽管没有被禁止,仍有一些页面会被删除,比如需要登录才能查看的资源等


TLDR:如何确保从域中刮取所有页面?我怎么知道我没有?最好的解决方法是什么?

您是否检查了输出末尾的起始点?它们表示失败的请求、被忽略的响应、达到的最大重试次数等。这些应该包括了解是否无法获取某些内容的部分。是的,知道这些。但是想象一下,你会抓取十几个域名,每个域名都有上万页。从一开始就再次运行脚本不是一个选项。您是否考虑过使用
errback
为这些场景生成一个自定义项,指示URL和深度,以便以后可以从
start\u请求中读取这些项并对其进行爬网?这正是我最终要做的!