2011-07-09 12 views
14

Me gustaría obtener datos de una tabla sin usar expresiones regulares. He disfrutado usando simplexml para analizar feeds RSS y me gustaría saber si se puede usar para tomar una tabla de otra página.¿Se puede usar simplexml para rifle a través de html?

Por ejemplo. Coge la página con curl o simplemente file_get_contents(); luego usa simplexml para captar contenidos?

Respuesta

27

Usted puede utilizar la función loadHTML desde el módulo DOM, y luego de importación DOM que en SimpleXML través simplexml_import_dom:

$html = file_get_contents('http://example.com/'); 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$sxml = simplexml_import_dom($doc); 
+1

Grande 1. Se agregó un enlace a 'simplexml_import_dom' y un poco de explicación adicional. –

+0

Muy buen truco. Desafortunadamente, parece que el módulo DOM no está instalado en el servidor en el que estoy trabajando. ¿Es típicamente estándar? – chris

+0

@chris DOM y su dependencia, libxml, ambos están compilados de forma predeterminada. Se pueden omitir explícitamente en la compilación o deshabilitarse en tiempo de ejecución, pero eso es muy inusual. – phihag

7

Si esto es XHTML - sí, definitivamente es posible. True XHTML es solo XML al final, por lo que se puede analizar con un analizador XML.

SimpleXML, sin embargo, solo acepta XML estricto. Si no se puede conseguir XHTML parece que ponerlo a través de la menos estricta DOMDocument primera biblioteca hará el truco (source here):

<?php 
    $html = file_get_contents('http://...'); 
    $doc = new DOMDocument(); 
    $doc->strictErrorChecking = FALSE; 
    $doc->loadHTML($html); 
    $xml = simplexml_import_dom($doc); 
?> 
0

Esto puede depender de una página. Si la página está en XHTML (la mayoría de las páginas web hoy en día), entonces cualquier analizador XML debería hacerlo; de lo contrario, busque el analizador SGML. Aquí hay una pregunta similar, que podría estar interesado en: Error Tolerant HTML/XML/SGML parsing in PHP

+1

MOST páginas web? Fuente para los datos pls? Además, busque SO (o Internet en general) para averiguar por qué las personas generalmente no sirven XHTML correctamente. – Mchl

1

Mi versión - tolerante a errores y problemas con la codificación

libxml_use_internal_errors(true); 
$doc = new DOMDocument(); 
$doc->strictErrorChecking = FALSE; 
$doc->loadHTML(mb_convert_encoding($this->html_content, 'HTML-ENTITIES', 'UTF-8')); 
libxml_use_internal_errors(false); 
$xml = simplexml_import_dom($doc); 
Cuestiones relacionadas