【问题标题】:What are the key considerations when creating a web crawler?创建网络爬虫时的主要考虑因素是什么?
【发布时间】:2008-08-28 14:17:35
【问题描述】:

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

为了一个超级简单的目的,我想使用爬虫在“网络”上行走 - “网站 XYZ 的标记是否满足条件 ABC?”。

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

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

【问题讨论】:

    标签: web-crawler


    【解决方案1】:

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

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

    【讨论】:

    • 将联系信息放入用户代理中是向站点管理员介绍您的蜘蛛的好方法,通过放入您的联系信息,可以明显看出您是友好和光明正大的。如果他们在访问他们的网站时遇到问题,如果他们可以联系到您,您可能有机会与他们合作以获取提要或 API。混淆该信息或未能提供该信息,他们将立即采取行动并通过禁止您的域来切断您的访问权限。
    【解决方案2】:

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

    一些有用的链接:

    HTTP/1.1: Status Code Definitions

    Aggregator client HTTP tests

    Wikipedia

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        我可以坚持几天,而且有点。我有一个 Robots Checklist 涵盖了大部分内容,我很乐意尽我所能回答。

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 如果我怀疑一个页面应该存在,因为它被其他页面指向,我会有代码将它插入我的“重试”队列,所以我可以稍后再试一次。如果再次失败,计数器会增加,直到计数器超过我的重试限制,或者页面重新联机。
          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

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

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

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

                【讨论】:

                • 您将收到 200 用于自定义错误页面,这些页面被困在他们的网站内并在内部重定向到“嘿,此页面不存在,但我们告诉您这样对您有所帮助。”页面,这对蜘蛛的作者一点帮助都没有。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-08-22
                • 1970-01-01
                • 1970-01-01
                • 2010-11-23
                相关资源
                最近更新 更多