What are the key considerations when creating a web crawler?我今天才开始考虑创建/自定义网络爬虫,对网络爬虫/机器人礼仪知之甚少。我发现的大部分关于礼仪的著作都显得陈旧而笨拙,所以我想从 Web 开发人员社区获得一些当前(和实用)的见解。 我想使用爬虫来遍历"网络",目的非常简单——"XYZ 站点的标记是否满足条件 ABC?"。 这对我提出了很多问题,但我认为我首先需要解决的两个主要问题是:
遵守 robots.txt(不要像已经说过的那样过于激进)。 您可能需要考虑一下您的用户代理字符串 - 它们是您提前了解您正在做什么以及如何联系您的好地方。 所有的优点,都是在这里提出的。您还必须处理动态生成的 Java 和 JavaScript 链接、参数和会话 ID、转义单引号和双引号、相对链接尝试失败(使用 ../../ 越过根目录)、区分大小写、框架、重定向、cookie.... 我可以坚持几天,而且有点。我有一份涵盖大部分内容的机器人检查表,我很乐意尽我所能回答。 您还应该考虑使用开源机器人爬虫代码,因为它可以帮助您解决所有这些问题。我也有一个页面:开源机器人代码。希望有帮助! 也不要忘记遵守机器人元标记:http://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.2 另一件要考虑的事情——当蜘蛛页面时,不要太草率地决定事情不存在或有错误。由于维护工作或在短时间内更正的错误,某些页面处于脱机状态。 请务必在您的用户代理字符串中包含一个 URL,该 URL 解释了您的机器人正在抓取的对象/内容/原因。 除了 WillDean\\'s 和 Einar\\'s good answers 之外,我真的建议你花点时间阅读 HTTP 响应代码的含义,以及你的爬虫在遇到每个响应代码时应该做什么,因为它会使对您的表现有很大影响,以及您是否被某些网站禁止。 一些有用的链接: HTTP/1.1:状态码定义 聚合器客户端 HTTP 测试 维基百科 您需要添加一些功能来将站点/域或其他内容(IP 范围、ASN 等)列入黑名单,以避免您的蜘蛛陷入垃圾邮件站点。 您需要有一个对超时和行为进行大量控制的 HTTP 实现。预计很多网站会发回无效响应、大量响应、垃圾标题,或者只是无限期地保持连接打开而没有响应等。 也不要相信 200 状态意味着"页面存在"。根据我的经验,相当大比例的网站会因"未找到"或其他错误而返回 200(以及大型 HTML 文档)。 负载是一个重要的考虑因素。限制抓取特定网站的频率以及实现目标所需的最基本信息。如果您正在寻找文本,请不要下载所有图像,诸如此类。 当然要遵守 robots.txt,但也要确保您的用户代理字符串包含准确的联系信息,也许还有一个指向描述您正在做什么以及如何做的网页的链接。如果网络管理员看到您的大量请求并且很好奇,您也许可以通过信息丰富的网页回答很多问题。 这是完全可以接受的——只要确保它在每个会话中只访问每个页面一次。当您在技术上创建搜索机器人时,您必须遵守 robots.txt 和 据我所知,您只是在寻找源代码,因此您需要构建一些东西来遵循 我会说,考虑你造成了多少负载是非常重要的。例如,如果您的爬虫请求单个站点的每个对象,或多或少一次,它可能会导致该特定站点的负载问题。 换句话说,确保你的爬虫不太激进。 |