Вот чего я пытаюсь достичь: получить все продукты на странице и поместить их в массив. Вот код, который я использую:
$page2 = curl_exec($ch); $doc = new DOMDocument(); @$doc->loadHTML($page2); $nodes = $doc->getElementsByTagName('title'); $noders = $doc->getElementsByClassName('productImage'); $title = $nodes->item(0)->nodeValue; $product = $noders->item(0)->imageObject.src;
Он работает для $title but
не для продукта. Для информации в HTML-коде тег img выглядит так:
<img alt="" class="productImage" data-altimages="" src="xxxx">
Я смотрел на это ( PHP DOMDocument, как получить элемент? ), Но я до сих пор не понимаю, как заставить его работать.
PS: Я получаю эту ошибку:
Вызов неопределенного метода
DOMDocument::getElementsByclassName()
Я, наконец, использовал следующее решение:
$classname="blockProduct"; $finder = new DomXPath($doc); $spaner = $finder->query("//*[contains(@class, '$classname')]");
https://stackoverflow.com/a/31616848/3068233
Связывание этого ответа, поскольку это помогло мне больше всего с этой проблемой.
function getElementsByClass(&$parentNode, $tagName, $className) { $nodes=array(); $childNodeList = $parentNode->getElementsByTagName($tagName); for ($i = 0; $i < $childNodeList->length; $i++) { $temp = $childNodeList->item($i); if (stripos($temp->getAttribute('class'), $className) !== false) { $nodes[]=$temp; } } return $nodes; }
Theres код и heres использование
$dom = new DOMDocument('1.0', 'utf-8'); $dom->loadHTML($html); $content_node=$dom->getElementById("content_node"); $div_a_class_nodes=getElementsByClass($content_node, 'div', 'a');