我刚刚开始考虑创建/自定义网络爬虫,并且对网络爬虫/机器人礼仪知之甚少。我发现大多数关于礼仪的着作看起来都很古老而且很尴尬,所以我想从网络开发者社区获得一些当前(和实际)的见解。
我想使用爬虫来超越“网络”以达到超级简单的目的 - “网站XYZ的标记符合条件ABC吗?”。
这为我提出了很多问题,但我认为首先要解决的两个主要问题是:
答案 0 :(得分:9)
服从robots.txt(并没有像已经说过的那样过于激进)。
您可能想要考虑一下您的用户代理字符串 - 他们是您正在做的事情以及如何与您联系的好地方。
答案 1 :(得分:3)
除了WillDean和Einar的好答案之外,我还是建议您花些时间阅读HTTP响应代码的含义,以及您的抓取工具在遇到每个代码时应该做些什么,因为它会对您产生重大影响。一些网站禁止你的表现。
一些有用的链接:
答案 2 :(得分:3)
请确保在您的用户代理字符串中包含一个URL,用于说明您的机器人抓取的人/原因/原因。
答案 3 :(得分:3)
另外,请不要忘记遵守bot元标记:http://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.2
要考虑的另一件事 - 当蜘蛛页面,不要太仓促决定事情不存在或有错误。由于维护工作或在短时间内纠正的错误,某些页面处于脱机状态。
答案 4 :(得分:3)
所有优点,在这里制作的。您还必须处理动态生成的Java和JavaScript链接,参数和会话ID,转义单引号和双引号,相对链接失败尝试(使用../../超过根目录),区分大小写,框架,重定向,饼干....
我可以坚持几天,有点儿。我有Robots Checklist涵盖了大部分内容,我很乐意回答我的意思。
您还应该考虑使用开源机器人爬虫代码,因为它可以帮助您解决所有这些问题。我也有一个页面:open source robot code。希望有所帮助!
答案 5 :(得分:2)
我会说考虑你造成的负荷是非常重要的。例如,如果您的抓取工具一次或多或少地请求单个网站的每个对象,则可能会导致该特定网站出现负载问题。
换句话说,请确保您的抓取工具不会过于激进。
答案 6 :(得分:2)
完全可以接受 - 只需确保每次会话只访问每个页面一次。由于您在技术上创建了一个搜索机器人,因此您必须遵守robots.txt和no-cache
规则。如果需要阻止IP,人们仍然可以专门阻止您的机器人。
我只是在寻找源代码,因此你需要构建一些东西来跟随<link>
的样式表和<script src="..."></script>
的JavaScripts。
答案 7 :(得分:2)
负载是一个重要的考虑因素。限制您抓取特定网站的频率以及实现目标所需的最基本信息。如果您正在寻找文字,请不要下载所有图片,例如。
当然要遵守robots.txt,但也要确保您的用户代理字符串包含准确的联系信息,并且可能是指向描述您正在做什么以及如何执行操作的网页的链接。如果网络管理员看到了很多来自您的请求并且很好奇,那么您可以通过信息丰富的网页回答很多问题。
答案 8 :(得分:2)
您需要添加一些功能来将网站/域名或其他内容(IP范围,ASN等)列入黑名单,以避免您的蜘蛛陷入垃圾网站。
您需要拥有一个HTTP实现,它可以对超时和行为进行大量控制。期待很多网站发回无效响应,巨大响应,垃圾标题,或者只是无限期地保持连接打开而没有响应等。
也不要相信200状态意味着“页面存在”。根据我的经验(与大型HTML文档一起),相当大比例的网站发回200个“未找到”或其他错误。