DOM crawler PHP

  • Creatore Discussione Creatore Discussione toni93
  • Data di inizio Data di inizio

toni93

Utente Attivo
12 Nov 2009
38
0
0
ciao a tutti,
ho creato un crawler in php che dato un URL restituisce tutti i link contenuti in esso, solo che ho un problema.

faccio un esempio:
HTML:
<html>
<head>
    <title> Pagina di prova </title>
</head>
<body>
     <a href="url_da_NON_catturare">link</a>
     <h1>
           <a href="url_da_catturare">link</a>
     </h1>
</body>
</html>

cosi come è ora lo script mi cattura tutti i link, mentre invece io voglio che mi catturi solo quelli in h1.
ho provato a fare così ma non funziona,
PHP:
$h1 = $this->dom->getElementsByTagName('h1');
$a = $h1->getElementsByTagName('a');
questa è la parte incriminata
In questo modo mi da errore nella seconda linea in quanto $h1 diventa una DOMNodeList per la quale la funzione getElementsByTagName non esiste.

come posso fare?
 
Dovresti utilizzare un ciclo foreach sulla variabile $h1, e per ogni ciclo recuperi l'oggetto relativo tramite la funzione item(). A questo punto dovresti poter operare con getElementsByTagName(). Se non ti è chiaro dimmelo che ti faccio un esempio pratico!
 
ho capito cosa intendi, ci ho già provato infatti ma senza successo, visto che veniva fuori un altro errore

PHP:
$h1 = $this->dom->getElementsByTagName('h1'); 
foreach ($h1 as $h) {
       $anchors[] = $h->getElementsByTagName('a');  //$ancors è array perchè se no sarebbe sovrascritto ogni volta 
}
foreach ($anchors as $anch){
      foreach ($anch as $anchor) {
           $href = $anchor->getAttribute('href');
		.....;  //Inserimento di href nell'array del links
      }
}
 
mi rispondo da solo:
con la struttura che ho scritto prima funziona, l'errore che mi veniva fuori era di tutt'altra cosa :incazz:
 

Discussioni simili