如何解决Scrapy-确保我从某个域中获取了所有页面/如何告诉我没有/如何做?
我有一只非常普通的蜘蛛,可以用来广泛爬行。我给它提供了数百个起始URL,限制了allowed_domains并使其变得疯狂(我正在遵循建议的“避免被禁止”措施,例如自动限制,禁止cookie,轮换用户代理,轮换代理等)。
一切都进展顺利,直到大约一周前,当一批起始URL包含一个相当大的已知域名时。幸运的是,那时我正在监视草稿,并注意到该大域只是“被跳过了”。在调查原因时,域似乎识别出我正在使用公共代理,并将我的初始请求403到了“ https://www.exampledomain.com/”,因此蜘蛛程序未找到任何要遵循的网址,因此没有该网域的网址被抓取了。
然后我尝试使用一组不同的代理和/或VPN,那次我可以抓取某些页面,但不久后就被禁止了。
问题在于,我需要将每一页都刮到3级。我不能错过任何一个。而且,您可以想象,在默认级别或第一级丢失请求可能会导致丢失大量的url或根本没有任何url被删除。
当页面在初始请求上失败时,很直截了当地说出问题。但是,当您一次从多个域中抓取数千个URL时,很难确定是否遗漏了任何URL。即使我确实注意到有403,并且我被禁止在那一刻做的唯一一件事似乎是要跨过我的手指并再次运行整个域,因为我不能说由于403而错过的网址(以及所有我将从更深层次获得的网址)没有从包含403ed网址的其他任何网址中抓取。
唯一想到的是,SOMEHOW收集失败的url,将它们保存到刮擦的末尾,保存为文件,将其设置为starting_urls,然后再次运行刮擦。但这会刮除之前成功刮除的所有其他页面。要防止这种情况,需要以某种方式传递成功抓取的网址列表,将其设置为拒绝。但这也不是一劳永逸的解决方案,因为有些页面即使未被禁止也会被403屏蔽,例如您需要登录才能查看资源等。
TLDR:如何确保我从某个域中抓取了所有页面?我怎么知道我没有?做这件事的最好方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。