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

+0

깊이 변수를 4 이상으로 설정하면 결과가 생성되지 않는다고 말했습니다. – dbomb101

+1

기본 time_limit를 초과 한 후에는 시간 초과가 발생하고이 제한을 더 높은 값으로 설정하면 위험합니다 (여러 프로세스가 끝나지 않고 메모리를 빠져 나올 수 있습니다. 쉽게 서버를 죽인다). phpDig와 같은 실제 크롤러를 사용하는 것이 좋습니다. – Capsule

답변

0

모든 오류 메시지가 있는지 확인하십시오 (display_errors, error_reporting). 이것은 왜 충돌하는지 더 많은 통찰력을 줄 것입니다.

또한 크롤링은 데이터로 수행 할 작업에 따라 불법 인 경우가 많습니다.

+0

링크 목록을 얻기 위해 내부적으로 크롤러를 사용하는 것이 좋습니다. – dbomb101