PHP: задержать разбор источника страницы (через file_get_html ()) на 1 секунду - PullRequest
3 голосов
/ 13 ноября 2010

Я использую PHP, чтобы попытаться очистить страницу, которая, по-видимому, динамически загружает контент всего через миллисекунды после завершения загрузки родительской страницы.

Я использую curl для анализа страницы и simpleHtmlDom для извлечения элементов изparsed html.

Мои попытки пройти DOM и взорвать () вещи из html ничего не возвращают.Мои единственные идеи заключались в том, что он загружал контент после родительской страницы.

Вот мой код.

<? 
 $url = 'http://www.facebook.com/OneAndroidAppaDay';
 $scrapeUrl = 'http://www.facebook.com/OneAndroidAppaDay';

  include_once('simple_html_dom.php');
  require_once("bitly.php");

  $userAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)';
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
  curl_setopt($ch, CURLOPT_URL,$scrapeUrl);
  curl_setopt($ch, CURLOPT_FAILONERROR, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  $html = curl_exec($ch);
  if (!$html) {
   echo "<br />cURL error number:" .curl_errno($ch);
   echo "<br />cURL error:" . curl_error($ch);
   exit;
  }

  $appBitlyUrl = $html->find('div[class=UIStoryAttachment_Title]',0)->find('a',0)->href; // fail :(
  echo 'Bitly Url:  ' . $appBitlyUrl;
?>

Это бомбардировка в строке 24 (Обозначается встроенным комментарием) с этой ошибкой:

Неустранимая ошибка: вызов функции-члена find () для необъекта в /home/xxxxxxxx/public_html/xxx.xx/xxxx.phpв строке 24

Есть ли способ заставить его подождать секунду или две, прежде чем он захватит HTML-страницу?Или, может быть, у кого-то есть лучшее понимание?

Спасибо

Марк

Ответы [ 2 ]

1 голос
/ 13 ноября 2010

сделать простую задержку

sleep(2); // 2 second delay before continuing
0 голосов
/ 13 ноября 2010

Вы должны действительно перечитать сообщение об ошибке. Это не связано с проблемой времени.

Вы получаете строку $ html из curl. Но вы не можете вызывать функции phphtmldom -> найти по этому поводу сразу. Вам придется разобрать его, прежде чем пройти. Также неясно, почему вы используете curl в первую очередь. Либо используйте просто $dom = str_get_html($html), либо попробуйте:

$dom = file_get_html('http://www.facebook.com/OneAndroidAppaDay');

$bituurl = $dom->find('div[class=UIStoryAttachment_Title]',0)->...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...