2016-04-28 2 views
1

Я пытаюсь получить все изображения с этого URL-адреса http://www.homegate.ch/kaufen/105652197?3. Я использую Xpaths в PHP. По какой-то причине я могу получить тело с помощью Xpath, но не с изображениями. Вот мой сценарий:PHP Xpath возвращает узлы для тела, а не для изображения

<?php 

$url = "http://www.homegate.ch/kaufen/105652197?3"; 

$body = '//body'; 
$img = '//img'; 

$html = file_get_contents($url); 

# Call htmlentities as the $url content is not well-formatted: http://stackoverflow.com/questions/1685277/warning-domdocumentloadhtml-htmlparseentityref-expecting-in-entity 
$html = htmlentities($html); 

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

$xpath = new DomXPath($dom); 

$query = $xpath->query($body); 

if($query->length == 1) 
    echo $query->item(0)->nodeValue; 

if($query->length < 1) 
    echo "Xpath for body is no good!"; 

$query = $xpath->query($img); 

if($query->length == 1) 
    echo $query->item(0)->nodeValue; 

if($query->length < 1) 
    echo "Xpath for image is no good!"; 

Запуск этого сценария возвращает:

1. <!DOCTYPE html>.. 
2. Xpath for image is no good! 

Что происходит здесь не так? - Почему Xpath работает только на body, а не на img

+0

Что дает var_dump ($ query)? –

+0

'object (DOMNodeList) # 3 (1) {[" length "] => int (0)}' – user1965074

ответ

0

Вы должны удалить эту строку:

$html = htmlentities($html); 

Чтобы избежать DOM предупреждения, используйте этот синтаксис вместо:

$dom = new DOMDocument(); 
libxml_use_internal_errors(True);   # <------- 
$dom->loadHTML($html); 

С вашим синтаксис, //body Запрос XPath, по-видимому, в порядке, но с этим содержанием:

<!DOCTYPE html> 
<html prefix="og: http://ogp.me/ns#" class="no-js unknown unknown" lang="de"> 
<head><script type="text/javascript" src="/ver-20160426133955/assets/js/jquery.js"></script> 
(...) 

это, ясно, нет корпус!

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