创建网络搜寻器时,有哪些主要注意事项?
我今天才开始考虑创建/自定义网络爬虫,而对网络爬虫/机器人礼节知之甚少。我发现的关于礼节的大多数著作似乎过时且笨拙,因此我想从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文档)。