我有一个正在生产的搜索引擎,为大约 700 000 个网址提供服务。爬行是使用 Scrapy 完成的,所有蜘蛛程序都使用 DeltaFetch 进行调度,以便获取每日新链接。
我面临的困难是处理损坏的链接。
我很难找到一种定期扫描和删除损坏链接的好方法。我正在考虑一些解决方案:
- 使用 requests.get 开发 python 脚本,检查每个 URL,并删除任何返回 404 状态的内容。
- 使用第三方工具,例如https://github.com/linkchecker/linkchecker https://github.com/linkchecker/linkchecker,但不确定这是否是最好的解决方案,因为我只需要检查网址列表,而不是网站。
- 使用 scrapy 蜘蛛抓取此 url 列表,并返回任何出错的 url。我对此不太有信心,因为我知道 scrapy 在扫描不同域上的大量 url 时往往会超时,这就是我如此依赖 deltafetch 的原因
您有解决此问题的建议/最佳实践吗?
多谢。
编辑:我忘了给出一个精度:我正在寻找“验证”这 700k 网址,而不是抓取它们。实际上,这 70 万个 URL 是大约 250 万个域名的爬行结果。
您可以编写一个小脚本来检查返回的 http 状态,如下所示:
for url in urls:
try:
urllib2.urlopen(url)
except urllib2.HTTPError, e:
# Do something when request fails
print e.code
这与你的第一点相同。您还可以运行此异步,以优化运行 700k 链接所需的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)