2013-02-21 1 views
0

Я пытаюсь очистить 43 сообщения в блогах из моего блога и сохранить их в массиве, но когда у меня print_r массив, он возвращает только первые 5 [с остальным пустым], а не все 43. Почему? И как я могу получить все 43? Я запускаю этот скрипт из cmd.exe [командной строки] на WAMP.Почему мой PHP QueryPath 2.1.2 скрипт scampping WAMP возвращает только 5 статей вместо 43? Тайм-аут?

<?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 массива далее, все значения пустые. [Я не смог загрузить изображение или от ноутбука или сетей, таким образом Heres ссылки на скриншот cmd.exe] http://img546.imageshack.us/img546/6092/cmdafter5arrayisempty.jpg

Я, очевидно, новичок, так что любые предложения, как сделать этот код более succint или как лучше выполнить мой был бы оценен проточный прототип. Вся конструктивная критика также приветствуется: -P

ответ

0

Возможно, вы захотите добавить некоторые инструкции печати по крайней мере к одной из этих циклов FOR. Здесь может быть несколько вещей. Двумя наиболее вероятными являются:

  • Фильтр может соответствовать только пяти пунктам.
  • Парсер HTML может захлебываться некоторой разметкой. В этом случае он попытается загрузить как можно больше HTML DOM.

При добавлении некоторых утверждений для печати вы можете увидеть, сколько раз он выполняет итерацию.

И как в стороне, если вы пытаетесь получить список статей в своем блоге, чтение фида RSS или Atom может быть проще (хотя, я полагаю, у него может не быть всей необходимой информации).

0

Я решил свою проблему !! По-видимому, все, что мне было нужно, это временная задержка между каждым запросом/scrape, потому что мой блог защищал себя от массивных царапин или чего-то еще. Все, что я должен был сделать, это переписать 2-ую часть кода, как это:

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 за идею здесь 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?

Также спасибо за идею, что я должен преобразовать блог IM о скрести по RSS/Atom Feed, так как в большинстве случаев блоги не имеют собственных RSS-каналов

 Смежные вопросы

  • Нет связанных вопросов^_^