我正在研究爬虫,需要准确理解“链接深度”的含义。以nutch为例:http://wiki.apache.org/nutch/NutchTutorial
depth表示应该是根页面的链接深度 抓取。
所以,说我有域名www.domain.com
,想要抓住一个深度,比如3
- 我需要做什么?如果一个站点可以表示为二叉树,那么我认为这不是问题。
答案 0 :(得分:11)
链接深度表示页面远离根的“跳数”,其中“跳”表示跟随页面上的链接。 Nutch有这个限制的原因是,与主页非常“远离”的链接不太可能包含太多信息(主页面将链接到最重要的信息,所以你得到的越远,你找到的信息就越详细),虽然可能会有很多,但它们会占用大量的存储空间,计算排名时间和带宽。
Nutch因此使用称为depth-limited search的算法方案来约束其运行时间和空间使用。如果它没有使用此启发式,则必须抓取整个网站对其中的所有网页进行排名,并找到顶部的 N 。
要爬到深度3,请实施此算法并为其指定深度限制为3。深度限制搜索的好处在于它是深度优先搜索(DFS)的变体,因此它非常节省空间:
function depth-limited-crawl(page p, int d)
if d == 0
return
/* do something with p, store it or so */
foreach (page l in links(p))
depth-limited-crawl(linked, d-1)
不,一般不能将网站表示为二叉树;这是一个有向图。如果你以某种方式删除反向链接,那么它就变成了一个多路树。无论哪种方式,许多网站都太大,无法为您的抓取工具存储。
答案 1 :(得分:2)
我猜“深度”是抓取工具“跟踪链接”的次数。
假设您从根页面开始。您可以按照此页面上的每个链接进行操作:这是深度1.对于每个目标页面,您都可以点击链接:这是深度2等。
请注意,链接后可能会出现“周期”。结构不是树,而是图形。
答案 2 :(得分:2)
www.domain.com, depth 0
附加到答案 3 :(得分:0)
链接深度表示在到达指定链接之前必须遵循的链接数量。
示例:example.com链接到链接到google.com的example.com/foo.html。因此,google.com相对于example.com的链接深度为2,因为您可以通过2个链接访问它。
要将example.com抓取到3的深度,您将关注最大深度为3的链接,然后停止关注链接。没有这个限制,你可以轻松地继续下去。
示例:example.com链接到example.com/foo.html和example.com/bar.html。您可以关注这两个链接,链接到的链接并停在那里。
注意:根页的深度为0。
答案 4 :(得分:0)
网站的根位于深度0.您可以通过使用根链接到达的文档深度为1.您可以从深度为1的文档中的链接到达的文档将位于深度2.依此类推。
根据您的抓取工具,这可能仅适用于同一网站/域中的文档(通常)或托管在其他位置的文档。
大多数网站都不能由二叉树表示,因为“根”可能有两个以上的“节点”。
答案 5 :(得分:0)
在Nutch的情况下,深度参数是一个非常错误的,它只是意味着爬虫正在经历的循环次数。因此,您将访问与您的种子网址相距3个链接的页面...在给定的网站上,它可能会深入3 ...即如果它们提升到最高N限制范围内。
答案 6 :(得分:0)
深度是网址路径
的斜线数示例http://www.google.com/foo/bar/baz的深度为3
def depth(self,link):
return len(urlparse.urlparse(url).path.split("/")) -1