我一直在阅读关于网络抓取的内容并获得了一个充满考虑因素的列表,但有一个问题我还没有找到任何讨论。
为任何指定网站提取robots.txt的频率是多少?
我的方案是,对于任何特定网站,每天可能有100页非常缓慢的抓取。 让我们说一个网站添加了一个新的部分(/ human-only /),其他页面链接到该部分。同时在robots.txt中添加相应的行。在更新robots.txt之前,蜘蛛可能会找到指向此部分的链接。
有趣的是写下问题给出了解决方案。 在制定上述问题时,我想到了一个解决方案。
robots.txt很少更新,比如每天一次。 但是所有新发现的链接都应该保留在队列中,直到robots.txt的下次更新为止。 robots.txt更新后,现在可以抓取所有通过的待处理链接。
有关此的任何其他想法或实践经验吗?
答案 0 :(得分:5)
所有大型网络抓取工具都会在一段时间内缓存robots.txt。有一天很常见,过去我见过的时间长达一周。我们的抓取工具的最长缓存时间为24小时。在实践中,除了我们经常抓取的网站之外,它通常少于那个。
如果您保留链接以等待robots.txt的未来版本,那么您将在抓取时添加24小时的人为延迟。也就是说,如果您今天抓取我的网站,那么您必须在再次下载我的robots.txt文件之前保留所有这些链接长达24小时,并确认当时允许您抓取的链接。而且你可能会错,因为你是对的。假设发生以下情况:
2011-03-08 06:00:00 - You download my robots.txt
2011-03-08 08:00:00 - You crawl the /humans-only/ directory on my site
2011-03-08 22:00:00 - I change my robots.txt to restrict crawlers from accessing /humans-only/
2011-03-09 06:30:00 - You download my robots.txt and throw out the /humans-only/ links.
在您抓取时,您被允许访问该目录,因此您发布链接没有问题。
您可以使用下载robots.txt时Web服务器返回的上次修改日期来确定当时是否允许您读取这些文件,但是在返回上次修改日期时会有很多服务器谎言。一些大的百分比(我不记得它是什么)总是将当前日期/时间作为最后修改日期返回,因为它们的所有内容(包括robots.txt)都是在访问时生成的。
此外,将此限制添加到您的机器人意味着即使您不打算抓取其网站,也必须再次访问他们的robots.txt文件。否则,链接将在缓存中萎缩。您提出的技术会引发许多您无法优雅处理的问题。您最好的选择是使用手头的信息进行操作。
大多数网站运营商都了解robots.txt缓存,如果您的机器人在robots.txt更改后24小时内访问其网站上的受限目录,则会看到另一种方式。当然,提供的是您没有阅读robots.txt,然后继续抓取受限制的页面。在那些质疑这种行为的少数人中,对发生的事情的简单解释通常就足够了。
只要您对爬虫正在做什么开放,并为网站运营商提供与您联系的方式,大多数误解都很容易纠正。有几个人 - 很少 - 会指责你进行各种邪恶的活动。与他们最好的赌注是为导致问题而道歉,然后阻止你的机器人访问他们的网站。