2011-08-11 82 views
4

我使用以下PHP腳本獲取給定頁面上的所有鏈接,但我試圖獲取整個網站上的所有鏈接。使用cURL獲取網站中的所有鏈接(不僅是頁面)

<?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); 

?>

有沒有辦法使用捲曲(或者坦白任何其他方法)來獲取網站上的所有鏈接?如果您想知道,我可以訪問服務器。

我的想法是從主頁生成所有鏈接,然後通過相同的函數傳回這些鏈接,以獲得忽略任何重複鏈接的新鏈接列表。我以這種方式得到所有的頁面。

任何幫助將不勝感激!

+0

你可以調查'phpQuery'從而簡化了頁面的檢索和分析,從而構建一個簡單的蜘蛛比手動不太繁瑣捲曲和文本提取方法。 – mario

+0

上面的腳本剛剛幫了我很大的忙,謝謝=) – RayZor

+0

我用[this](http://blog.viktorkelemen.com/2011/07/get-links-from-page-with-bash.html);不知道它是否會有所幫助。 –

回答

1

curl只提取您告訴它的內容。它不會爲你分析內容,也不會遞歸地獲取內容引用的「外部」資源。您必須自己翻閱返回的HTML,解析出圖像/腳本鏈接,並使用更多的curl調用來獲取這些。

換句話說,你將不得不復制wget,歸結爲:只使用wget

3

正如@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 
) 

希望這有助於。

1

我試圖使用simplehtmldom相同。但代碼在一段時間後崩潰了。實際上我試圖在這裏使用dfs方法,它可以在一個點上溢出堆棧。

您可以使用該檢查方法捲曲

這裏是我的代碼:

<?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); 

} 
} 
?> 
相關問題