2013-02-21 5 views
0

블로그에서 43 개의 블로그 게시물을 긁어서 배열에 저장하려고합니다. 그러나 배열을 print_r하면 배열은 처음 43 개가 아닌 처음 5 개를 반환합니다. 그리고 나는 어떻게 43을 모두 얻을 수 있는가? WAMP의 cmd.exe [명령 줄]에서이 스크립트를 실행합니다.PHP QueryPath 2.1.2 WAMP 스크래핑 스크립트가 43 대신 5 개의 기사 만 반환하는 이유는 무엇입니까? 시간 초과?

<?php 

require 'src/QueryPath/QueryPath.php'; 


$qp1 = htmlqp('http://myblog.com/blog'); 
$qp2 = htmlqp('http://myblog.com/blog/Page-2.html'); 
$qp3 = htmlqp('http://myblog.com/blog/Page-3.html'); 
$qp4 = htmlqp('http://myblog.com/blog/Page-4.html'); 

foreach ($qp1->find('ol>li a[href],.jbReadon') as $item) { 
    $links[] = $item->attr('href'); 
} 

foreach ($qp2->find('ol>li a[href],.jbReadon') as $item) { 
    $links[] = $item->attr('href'); 
} 

foreach ($qp3->find('ol>li a[href],.jbReadon') as $item) { 
    $links[] = $item->attr('href'); 
} 

foreach ($qp4->find('ol>li a[href],.jbReadon') as $item) { 
    $links[] = $item->attr('href'); 
} 


print_r($links); 



foreach ($links as $link) { 
    $url = "http://myblog.com".$link; 

    $content[] = htmlqp($url)->find('.jbIntroText p')->text(); 
} 
print_r($content); 




?> 

키 배열 5 이후에는 모든 값이 비어 있습니다. 내가 분명히 초보자입니다 http://img546.imageshack.us/img546/6092/cmdafter5arrayisempty.jpg

[나도 링크 그래서 heres는 노트북이나 웹에서 cmd.exe를의 스크린 샷에 이미지를 업로드 couldnt는이 코드를보다 간결하게하는 방법 또는 더 나은 수행하는 방법을 그래서 어떤 제안을 내 근근이 살아가는 프로토 타입을 고맙게 생각합니다. 모든 건설적인 비평도 환영합니다 .-P

답변

0

적어도 하나의 FOR 문에 인쇄 문을 추가 할 수 있습니다. 여기에 여러 가지 일이있을 수 있습니다. 가장 가능성이 높은 것은 다음과 같습니다.

  • 필터는 5 개의 항목과 일치해야합니다.
  • HTML 파서가 일부 마크 업에 질식 할 수 있습니다. 이 경우 가능한 한 많은 HTML DOM을로드하려고 시도합니다.

일부 인쇄 문을 추가하면 반복 횟수를 볼 수 있습니다.

블로그에서 기사 목록을 얻으려는 경우 RSS 또는 Atom 피드를 읽는 것이 더 쉬울 수도 있습니다 (필요한 모든 정보가 없을 수도 있음).

0

나는 내 문제를 해결했습니다! 분명히, 필자가 필요로하는 것은 각 쿼리/스크래핑 사이의 시간 지연 이었기 때문에 내 블로그는 대규모 스크래핑 또는 기타로부터 스스로를 보호하고있었습니다. 여기에 생각 나는가 긁히지에 대한 블로그 메신저를 변환해야합니다 아이디어에 대한 What are the known or expected impact of using Php/Querypath crawler on a target web server, and how can it be kept to a minimum? 또한

감사에 대한

foreach ($links as $link) { 
    $url = "http://myblog.com".$link; 
    $count = count($links); 
    $interval = 2; // Every three times... 
    $wait = 2; // Wait two seconds. 
     for ($i = 0; $i < $count; ++$i) { 
     $content[] = htmlqp($url)->find('.jbIntroText p')->text(); 
     print_r($content); 
      if ($i > 0 && $i % $interval == 0) { 
      sleep($wait); 
      } 

     } 
} 

감사 Technosophos : 내가해야 할 일을했을 모두 같은 코드의 두 번째 부분을 다시 작성하는 것입니다 RSS/Atom 피드, 시간의 상당 부분 블로그가 자신의 RSS 피드를 생성하지 않기 때문에