在创建Web爬网程序时,您必须设计一些收集链接并将其添加到队列的系统.这些链接中的一些(如果不是大多数)将是动态的,这看起来是不同的,但是不添加任何值,因为它们是专门为傻瓜爬虫创建的.
一个例子:
我们通过输入初始查找URL告诉我们的抓取工具抓取域evil.com.
让我们假设我们最初让它爬到头版,evil.com/index
返回的HTML将包含几个"唯一"链接:
抓取工具会将这些添加到未抓取的网址的缓冲区中.
在抓取somePageOne时,抓取工具会收到更多网址:
这些似乎是独一无二的,所以它们是独一无二的.它们是唯一的,因为返回的内容与以前的页面不同,并且URL对于爬虫来说是新的,但是看起来这只是因为开发人员已经创建了"循环陷阱"或"黑洞".
抓取工具将添加此新子页面,子页面将具有另一个子页面,该子页面也将被添加.这个过程可以无限进行.每个页面的内容都是唯一的,但完全没用(它是随机生成的文本,或从随机源中提取的文本).我们的抓取工具将继续查找我们实际上不感兴趣的新页面.
这些循环陷阱非常难以找到,如果您的爬虫没有任何东西可以防止它们到位,它将被卡在某个域上以获得无穷大.
我的问题是,有什么技术可以用来检测所谓的黑洞?
我听到的最常见的答案之一是对要抓取的页面数量的限制.但是,当您不知道要抓取哪种类型的站点时,我无法看到这是一种可靠的技术.像维基百科这样的合法网站可以拥有数十万个网页.这种限制可能会对这类网站产生误报.
Dan*_*lor 16
好吧,你问过非常具有挑战性的问题.有很多问题:
首先,你认为有人会做这样的事情来防止网络蜘蛛?如果网络蜘蛛卡在这样的结构中,它就可以充当DoS攻击.
其次,如果页面是针对用户的,那么他们如何对链接到随机生成的"垃圾站点"的大量无意义链接做出反应?这个链接对于用户来说应该是不可见的,或者是其中的一些,或者它们会以某种方式被隐藏 - 你应该检查,如果链接有显示:none,1 px font等.
第三,谷歌将如何表现?好吧,谷歌没有索引它可以做的一切.它会添加到队列的链接,但不会立即跟随它们.他不喜欢关注深度引用的链接,这些链接没有链接到之前编入索引的页面.这使得他没有索引所有内容,但最终访问了用户最有可能访问的内容.否则,你描述的这些页面将极其经常被SEO垃圾邮件发送者使用;)
我会建立优先级队列.每个URL的每个链接都会增加1点优先级(更多,从主页面开始).优先级为1的页面位于结束列表中.我会限制访问页数,所以在最坏的情况下,我会查看最重要的页面.我会怀疑那些含有太少内容的链接的页面.简而言之,尽可能模拟谷歌的行为.
任何解决方案充其量都将是启发式的,因此您将不得不接受不太完美的结果。我原以为如果实施得当,页面限制方法会很好地工作。
您可以在不离开域的情况下限制要抓取的页面数量;这并不能阻止所有页面都被编入索引,因为如果蜘蛛在到达特定页面之前退出,那么该页面可能会有更多路径进入“更接近”它的域,从而可以访问它在切断之前。
还要记住,如果没有这样的限制,蜘蛛可能会在像维基百科这样的合法网站上停留很长时间,仅仅是因为内容过多。
也许您可以添加要抓取的 URL 长度限制。
此外,大多数网络服务器对 URL 的长度都有限制。所以你不应该无限循环。
找到了关于此事的文档。不知道它是否仍然是up2date。
查看: http: //www.boutell.com/newfaq/misc/urllength.html
您还可以限制页面的“深度”。
像domain.com/page/subpage/subsubpage/subsubsubpage/subsubsubsubpage/subsubsubsubsubpage/etc/etc/etc/etc/etc