Использование cURL для получения всех ссылок на веб-сайте (а не только на странице)

Я использую следующий скрипт PHP, чтобы получить все ссылки на данной странице, но я пытаюсь получить все ссылки на веб-сайте в целом.

<?php function urlLooper($url){ $urlArray = array(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); $regex='|<a.*?href="(.*?)"|'; preg_match_all($regex,$result,$parts); $links=$parts[1]; foreach($links as $link){ array_push($urlArray, $link); } curl_close($ch); foreach($urlArray as $value){ echo $value . '<br />'; } } $url = 'http://www.justfundraising.com/'; urlLooper($url); 

?>

Есть ли способ использовать cURL (или любой другой метод откровенно), чтобы получить все ссылки на веб-сайте? У меня есть доступ к серверу, если вам интересно.

Моя идея состояла в том, чтобы сгенерировать все ссылки, например, с домашней страницы, а затем передать эти ссылки через одну и ту же функцию, чтобы получить новый список ссылок, игнорирующих любые дубликаты. Я так понимаю, я получу все страницы.

Любая помощь будет оценена!

Как упоминает выше @mario, возможно, посмотрите на использование phpQuery ( http://code.google.com/p/phpquery/ ). После того, как вы загрузили библиотеку и включили ее на свою страницу, ниже приведен пример кода, показывающего, как вы можете получить массив, содержащий все ссылки из строки, которую вы передаете (я только что закодировал строку в функции newDocument как пример):

 $links = phpQuery::newDocument('<a href="test1.html">Test 1</a><a href="test2.html">Test 2</a><a href="test3.html">Test 3</a>')->find('a'); $array_links = array(); foreach($links as $r) { $array_links[] = pq($r)->attr('href'); } die("<pre>".print_r($array_links,true)."</pre>"); 

Вышеприведенный код вернет:

 Array ( [0] => test1.html [1] => test2.html [2] => test3.html ) 

Надеюсь это поможет.

curl только выбирает то, что вы говорите. Он не будет анализировать содержимое для вас, и он не будет рекурсивно извлекать «внешние» ресурсы, на которые ссылается контент. Вам придется рыться в возвращенном HTML самостоятельно, разбирать ссылки на изображение / сценарий и использовать больше вызовов для зависания для их извлечения.

Другими словами, вам придется реплицировать wget , что сводится к: просто используйте wget .

Я пытался использовать то же самое с помощью simplehtmldom. но через некоторое время код разбился. на самом деле я пытался использовать метод dfs здесь, который может переполнить стек в какой-то момент.

вы можете проверить этот метод, используя cURL

вот мой код:

 <?php traverse($home,0); function traverse($url,$depth) { if($depth>1)return; $html = file_get_html($url); foreach($html->find('a') as $element) { $nurl = $element->href; echo $nurl."<br>"; traverse($nurl,$depth+1); } } ?>