2011-04-11 49 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