2011-06-07 19 views
6

Estoy tratando de crear un script que raspe un sitio web para recuperar las últimas actualizaciones de noticias. Desafortunadamente me he encontrado con un pequeño problema que parece que no puedo solucionar con mi conocimiento limitado de DOM.PHP DOMNode: cómo extraer no solo texto sino etiquetas HTML también

La página que estoy tratando de raspar se construye de la siguiente manera:

<table> 
<tr class="color1"> 
<td>Author</td> 
<td>Content <a href="#">in HTML</a></td> 
<td>Date</td> 
</tr> 
</table> 

puedo recuperar los campos que necesito muy bien, excepto los contenidos. Con $ TD> nodeValue que recuperar el contenido en forma de texto, mientras que yo quiero en HTML (hay 'a' etiquetas de ahí, 'blockquote', etc)

Aquí está el código que tengo:

try { 
    $html = @ file_get_contents("test.php"); 
    checkIfFileExists($html); 

    $dom = new DOMDocument(); 
    @ $dom->loadHTML($html); 

    $trNodes = $dom->getElementsByTagName("tr"); 
    foreach ($trNodes as $tr) { 

     if ($tr->getAttribute("class") == "color1" || $tr->getAttribute("class") == "color2") { 

     $tdNodes = $tr->childNodes; 
     foreach ($tdNodes as $td) { 

      echo $td->nodeValue . "<br />\n"; 

     } 
     echo "<br /><br /><br /><br /><br />\n"; 
    } 
} catch(Exception $e) { 
    echo $e->getMessage(); 
} 

Preferiría no tener que recurrir a una biblioteca de terceros, pero obviamente cualquier respuesta es más apreciada, biblioteca o no.

Gracias de antemano.

Respuesta

4

reemplazar

echo $td->nodeValue . "<br />\n"; 

con

echo $dom->saveXML($td) . "<br />\n"; 
+0

que resolvieron el problema, muchas gracias! – Steven

Cuestiones relacionadas