In breve ho scritto un piccolo parser dom per html che mi va a parsare alcune pagine amazon che mi interessano..
Il problema è che alla fine vorrei ottenere ( come si può vedere dall'echo in basso al codice sotto ) un risultato unitario per ogni prodotto.. Con titolo, link, imm ecc.. Invece attualmente appaiono così..
linklinklinklinklinktitolotitolotitolotitolo...ecc.
Posto il codice per com' è ora, già funzionante, effettua il parsing, come si può vedere scorrendo la pag dei risultati che ne deriva.. Qualcuno sa dirmi in cosa sbaglio? Sto uscendo pazzo!
Basta incollare il codice salvarlo e caricarlo da qualche parte e funziona..
Unica cosa che ho notato è che all'interno di $linkprod come delle altre variabili simili, se le metto in un var_dump mi da solo il primo titolo, se faccio un echo mi da tutti i risultati appiccicati.. mha..
Il problema è che alla fine vorrei ottenere ( come si può vedere dall'echo in basso al codice sotto ) un risultato unitario per ogni prodotto.. Con titolo, link, imm ecc.. Invece attualmente appaiono così..
linklinklinklinklinktitolotitolotitolotitolo...ecc.
Posto il codice per com' è ora, già funzionante, effettua il parsing, come si può vedere scorrendo la pag dei risultati che ne deriva.. Qualcuno sa dirmi in cosa sbaglio? Sto uscendo pazzo!
PHP:
<?php
$html = file_get_contents('http://www.amazon.it/s/ref=sr_il_to_luggage?rh=n%3A2454148031%2Cp_8%3A45-100&sort=relevancerank&ie=UTF8&qid=1430756991&lo=none');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$prodotti = array();
// Link Prodotto
$links = $xpath->query('//a[@class="a-link-normal a-text-normal"]');
foreach ($links as $link) {
$linkprod = $link->getAttribute('href');
$prodotti[] = array( "linkprod" => $linkprod );
}
// Link immagine
$images = $xpath->query('//img[@alt="Dettagli prodotto"]');
foreach ($images as $image) {
$linkimm = $image->getAttribute('src');
$prodotti[] = array( "images" => $linkimm );
}
// Nome prodotto
$titles = $xpath->query('//h2[@class="a-size-base a-color-null s-inline s-access-title a-text-normal"]');
foreach ($titles as $title) {
$titleprod = $title->nodeValue;
$prodotti[] = array( "titolo" => $titleprod );
}
//Prezzo prima
$prezzops = $xpath->query('//span[@class="a-size-small a-color-secondary a-text-strike"]');
foreach ($prezzops as $prezzop) {
preg_match_all('/((\d{1,5}),(\d{2}))/', $prezzop->nodeValue , $res );
$prezzoprima = $res[1][0];
$prodotti[] = array( "prezzop" => $prezzoprima );
}
//Prezzo dopo
$prezzods = $xpath->query('//span[@class="a-size-base a-color-price s-price a-text-bold"]');
foreach ($prezzods as $prezzod) {
preg_match_all('/((\d{1,5}),(\d{2}))/', $prezzod->nodeValue , $res1 );
$prezzodopo = $res1[1][0];
$prodotti[] = array( "prezzodopo" => $prezzodopo );
}
foreach ($prodotti as $prodotto):
echo '<a href="'.$prodotto["linkprod"].'">'.$prodotto["titolo"].'</a><br>
<img src="'.$prodotto["images"].'" alt="test" height="150" width="150"><br>
Prima costava: '.$prodotto["prezzop"].' , ora viene: '.$prodotto["prezzodopo"].'';
endforeach;
?>
Basta incollare il codice salvarlo e caricarlo da qualche parte e funziona..
Unica cosa che ho notato è che all'interno di $linkprod come delle altre variabili simili, se le metto in un var_dump mi da solo il primo titolo, se faccio un echo mi da tutti i risultati appiccicati.. mha..