2011-04-11 69 views
1

我已經從這裏抓取一段腳本來抓取一個網站,把它放在我的服務器上,它的工作原理。唯一的問題是,如果我嘗試抓取任何高於4的深度,它就不起作用。我想知道是否由於服務器缺乏資源或代碼本身。履帶腳本php

<?php 

error_reporting(E_ALL); 

function crawl_page($url, $depth) 
{ 
    static $seen = array(); 
    if (isset($seen[$url]) || $depth === 0) { 
     return; 
    } 
    $seen[$url] = true; 

    $dom = new DOMDocument('1.0'); 
    @$dom->loadHTMLFile($url); 

    $anchors = $dom->getElementsByTagName('a'); 
    foreach ($anchors as $element) { 
     $href = $element->getAttribute('href'); 
     if (0 !== strpos($href, 'http')) { 
      $href = rtrim($url, '/') . '/' . ltrim($href, '/'); 
     } 
     crawl_page($href, $depth - 1); 
    } 
    echo "URL:",$url,PHP_EOL; 
    echo "<br/>"; 
} 
crawl_page("http://www.mangastream.com/", 2); 
?> 

編輯:

我打開了錯誤的腳本報告和我得到的是這種

錯誤324(淨值:: ERR_EMPTY_RESPONSE):未知的錯誤。

+0

「我嘗試爬網設置爬蟲超過4級*它不起作用*」這意味着什麼? – Albireo 2011-04-11 09:04:48

+0

我的意思是說,如果我將深度變量設置爲4以上,它不會產生任何結果 – dbomb101 2011-04-11 09:53:28

+1

超過默認time_limit後它會超時,並將此限制設置爲較高值是危險的(幾個進程永遠不會結束並吸取內存輕鬆殺死一臺服務器)。你最好使用像phpDig這樣的真正的爬蟲。 – Capsule 2011-04-11 12:53:02

回答

0

請確保您在(display_errors,error_reporting)上包含所有錯誤消息。這應該讓你更加了解它爲什麼會崩潰。

此外,請記住,抓取通常是非法的,具體取決於您要對數據執行的操作。

+0

它很好地使用內部的抓取工具來獲取鏈接列表。 – dbomb101 2011-04-11 09:51:39