我有一个搜索引擎在生产服务约70万个网址。爬行是使用Scrapy完成的,所有spider都使用DeltaFetch进行调度,以便获得每日的新链接。在
我面临的困难是处理断开的链接。在
我很难找到一个好的方法定期扫描,并删除断开的链接。我在想一些解决办法:
- 使用开发python脚本请求.get,以检查每个url,并删除任何返回404状态的内容。在
- 使用第三方工具,如https://github.com/linkchecker/linkchecker,但不确定这是否是最佳解决方案,因为我只需要检查url列表,而不是网站。在
- 使用scrapy spider废弃这个url列表,并返回任何出错的url。我不太相信这一点,因为我知道scrapy在扫描不同域上的大量url时往往会超时,这就是为什么我如此依赖deltafetch
你有什么建议/最佳实践来解决这个问题吗?在
非常感谢。在
编辑:我忘了给出一个精度:我想“验证”那些700k个网址,而不是抓取它们。实际上,这700k个url是大约25000个域的爬行结果。在
Tags:
我建议使用scrapy,因为您已经用这个工具查找每个URL,从而知道哪些URL出错了。这意味着您不必再次检查url。在
我会这样做的:
因为你的第三个问题是担心Scrapy对URL结果的不稳定,所以对于一般的网站来说也是如此。如果一个站点在一次尝试中出错,可能并不意味着链接断开。在
您可以编写一个小脚本来检查返回的http状态,如下所示:
这和你的第一点一样。您也可以运行这个异步,以便优化运行700k个链接所需的时间。在
如果你想创建一个我们自己的脚本检查this solution
另外,我建议的一个优化是在URL存储库中建立层次结构。如果你从一个父URL得到404,你可以避免检查所有的it子URL
相关问题 更多 >
编程相关推荐