DomDocument / DOMXPath — Как получить HTML-элемент Dom с помощью itemprop и img src

Я работаю над сценарием, который получает данные из элементов HTML dom.

Вот мой код:

<?PHP
$url = 'http://www.sportsdirect.com/nike-satire-mens-skate-shoes-242188?colcode=24218822';
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);

$xpath = new DOMXpath($doc);

$Name = $xpath->query('//span[@id="ProductName"]')->item(0)->nodeValue;

echo $Name;
?>

Этот код просто берет текст внутри <span id="ProductName"></span>, Я знаю, как получить данные из элементов с определенным классом или идентификатором.

Я не знаю, как я могу получить src="http://adres-to-image.com/img.png" (чистый пример) из тега изображения или как я могу получить элементы, которые не имеют идентификатора или класса, но имеют такие атрибуты, как itemprop, например <div itemprop="name"></div>

  1. Как я могу получить изображение src ?
  2. Как я могу получить элементы с itemprop ?

Заранее спасибо!

2

Решение

Для ваших примеров:

$xpath->query('//img/@src)->item(0)->nodeValue

Это означает

Выберите все атрибуты src всех тегов img и получите значение первого

$xpath->query('//div/[@itemprop="name"])->item(0)->nodeValue

Это означает

Выберите все div с itemprop attr равно name и получите значение первого.

2

Другие решения

Вы просто ищете атрибуты:

$url = 'http://www.sportsdirect.com/nike-satire-mens-skate-shoes-242188?colcode=24218822';
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);

$xpath = new DOMXpath($doc);

$Name = $xpath->query('//div[@class="productImageSash"]');
foreach($Name as $element){
$imgs = $element->getElementsByTagName('img');
foreach($imgs as $img){
$src = $img->getAttribute('src');
echo $src;
}

}

Выход:

/images/sash/productsash_mustgo.png

То же самое с itemprop атрибут, ищите div, которые имеют этот атрибут:

$Name = $xpath->query('//div');
foreach($Name as $element){
$itemprop = $element->getAttribute('itemprop');
if($itemprop){
echo "found";
}

}
2

По вопросам рекламы [email protected]