Ho un elenco di annunci nel codice html qui sotto. Quello di cui ho bisogno è un loop PHP per get gli elementi folowing per each annuncio:
<a>
) <img>
) <div class="title">
) <div class="ads"> <a href="http://path/to/ad/1"> <div class="ad"> <div class="image"> <div class="wrapper"> <img src="http://path/to/ad/1/image.jpg"> </div> </div> <div class="detail"> <div class="title">Ad #1</div> </div> </div> </a> <a href="http://path/to/ad/2"> <div class="ad"> <div class="image"> <div class="wrapper"> <img src="http://path/to/ad/2/image.jpg"> </div> </div> <div class="detail"> <div class="title">Ad #2</div> </div> </div> </a> </div>
Sono riuscito a get l'URL dell'annuncio con il seguente codice PHP.
$d = new DOMDocument(); $d->loadHTML($ads); // the variable $ads contains the HTML code above $xpath = new DOMXPath($d); $ls_ads = $xpath->query('//a'); foreach ($ls_ads as $ad) { $ad_url = $ad->getAttribute('href'); print("AD URL : $ad_url"); }
Ma non sono riuscito a get gli altri 2 elementi (URL image e titolo). Qualche idea?
per altri elementi, fai semplicemente lo stesso:
foreach ($ls_ads as $ad) { $ad_url = $ad->getAttribute('href'); print("AD URL : $ad_url"); $ad_Doc = new DOMDocument(); $ad_Doc->documentElement->appendChild($ad_Doc->importNode($ad)) $xpath = new DOMXPath($ad_Doc) $img_src = $xpath->query("//img[@src]") $title = $xpath->query("//div[@class='title']") }
Sono riuscito a get quello che mi serve con questo codice (basato sul codice di Khue Vu):
$d = new DOMDocument(); $d->loadHTML($ads); // the variable $ads contains the HTML code above $xpath = new DOMXPath($d); $ls_ads = $xpath->query('//a'); foreach ($ls_ads as $ad) { // get ad url $ad_url = $ad->getAttribute('href'); // set current ad object as new DOMDocument object so we can parse it $ad_Doc = new DOMDocument(); $cloned = $ad->cloneNode(TRUE); $ad_Doc->appendChild($ad_Doc->importNode($cloned, True)); $xpath = new DOMXPath($ad_Doc); // get ad title $ad_title_tag = $xpath->query("//div[@class='title']"); $ad_title = trim($ad_title_tag->item(0)->nodeValue); // get ad image $ad_image_tag = $xpath->query("//img/@src"); $ad_image = $ad_image_tag->item(0)->nodeValue; }