Алгоритм Web Cralwer: глубина? - PullRequest
3 голосов
/ 05 декабря 2010

Я работаю на гусеничном шасси, и мне нужно точно понять, что подразумевается под "глубиной ссылки". Возьмите орех, например: http://wiki.apache.org/nutch/NutchTutorial

глубина указывает глубину ссылки от корневой страницы, которая должна быть пополз.

Итак, скажем, у меня есть домен www.domain.com и я хочу сканировать глубину, скажем, 3 - что мне нужно сделать? Если бы сайт мог быть представлен в виде бинарного дерева, я думаю, это не было бы проблемой.

Ответы [ 7 ]

11 голосов
/ 05 декабря 2010

Глубина ссылки означает, что количество «прыжков» страницы находится далеко от корня, где «прыжок» означает переход по ссылке на странице.Причина, по которой Nutch имеет это ограничение, заключается в том, что ссылки, расположенные очень «далеко» от главной страницы, вряд ли будут содержать много информации (главная страница будет содержать ссылку на самую важную информацию, поэтому чем дальше вы получаете, тем более подробную информацию вы находите),хотя их может быть очень много, поэтому они занимают много места для хранения, вычисляют время для ранжирования и полосы пропускания.

Таким образом, Nutch использует схему алгоритма, известную как поиск с ограниченной глубиной ограничить его время работы и использование пространства.Если бы он не использовал эту эвристику, ему пришлось бы сканировать весь сайт, чтобы ранжировать все страницы в нем, и найти верхнюю N .

. Чтобы выполнить сканирование до глубины 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)

И нет, сайт в целом не может быть представлен какбинарное дерево;это ориентированный граф.Если вы как-то удалите обратные ссылки, то оно станет многостраничным деревом.В любом случае, многие сайты слишком велики для вашего сканера.

2 голосов
/ 05 декабря 2010
  1. Создайте список, который вы используете в качестве очереди.
  2. Добавьте www.domain.com, depth 0 к нему
  3. Снимите с него первый элемент
  4. текущая глубина равнаглубина элементов + 1
  5. Сканирование этого сайта
  6. Добавление каждой ссылки на сайте в очередь, если текущая глубина не превышает максимальную глубину
  7. Если список нене пусто, вернитесь к 3 ..
2 голосов
/ 05 декабря 2010

Я думаю, "глубина" - это количество раз, которое сканер "следует по ссылке".

Скажем, вы начинаете с корневой страницы.Вы переходите по каждой из ссылок на этой странице: это глубина 1. Для каждой целевой страницы вы переходите по ссылкам: это глубина 2 и т. Д.

Обратите внимание, что при выполнении следующих действий могут быть "циклы".ссылки.Структура не дерево, а граф.

0 голосов
/ 08 апреля 2014

Глубина - количество косых черт в пути URL

пример http://www.google.com/foo/bar/baz имеет глубину 3

def depth(self,link):
    return len(urlparse.urlparse(url).path.split("/")) -1
0 голосов
/ 05 декабря 2010

Ну, в случае с Nutch аргумент глубины довольно неправильный, он просто означает количество циклов, которые проходит сканер.Таким образом, вы получите доступ к страницам, которые находятся на расстоянии 3 ссылок от ваших начальных URL-адресов ... на данном сайте это может иметь глубину 3 ... то есть, если они перейдут в верхние пределы N.

0 голосов
/ 05 декабря 2010

Корень веб-сайта находится на глубине 0. Документы, которые вы можете получить, используя ссылки в корне, находятся на глубине 1. Документы, которые вы, в свою очередь, можете получить по ссылкам в документах на глубине 1, будут на глубине 2. И так далее.

В зависимости от вашего сканера это может относиться только к документам на том же сайте / домене (обычном) или к документам, размещенным в другом месте.

Большинство веб-сайтов не представлены двоичным деревом, так каккорень "может иметь более двух" узлов ".

0 голосов
/ 05 декабря 2010

Глубина ссылки означает, сколько ссылок вы должны пройти, прежде чем попасть на данную ссылку.

Пример: example.com ссылается на example.com/foo.html, который ссылается на google.com. Таким образом, google.com имеет глубину ссылки 2 относительно сайта example.com, так как вы можете перейти к нему по 2 ссылкам.

Чтобы сканировать example.com на глубину 3, вы должны переходить по ссылкам на максимальную глубину 3 и затем прекращать переходить по ссылкам. Без этого ограничения вы легко могли бы продолжаться вечно.

Пример: example.com ссылается на example.com/foo.html и example.com/bar.html. Вы переходите по этим двум ссылкам, ссылкам, на которые они ссылаются, и на этом останавливаетесь.

Примечание. Корневая страница имеет глубину 0.

...