11

我今天才开始考虑创建/定制一个网络爬虫,对网络爬虫/机器人礼仪知之甚少。我发现的大部分关于礼仪的著作都显得陈旧而笨拙,所以我想从 Web 开发人员社区获得一些当前(和实用)的见解。

我想使用爬虫在“网络”上行走,目的非常简单——“网站 XYZ 的标记是否满足条件 ABC?”。

这对我提出了很多问题,但我认为我需要首先解决的两个主要问题是:

  • 从一开始就感觉有点“不确定”——这种事情可以接受吗?
  • 爬虫应该采取哪些具体考虑因素才能不让人们感到不安?
4

9 回答 9

9

遵守 robots.txt(不要像已经说过的那样过于激进)。

您可能想考虑一下您的用户代理字符串 - 它们是一个很好的地方,可以提前了解您正在做什么以及如何联系您。

于 2008-08-28T14:24:01.757 回答
3

除了 WillDean 和 Einar 的好答案之外,我真的建议您花点时间阅读 HTTP 响应代码的含义,以及您的爬虫在遇到每个响应代码时应该做什么,因为它会对您的性能产​​生很大影响,并且无论您是否被某些网站禁止。

一些有用的链接:

HTTP/1.1:状态码定义

聚合器客户端 HTTP 测试

维基百科

于 2008-08-28T14:55:07.127 回答
3

请务必在您的用户代理字符串中包含一个 URL,该 URL 解释了您的机器人正在爬行的人/内容/原因。

于 2008-08-28T15:48:06.687 回答
3

也不要忘记遵守机器人元标记:http ://www.w3.org/TR/html4/appendix/notes.html#hB.4.1.2

另一件要考虑的事情 - 当蜘蛛页面时,不要太草率地决定事情不存在或有错误。由于维护工作或在短时间内更正的错误,某些页面处于脱机状态。

于 2008-09-04T10:29:58.737 回答
3

所有的好点,都是在这里提出的。您还必须处理动态生成的 Java 和 JavaScript 链接、参数和会话 ID、转义单引号和双引号、相对链接尝试失败(使用 ../../ 越过根目录)、区分大小写、框架、重定向、cookies....

我可以持续几天,而且有点。我有一个涵盖大部分内容的机器人清单,我很乐意回答我能回答的问题。

您还应该考虑使用开源机器人爬虫代码,因为它可以帮助您解决所有这些问题。我也有一个页面: 开源机器人代码。希望有帮助!

于 2008-09-19T20:34:22.670 回答
2

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

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

于 2008-08-28T14:21:56.863 回答
2

这是完全可以接受的——只要确保每个会话只访问每个页面一次。当您在技术上创建搜索机器人时,您必须遵守 robots.txt 和no-cache规则。如果需要,人们仍然可以通过阻止 IP 来专门阻止您的机器人。

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

于 2008-08-28T14:43:28.747 回答
2

负载是一个很大的考虑因素。限制抓取特定网站的频率以及实现目标所需的最基本信息。如果您正在寻找文本,请不要下载所有图像,诸如此类。

当然要遵守 robots.txt,但也要确保您的用户代理字符串包含准确的联系信息,并且可能包含指向描述您正在做什么以及如何做的网页的链接。如果网络管理员看到您的大量请求并且很好奇,您也许可以通过信息丰富的网页回答很多问题。

于 2008-08-28T14:45:16.917 回答
2

您将需要添加一些功能以将站点/域或其他内容(IP 范围、ASN 等)列入黑名单,以避免您的蜘蛛陷入垃圾邮件站点。

您需要有一个对超时和行为进行大量控制的 HTTP 实现。预计很多网站会发回无效响应、大量响应、垃圾标题,或者只是无限期地保持连接打开而没有响应等。

也不要相信 200 状态意味着“页面存在”。根据我的经验,相当大比例的网站会因“未找到”或其他错误而返回 200(以及大型 HTML 文档)。

于 2008-09-19T20:38:12.100 回答