代码之家  ›  专栏  ›  技术社区  ›  Ian Robinson

创建web爬虫程序时的关键注意事项是什么?

  •  11
  • Ian Robinson  · 技术社区  · 17 年前

    我想使用一个爬虫在“web”上漫游,目的非常简单——“站点XYZ的标记是否满足条件ABC?”。

    • 从一开始就感觉有点“不确定”——这种事情可以接受吗?
    9 回复  |  直到 12 年前
        1
  •  9
  •   Will Dean    17 年前

    遵守robots.txt(并且不要像已经说过的那样太咄咄逼人)。

        2
  •  3
  •   Ricardo Reyes    17 年前

    除了Willden和Einar的好答案之外,我真的建议您花点时间阅读HTTP响应代码的含义,以及当您的爬虫程序遇到每一个响应代码时应该做什么,因为这将对您的性能产生很大的影响,以及您是否被禁止访问某些站点。

    一些有用的链接:

    HTTP/1.1: Status Code Definitions

    Aggregator client HTTP tests

    Wikipedia

        3
  •  3
  •   ceejayoz    17 年前

    请确保在您的用户代理字符串中包含一个URL,用于解释您的机器人正在爬行的人/事/原因。

        4
  •  3
  •   user9569    17 年前

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

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

    您还应该考虑使用开源机器人爬虫代码,因为它在所有这些问题上为您提供了巨大的帮助。关于这一点,我也有一页: open source robot code

        5
  •  3
  •   the Tin Man    13 年前

    另外,不要忘记遵守bot元标记: http://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.2

        6
  •  2
  •   Einar    17 年前

    我认为考虑一下你造成的负担是非常重要的。例如,如果爬虫程序同时或多或少地请求单个站点的每个对象,则可能会导致该特定站点的负载问题。

    换句话说,确保你的爬虫不是太有攻击性。

        7
  •  2
  •   Ross    17 年前

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

    <link> <script src="..."></script> 对于Java脚本。

        8
  •  2
  •   Sean    17 年前

    负载是一个很大的考虑因素。限制你抓取某个特定站点的频率,以及完成目标所需的最基本信息。如果你正在寻找文本,不要下载所有的图片,诸如此类的东西。

        9
  •  2
  •   MarkR    17 年前

    您需要在黑名单站点/域或其他内容(IP范围、ASN等)中添加一些功能,以避免您的爬行器陷入垃圾邮件站点的泥潭。

    您需要有一个HTTP实现,能够对超时和行为进行大量控制。期望很多站点发回无效的响应、巨大的响应、垃圾头,或者只是让连接无限期地打开而没有响应等等。

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