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

Web crawler 创建web爬虫程序时的关键注意事项是什么?,web-crawler,Web Crawler,我今天刚开始考虑创建/定制一个网络爬虫,对网络爬虫/机器人礼仪知之甚少。我发现大多数关于礼仪的文章都显得陈旧而笨拙,因此我想从web开发人员社区获得一些最新的(实用的)见解 我想使用一个爬虫在“web”上漫游,目的非常简单——“站点XYZ的标记是否满足条件ABC?” 这给我提出了很多问题,但我认为我首先需要回避的两个主要问题是: 从一开始就感觉有点“不确定”——这种事情可以接受吗 爬虫应该采取什么具体的考虑来避免让人不安 我想考虑一下你造成的负荷是非常重要的。例如,如果爬虫程序同时或多或少地请

我今天刚开始考虑创建/定制一个网络爬虫,对网络爬虫/机器人礼仪知之甚少。我发现大多数关于礼仪的文章都显得陈旧而笨拙,因此我想从web开发人员社区获得一些最新的(实用的)见解

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

这给我提出了很多问题,但我认为我首先需要回避的两个主要问题是:

  • 从一开始就感觉有点“不确定”——这种事情可以接受吗
  • 爬虫应该采取什么具体的考虑来避免让人不安

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

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

    服从robots.txt(并且不像已经说过的那样太有攻击性)


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

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


    就我所知,您只是在寻找源代码,因此您需要为样式表和Java脚本构建一些遵循
    的东西。

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


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

    除了Willden和Einar的好答案之外,我真的建议你花点时间阅读HTTP响应代码的含义,以及当你的爬虫遇到每一个响应代码时应该做什么,因为这会对你的表现产生很大的影响,而且你是否会被禁止进入某些网站

    一些有用的链接:


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

    也不要忘记遵守机器人元标记:


    另一件要考虑的事情是,当蜘蛛网页出现时,不要太匆忙地判断事物不存在或存在错误。由于维护工作或在短时间内纠正的错误,某些页面处于脱机状态。

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

    我可以坚持几天,而且有点。我有一个涵盖了大部分内容的答案,我很高兴能尽我所能回答


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

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

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


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

    将联系信息放入用户代理是向网站经理介绍您的蜘蛛的一个很好的方法,通过输入联系信息,可以明显地看出您是友好的、光明磊落的。如果他们对你访问他们的网站有问题,如果他们能联系到你,你可能有机会和他们一起获得一个提要或API。混淆这些信息或无法提供这些信息,他们将立即使用ax并通过禁止您的域来切断您的访问。您将获得
    200
    的自定义错误页面,这些页面被困在他们的网站中,并在内部重定向到“嘿,此页面不存在,但我们告诉您,这对您很有帮助。”页面,如果我怀疑某个页面应该存在,因为它是由其他页面指向的,我会用代码将它插入到我的“重试”队列中,以便稍后再试。如果再次失败,计数器将递增,直到计数器超过重试限制,或者页面重新联机。