Простой HTML DOM, рекурсивный поиск ссылок - PullRequest
1 голос
/ 02 февраля 2011

Я использую simple html dom , чтобы найти ссылки на определенную страницу, используя:

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>'; 

Это найти все ссылки на странице, однако я хочу иметь возможность перейтичтобы найти ссылки, а также найти ссылки внутри эти найденные ссылки рекурсивно, например, до уровня 5.

Есть идеи, как это сделать?

Ответы [ 2 ]

3 голосов
/ 02 февраля 2011

Используйте рекурсивную функцию и следите за глубиной:

function findLinks($url, $depth, $maxDepth) {
  // fetch $url and parse it
  // ...
  if ($depth <= $maxDepth)
    foreach($html->find('a') as $element)
      findLinks($element->href, $depth + 1, $maxDepth);
}

И вы начнете с вызова чего-то вроде findLinks($rootUrl, 1, 5).

1 голос
/ 20 марта 2013

В прошлом мне нужна была похожая функция.Что вы можете сделать, это использовать MySQL для хранения ваших ссылок.

В моем случае у меня была таблица todo и таблица pages .Заполните таблицу todo некоторыми URL-адресами, которые вы хотите найти.

Я привык получать информацию о странице, которая мне нужна (открытый текст и заголовок), и сохранять ее в базе данных MySQL1011 * страниц .Затем я перебирал ссылки и добавлял их в таблицу todo .Последний шаг состоял в том, чтобы удалить текущую страницу из моего списка задач, а затем повторить цикл ..

grab a url from todo loop 
{ 
   get current page title and plaintext store it in pages table
   loop through links Add found links to todo table
   remove current page from todo 
}
...