我的网站爬虫在运行时死亡

时间:2011-06-27 12:53:10

标签: php web-crawler

我写了一个网站抓取工具来获取链接和图片以创建网站地图,但它在运行时被杀死了!所以这不是我的全班

class pageCrawler {

    .......

    private $links = array();

    public function __construct ( $url ) {

    ignore_user_abort ( true );
    set_time_limit ( 0 );
    register_shutdown_function ( array ( $this, 'callRegisteredShutdown' ) );
    $this->host = $urlParts [ 'host' ];
    $this->crawlingUrl ( $url );
    $this->doCrawlLinks ();

}

$this->crawlingUrl ( $url ): 在开始设置为此方法的主要地址(例如http://www.mysite.com
getUrl():通过fsockopen连接到url然后获取url内容
findLinks():返回a hrefimg src,然后在$this->links[]中存储返回链接,然后我回显一些内容以刷新输出并在此之后插入以下代码:

echo str_pad ( " ", 5000 );
flush ();

$this->doCrawlLinks(): 检查$this->links并执行我在$this->links的第一个元素的顶部描述的相同过程 然后转移第一个元素 再次doCrawlLinks()运行并获取第一个元素的网址内容然后转移$this->links的第一个元素,直到$this->links变空


这是我班级的总体趋势,但突然间它突然崩溃了。我设置set_time_limit(0)永远做,但我的过程没有完成因为我的shoutdoown功能剂量执行!我困惑我的问题在哪里

1 个答案:

答案 0 :(得分:1)

狂野猜测 - 你在doCrawlLinks()中有一个递归吗?深度递归可以简单地崩溃过程。或者它可能因每个进程的内存限制而崩溃。

根据我的经验,将数据库中的链接列表与挂起/处理标志保持在一起是非常有帮助的,这样您就可以随时关闭并恢复您的爬虫(或者在您的情况下 - 在崩溃后恢复它)