웹 페이지에있는 모든 링크를 찾아서 인쇄하는 프로그램을 PHP로 작성했습니다. 그것은 또한 발견 한 모든 링크 내부로 들어가고 똑같이합니다. 내 문제는 일부 사이트 (예 : 유튜브)에서 링크를 인쇄하거나 내부를 따르지 않는다는 것입니다. 여기 내 링크 크롤러 코즈가 특정 웹 페이지에서 작동하지 않습니다.
내 주요 코드 :function echo_urls($site_address){
if(check_valid_url($site_address)){
$site = new site();
$site->address = $site_address;
$site->full_address = "<a href=\"$site_address\">$site_address</a>";
$site->depth = 0;
$queue = new queue();
$queue->push($site);
array_push($queue->seen,$site->address);
$depth = 0;
while(($site = $queue->get_first())){
$depth++;
echo $site->depth." : ".$site->full_address."<br>";
$queue = push_links($site->address,$queue,$depth);
}
}
else;
}
function push_links($site_address,$queue,$depth){
if($depth<4){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$site_address);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
if($result){
preg_match_all('/<a\s[^>]*href=([\"\']??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU', $result, $list);
$list = $list[0];
foreach($list as $item) {
if(!(empty($item)))
if($result = get_all_string_between($item,"href=\"","\"")){
if((array_search($result[0],$queue->seen))==false){
$site = new site();
$site->address = $result[0];
$site->full_address = $item;
$site->depth = $depth;
$queue->push($site);
array_push($queue->seen,$site->address);
}
}
}
}
}
return $queue;
}
가 정확하게 작동하지 않는 것에 문제를 좁힐 수 있습니다 매우 간단? 그리고 answer_wow't가 의미하는 바를 정확히 설명해주십시오. 문제는 cURL, DOM 파서, 다른 문제입니까? 오류 메시지가 나타 납니까? – Tchoupi
모든 페이지를 크롤링 할 수 없습니다. - 자바 스크립트를 실행하지 않으므로 해당 경로를 통해 콘텐츠를로드하는 모든 페이지가 크롤러에 보이지 않습니다. –
감사합니다. Mathieu Imbert http : \\ google.com과 같은 echo_urls 함수에 주소를 보내면 모두 인쇄됩니다. 링크는 google에 있지만 http : \\ youtube.com을 보내면 어떤 링크도 인쇄되지 않을 것입니다. – Kibo