创建网络爬虫时的主要考虑因素是什么?

创建网络爬虫时的主要考虑因素是什么?

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 和 no-cache 规则。如果需要,人们仍然可以通过阻止 IP 来专门阻止您的机器人。

据我所知,您只是在寻找源代码,因此您需要构建一些东西来遵循 link 的样式表和 script src="..."/script 的 JavaScript。


我会说,考虑你造成了多少负载是非常重要的。例如,如果您的爬虫请求单个站点的每个对象,或多或少一次,它可能会导致该特定站点的负载问题。

换句话说,确保你的爬虫不太激进。


推荐阅读