Voici ce que j'essaie de réaliser: récupérer tous les produits sur une page et les mettre dans un tableau. Voici le code que j'utilise:
$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;
Cela fonctionne pour le $title but
Pas pour le produit. Pour info, dans le code HTML la balise img ressemble à ceci:
<img alt="" class="productImage" data-altimages="" src="xxxx">
J'ai regardé ceci ( PHP DOMDocument comment obtenir un élément? ) mais je ne comprends toujours pas comment le faire fonctionner.
PS: je reçois cette erreur:
Appel à une méthode non définie
DOMDocument::getElementsByclassName()
J'ai finalement utilisé la solution suivante:
$classname="blockProduct";
$Finder = new DomXPath($doc);
$spaner = $Finder->query("//*[contains(@class, '$classname')]");
https://stackoverflow.com/a/31616848/30682
Lier cette réponse car elle m'a le plus aidé avec ce problème.
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 le code et heres l'utilisation
$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');
function getElementsByClassName($dom, $ClassName, $tagName=null) {
if($tagName){
$Elements = $dom->getElementsByTagName($tagName);
}else {
$Elements = $dom->getElementsByTagName("*");
}
$Matched = array();
for($i=0;$i<$Elements->length;$i++) {
if($Elements->item($i)->attributes->getNamedItem('class')){
if($Elements->item($i)->attributes->getNamedItem('class')->nodeValue == $ClassName) {
$Matched[]=$Elements->item($i);
}
}
}
return $Matched;
}
// usage
$dom = new \DOMDocument('1.0');
@$dom->loadHTML($html);
$elementsByClass = getElementsByClassName($dom, $className, 'h1');