2016-05-18 2 views
0

С приведенным ниже кодом я получаю только пустую страницу, имя или псевдоним не получают эхо. Я скрещенных проверил путь его правильно что-то еще его не вторя назадXpath возвращает пустую страницу, не отражает значения

<?php 

$url="http://www.mans-best-friend.org.uk/dog-breeds-alphabetical-list.htm"; 

$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL,$url); 
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1'); 
$html = curl_exec($curl_handle); 
curl_close($curl_handle); 

$mydoc = new DOMDocument(); 

libxml_use_internal_errors(TRUE); //disable libxml errors 

if(empty($html)) die("EMPTY HTML"); 

    $mydoc->loadHTML($html); 
    libxml_clear_errors(); //remove errors for yucky html 

    $my_xpath = new DOMXPath($mydoc); 

    ////////////////////////////////////////////////////// 

    $nodes = $my_xpath->query('//*[@id="table94"]/tbody/tr/td');  

    foreach($nodes as $node) 
    { 
    $title=$my_xpath->query('p[@data-iceapc="1"]/span/a/font', $node); 
    $nickname=$my_xpath->query('p[@data-iceapc="2"]/span/a/font', $node); 
    echo $title." ".$nickname."<br>";  
    } 

?> 

В случае, если вы не можете найти р элемент. Прокрутите список до тех пор, где имена собак. Напр. Affenpinscher щелкните правой кнопкой мыши по нему и выберите проверку - он показывает элемент p.

+0

Если я посмотреть на исходный код вашего ссылка URL, нет 'p' элемент с' данными-iceapc 'атрибут. Поэтому ваш xpath не может совпадать. –

+0

его там ... прокрутите страницу, где имена собак - это .g Affenpinscher щелкните правой кнопкой мыши по ней и выберите проверку ... он показывает элемент p –

+0

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

ответ

0

Прежде всего, вам нужно «исправить» код html для правильной работы xpath, поскольку он содержит слишком много ошибок. В этом случае im извлекает только нужную таблицу с id table94.

После этого вы можете использовать XPath на объект йот, чтобы получить нужные данные:

<?php 
$url="http://www.mans-best-friend.org.uk/dog-breeds-alphabetical-list.htm"; 

$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL,$url); 
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1'); 
$html = curl_exec($curl_handle); 
curl_close($curl_handle); 

$html = preg_replace('/^.*(<table[^>]*id="table94">.*?<\/table>).*$/is', '\1', $html); 

$mydoc = new DOMDocument(); 
$mydoc->loadHTML($html); 

$my_xpath = new DOMXPath($mydoc); 

$nodes = $my_xpath->query('//tr');  

foreach($nodes as $node) 
{ 
    if ($my_xpath->query('td[position()=last()-1]/p/span/a/font', $node)->length > 0) { 
     echo $my_xpath->query('td[position()=last()-1]/p/span/a/font', $node)->item(0)->textContent.' '; 
     echo $my_xpath->query('td[position()=last()]/p/span/font', $node)->item(0)->textContent."<br />"; 
    } 
} 
+0

он дает ошибку Фатальная ошибка: нельзя использовать объект типа DOMNodeList как массив в строке 24 .ie эхо-строка –

+0

Я отредактировал ответ на использование ' item' вместо доступа к массиву. –

+0

ok Я только что заменил 'td [position() = last() - 1]/p/span/a/font', $ node) [0] с 'td [position() = last() - 1]/p/span/a/font ', $ node) -> item (0), и он работал –

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