在创建网络爬虫时,可以使用哪些技术来检测所谓的“黑洞”(蜘蛛陷阱)?

时间:2010-12-22 19:31:14

标签: web-crawler

创建Web爬网程序时,您必须设计一些收集链接并将其添加到队列的系统。这些链接中的一些(如果不是大多数)将是动态的,这看起来是不同的,但是不添加任何值,因为它们是专门为欺骗爬虫而创建的。

示例:

我们通过输入初始查找网址告诉我们的抓取工具抓取域evil.com。

让我们假设我们最初让它爬到头版,evil.com/index

返回的HTML将包含几个“唯一”链接:

  • evil.com/somePageOne
  • evil.com/somePageTwo
  • evil.com/somePageThree

抓取工具会将这些添加到未抓取的网址的缓冲区中。

当抓取somePageOne时,抓取工具会收到更多网址:

  • evil.com/someSubPageOne
  • evil.com/someSubPageTwo

这些似乎是独一无二的,所以它们是独一无二的。它们是唯一的,因为返回的内容与以前的页面不同,并且URL对于爬虫来说是新的,但是看起来这只是因为开发人员已经制作了“循环陷阱”或“黑洞”。

抓取工具将添加此新子页面,子页面将具有另一个子页面,该子页面也将被添加。这个过程可以无限进行。每个页面的内容都是唯一的,但完全没用(它是随机生成的文本,或从随机源中提取的文本)。我们的抓取工具将继续查找我们实际上不感兴趣的新页面。

这些循环陷阱非常难以找到,如果您的抓取工具没有任何东西可以防止它们到位,它将会卡在某个域上以获得无穷大。

我的问题是,可以使用哪些技术来检测所谓的黑洞?

我听到的最常见的答案之一是对要抓取的网页数量的限制。但是,当您不知道要爬网的网站类型时,我无法看到这是一种可靠的技术。像维基百科这样的合法网站可以拥有数十万个网页。这种限制可能会对这类网站产生误报。

8 个答案:

答案 0 :(得分:16)

嗯,你问过非常具有挑战性的问题。有很多问题:

首先,您认为有人会做类似的事情来防止网络抓取吗?如果网络蜘蛛卡在这样的结构中,它就可以充当 DoS 攻击。

其次,如果页面是针对用户制作的,他们会如何对链接到随机生成的“垃圾网站”的大量无意义链接做出反应?这个链接对于用户来说应该是不可见的,或者是其中的一些,或者它们会以某种方式被隐藏 - 然后你应该检查,如果链接有显示:none,1 px font等。

第三,谷歌将如何表现?好吧,谷歌并没有为它所做的一切做好准备。它会添加到队列的链接,但不会立即跟随它们。他不喜欢关注深度引用的链接,这些链接没有链接到之前编入索引的页面。这使得他没有索引所有内容,但最终访问了用户最有可能访问的内容。否则, SEO 垃圾邮件发送者经常会使用您描述的此类页面;)

我会建立优先级队列。每个URL的每个链接都会增加1点优先级(更多,从主页面开始)。优先级为1的页面位于结束列表中。我会限制访问页数,所以在最坏的情况下,我会查看最重要的页面。我会怀疑那些含有太少内容的链接的页面。简而言之,尽可能多地模拟谷歌行为。

答案 1 :(得分:4)

任何解决方案都是最好的启发式方法,所以你必须满足于不太完美的结果。如果实施得当,我本以为页面限制方法会很好用。

您可以在不离开域的情况下限制要抓取的网页数;这并不会阻止所有页面被编入索引,因为如果蜘蛛在到达特定页面之前保释,则可能会有更多路径进入该页面“更接近”它,允许它到达在切断之前。

还要记住,如果没有这样的限制,蜘蛛很可能会被困在像维基百科这样的合法网站上很长一段时间,原因很简单,因为内容非常庞大。

答案 2 :(得分:4)

我认为没有一种解决方案来检测黑洞,因为有很多原因导致网站有充分理由创建无限数量的网页,并且很难对此类网站的内容说些什么。出于这个原因,我建议改变方法,以防止蜘蛛无限期地挖掘:

我认为制定一个策略会更好,每个页面都会分配一个页面排名值。链接也分配了一个值,所有相同的链接然后产生最终目标排名(搜索页面时的潜在回报)。

只允许蜘蛛爬行一段时间,如潜在回报所定义。现在蜘蛛被丢弃,我的数据被提升,并被提升并重新定位在需求所在的地方。

通过这种方式,服务器不会让它的蜘蛛被无限期地搜索页面,因为它们会不断被重新分配到需求最高的位置。

答案 3 :(得分:4)

如果您正在构建大型Web爬网程序,则采用以下方法是有意义的:

  • sitemap.xml中明确提到的第一个抓取链接或site map index file提到的站点地图文件。由于sitemap.xml预计不会超过50,000个网址,并且网站地图索引预计不会超过1000个索引文件,因此如果您先抓取这些链接,那么您会有理由这样做合理的网站内容索引。因为将更重要的URL放在站点地图中是有意义的。这可能高达5000万网址!这很多,我不确定会有很多网站拥有超过5000万网址。维基百科声称根据他们的活跃计数器有32,663,401页。因此,如果您遵循此方案,您至少可以抓取维基百科,这是一项成就(因为它需要一段时间)。请注意,此策略将帮助您仅抓取实际创建站点地图的网站,但更有可能的是,有用的网站会有站点地图!而不是那个没有的网站地图。

    < / LI>
  • 下一步可能是制作网站地图中未提及的网址列表(我们可以优先考虑稍后要抓取​​的网址)

  • 按照前两个步骤抓取其他网域。

  • 一旦你用完了要抓取的网域(如果你用完了要抓取的域名,这是一项非常成就!),那么你可以开始对所有网址进行网页排名,包括你所拥有的网址# 39; t爬行了(从第2步开始!)

  • 如果其他具有较高网页排名的外部网域已与其相关联,则第2步中的网址更有可能是有效的网址。因此,您可以优先处理要爬网的网址。如果没有外部域链接到第2步中的网址,则内容更有可能是访问该网页的人不是很有用,或者没有人访问该网页,或者它是蜘蛛陷阱。现在,可能没有任何外部域链接到它的URL没有链接到它,因为它之前从未被编入索引,并且没有人知道它存在。将此页面编入索引可能是值得的,但随着您向下深入&#34;,它所链接的页面应该被视为不那么重要。

  • 另一个有用的技巧(但更复杂)是检查页面上的文本/网址是否可读。有些网站试图通过使文本/网址与背景颜色相同来隐藏文本/网址,因此它们不会立即被人类看到,但可以用来欺骗机器。同样,可以使用CSS隐藏一些内容。这些应该被您的抓取工具/索引检测到,以降低特定网页的分数,并在确定下一个要抓取的网址时减少重要性。

  • 最后,一旦抓取完成,您需要开始下一轮抓取并重复上述过程!这次如果您发现外部域链接到步骤2中的URL,则其页面排名会上升!你现在可以深入钻探了!通过这种方式,您应该为更常见的内容提供相当好的索引,并避免使用蜘蛛陷阱。

我还没有提到的另一个步骤是&#34;处理/索引已抓取的内容&#34;。这是一个非常重要的步骤 - 但是因为你的问题更多是关于爬行而不是如何建立一个完整的信息检索系统,我之前没有提到它。

从自然语言处理的角度来看,大多数合法内容都是有意义的。例如,阅读页面的人可以立即判断该页面是否只是串在一起的随机单词的集合,或者它是否是试图表达想法的真实内容。通过处理来自&#34;已知&#34;的数据合法网站,可以建立一套关于特定语言应该如何看待的规则和启发式方法。如果特定链接包含乱码或真实内容,则可用于告知您的网络抓取工具。这可用于对网址进行评分,并确定跟进的重要程度。

如其他答案所述,您还可以散列每个网址的内容,以确定&#34;唯一性&#34;。相同的内容不需要再次为网址解析 - 这样可以避免重复使用相同内容的陷阱。自然语言处理应该可以帮助你避免随机乱码。

第三个问题是使用来自其他网站的合法内容动态创建的网页。这是一个更复杂的问题,但同样,您可以通过使用页面排名来减少这些问题。如果你真的可以建立一个可扩展的系统,它可以抓取互联网上每个域的站点地图中提到的所有网址,这是一个相当大的成就,也意味着你非常丰富和强大,因为你可能有数千台计算机处置。作为一个如此富有的人,你应该专注于更重要的事情,并让你的工程师把这些东西搞清楚。 XD

答案 4 :(得分:3)

内容是黑洞和合法网站之间的区别,如维基百科。虽然WP在维度上确实是一个巨大的网站,但每个URL都包含千字节的合法数据。蜘蛛陷阱站点可能同样“大”,但页面不会包含太多内容:浪费服务器资源和带宽产生大量乱码数据完全不合适,只是为了占用网络爬虫。

不是对网站的URL树的广度或深度设置上限(这会占用像WP这样的内容丰富的网站),而是跟踪扫描的页面数量,这些页面低于“有用大小”的某个楼层。然后,一旦计数超过可接受的限制,您就可以拉动蜘蛛上的弹出手柄。

答案 5 :(得分:1)

也许您可以添加要抓取的网址长度限制。

此外,大多数网络服务器都限制了网址的长度。所以你不应该无限循环。

找到关于此事的文件。不知道它是否仍然是up2date。

检查出来:http://www.boutell.com/newfaq/misc/urllength.html

此外,您可以限制页面的“深度”。

如domain.com/page/subpage/subsubpage/subsubsubpage/subsubsubsubpage/subsubsubsubsubpage/etc/etc/etc/etc/etc

答案 6 :(得分:1)

如果你MD5(the content of the URL)怎么办?

我知道这不是最精细的解决方案,但您可以检测到一些重复的内容。您必须创建一个唯一的md5字段(在数据库或类似文件中),并根据此字段检查每个网址内容。

如果页面在每个请求中有不同的内容(即:时间戳),则此解决方案将无效。

答案 7 :(得分:0)

一些设计不良的网站上的内容有时可能非常多余,但我认为没有任何合理的理由可以避免黑洞陷阱。

黑洞的目的是检测未能/拒绝遵守链接上的/robots.txt文件(如果存在)或rel =“nofollow”属性的机器人。此类机器人通常用于清除电子邮件地址和其他信息,以便向人们发送垃圾邮件或将这些数据出售给垃圾邮件发送者。

黑洞的链接通常是隐藏的,这样普通用户就不会意外地被困。它们也不是谷歌,必应等的问题,因为它们做网站所有者要求他们做的事情(即尊重所有者robots.txt)。唯一被困的人是那些没有提供 ^ &amp; @和设计不佳的抓取工具的人。