创建网络搜寻器时,有哪些主要注意事项?

时间:2020-03-05 18:44:23  来源:igfitidea点击:

我今天才开始考虑创建/自定义网络爬虫,而对网络爬虫/机器人礼节知之甚少。我发现的关于礼节的大多数著作似乎过时且笨拙,因此我想从Web开发人员社区中获得一些最新的(实用的)见解。

我想使用爬虫在"网络"上浏览,以实现一个超简单的目的:"网站XYZ的标记是否满足条件ABC?"。

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

  • 一开始感觉有点"浮躁"-这种事情可以接受吗?
  • 爬网程序应采取哪些特定的注意事项才能使人不烦恼?

解决方案

回答

我想说,考虑造成的负载非常重要。例如,如果搜寻器一次或者多或者少地请求一个站点的每个对象,则可能会导致该特定站点的负载问题。

换句话说,请确保搜寻器不太激进。

回答

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

我们可能想考虑一下用户代理字符串,这是一个预先了解我们在做什么以及如何与我们联系的好地方。

回答

只需确保每次访问每个页面只访问一次即可,这是完全可行的。从技术上来说,在创建搜索机器人时,我们必须遵守robots.txt和"无缓存"规则。人们仍然可以根据需要通过阻止IP来专门阻止漫游器。

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

回答

负载是一个很大的考虑因素。限制爬网特定站点的频率以及实现目标所需的最基本信息是什么。如果我们要查找文本,请不要下载所有图像,诸如此类。

当然,请遵守robots.txt,但还要确保用户代理字符串中包含准确的联系信息,并且可能还包含指向网页的链接,该链接描述了工作方式和操作方式。如果网络管理员看到大量请求,并且很好奇,我们也许可以通过内容丰富的网页回答很多问题。

回答

除了WillDean和Einar的好答案之外,我真的建议我们花些时间阅读HTTP响应代码的含义,以及搜寻器在遇到每个响应时应该做的事情,因为这将对性能产​​生很大的影响,并且无论我们是否被禁止访问某些网站。

一些有用的链接:

HTTP / 1.1:状态代码定义

聚合器客户端HTTP测试

维基百科

回答

请确保在用户代理字符串中包含一个URL,该URL可以解释机器人在爬行谁/什么/为什么。

回答

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

蜘蛛页面时要考虑的另一件事,不要太仓促地决定不存在或者有错误。由于维护工作或者短期内已纠正的错误,某些页面处于脱机状态。

回答

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

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

我们还应该考虑使用开放源代码的机器人搜寻器代码,因为它可以使我们在所有这些问题上大有作为。我也有一个页面:开源机器人代码。希望对我们有所帮助!

回答

我们将需要在网站/域或者其他事物(IP范围,ASN等)的黑名单中添加一些功能,以避免蜘蛛陷入垃圾邮件站点的泥潭。

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

也不要信任200状态表示"该页面存在"。根据我的经验,相当多的网站会向200个网站发送"找不到"或者其他错误的信息(伴随着一个大型HTML文档)。