Analizar HTML a XML

Estoy tratando de descubrir cómo analizar HTML a XML, pero no puedo resolverlo. quiero usar el MSXML2.ServerXMLHTTP objeto (en un archivo .asp).

<% 
url = "http://www.website.com/file.asp"
set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") 
xmlhttp.open "POST", url, false 
xmlhttp.send
Response.write xmlhttp.responseText
set xmlhttp = nothing 
%>

Esto me da el texto, pero realmente no sé a dónde ir desde aquí.

preguntado el 22 de mayo de 12 a las 16:05

Bueno, tampoco sabemos a dónde quieres ir desde aquí. ¿Qué quieres hacer con el texto? -

Bien, lo siento. La página es una tabla. Necesito leer la tabla, obtener el contenido y volver a crear la tabla usando los datos que analicé. Tengo que usar el objeto MSXML2.ServerXMLHTTP. -

Puede usar MSXML para descargar el contenido y luego, según la respuesta, use HTML o XML DOM para analizarlo. Debe actualizar su pregunta con una respuesta de muestra y qué información está buscando analizar. -

2 Respuestas

Creo que el problema está en HEAD del archivo HTML. De MSDN: la resonancia debería devolver XML ("text/xml"), pero su http://www.website.com/file.asp devuelve contenido HTML, con tipo mimo ("text/html").

contestado el 22 de mayo de 12 a las 16:05

Esa es la cosa... la página está escrita en HTML y necesito analizar el contenido usando MSXML2... :( - Krzysiek

@Krzysiek, ¿por qué debe analizarse con MSXML? ¿Es esto una tarea? - Jimmy Peña

Extensiones XML nativas

Prefiero usar una de las extensiones XML nativas, ya que vienen incluidas con PHP, generalmente son más rápidas que todas las librerías de terceros y me brindan todo el control que necesito sobre el marcado.

DOM

La extensión DOM le permite operar en documentos XML a través de DOM API con PHP 5. Es una implementación del Document Object Model Core Level 3 del W3C, una interfaz neutral de plataforma y lenguaje que permite que los programas y scripts accedan y se actualicen dinámicamente. el contenido, la estructura y el estilo de los documentos.

DOM es capaz de analizar y modificar HTML del mundo real (roto) y puede realizar consultas XPath. Se basa en libxml.

Se necesita algo de tiempo para ser productivo con DOM, pero ese tiempo bien vale la pena, en mi opinión. Dado que DOM es una interfaz independiente del lenguaje, encontrará implementaciones en muchos lenguajes, por lo que si necesita cambiar su lenguaje de programación, es probable que ya sepa cómo usar la API DOM de ese lenguaje.

Se puede encontrar un ejemplo de uso básico al tomar el atributo href de un elemento A y se puede encontrar una descripción conceptual general en DOMDocument en PHP.

La forma de usar la extensión DOM se ha cubierto ampliamente en StackOverflow, por lo que si elige usarla, puede estar seguro de que la mayoría de los problemas que encuentre se pueden resolver buscando/explorando StackOverflow.

XMLReader

La extensión XMLReader es un analizador de extracción XML. El lector actúa como un cursor que avanza en el flujo de documentos y se detiene en cada nodo en el camino.

XMLReader, como DOM, se basa en libxml. No estoy al tanto de cómo activar el módulo analizador HTML, por lo que es probable que usar XMLReader para analizar HTML roto sea menos sólido que usar DOM, donde puede indicarle explícitamente que use el módulo analizador HTML de libxml.

Se puede encontrar un ejemplo de uso básico al obtener todos los valores de h1 etiquetas usando PHP.

Analizador XML

Esta extensión le permite crear analizadores XML y luego definir controladores para diferentes eventos XML. Cada analizador XML también tiene algunos parámetros que puede ajustar.

La biblioteca XML Parser también se basa en libxml e implementa un analizador XML push de estilo SAX. Puede ser una mejor opción para la administración de memoria que DOM o SimpleXML, pero será más difícil trabajar con él que con el analizador de extracción implementado por XMLReader.

Simplexml

La extensión SimpleXML proporciona un conjunto de herramientas muy simple y fácil de usar para convertir XML en un objeto que se puede procesar con selectores de propiedades normales e iteradores de matriz.

SimpleXML es una opción cuando sabes que HTML es XHTML válido. Si necesita analizar HTML roto, ni siquiera considere SimpleXml porque se ahogará.

Puede encontrar un ejemplo de uso básico en Un programa simple para el nodo CRUD y los valores de nodo del archivo xml y hay muchos ejemplos adicionales en el manual de PHP.

Bibliotecas de terceros (basadas en libxml)

Si prefiere usar una librería de terceros, le sugiero usar una librería que realmente use DOM/libxml debajo en lugar de analizar cadenas.

FluentDom - Repositorio

FluentDOM proporciona una interfaz XML fluida similar a jQuery para DOMDocument en PHP. Los selectores están escritos en XPath o CSS (usando un conversor de CSS a XPath). Las versiones actuales amplían el DOM implementando interfaces estándar y agregan características del DOM Living Standard. FluentDOM puede cargar formatos como JSON, CSV, JsonML, RabbitFish y otros. Se puede instalar a través de Composer.

HtmlPageDom

Wa72\HtmlPageDom` es una biblioteca PHP para una fácil manipulación de documentos HTML utilizando componentes DomCrawler de Symfony2 para atravesar el árbol DOM y lo amplía agregando métodos para manipular el árbol DOM de documentos HTML.

phpQuery (no actualizado durante años)

phpQuery es una API de Modelo de Objetos de Documento (DOM) del lado del servidor, encadenable, impulsada por selector CSS3 basada en la biblioteca jQuery JavaScript escrita en PHP5 y proporciona una interfaz de línea de comandos (CLI) adicional.

Ver también: https://github.com/electrolinux/phpquery

Zend_Dom

Zend_Dom proporciona herramientas para trabajar con estructuras y documentos DOM. Actualmente, ofrecemos Zend_Dom_Query, que proporciona una interfaz unificada para consultar documentos DOM utilizando selectores XPath y CSS.

ruta de consulta

QueryPath es una biblioteca PHP para manipular XML y HTML. Está diseñado para trabajar no solo con archivos locales, sino también con servicios web y recursos de bases de datos. Implementa gran parte de la interfaz jQuery (incluidos los selectores de estilo CSS), pero está muy ajustado para el uso del lado del servidor. Se puede instalar a través de Composer.

fDOMDocumento

fDOMDocument extiende el DOM estándar para usar excepciones en todas las ocasiones de errores en lugar de advertencias o avisos de PHP. También agregan varios métodos personalizados y accesos directos para mayor comodidad y para simplificar el uso de DOM.

saber / xml

sabre/xml es una biblioteca que envuelve y amplía las clases XMLReader y XMLWriter para crear un sistema de mapeo y patrón de diseño simple "XML a objeto/matriz". La escritura y lectura de XML es de un solo paso y, por lo tanto, puede ser rápida y requerir poca memoria en archivos XML de gran tamaño.

FluidXML

FluidXML es una biblioteca PHP para manipular XML con una API concisa y fluida. Aprovecha XPath y el patrón de programación fluido para que sea divertido y eficaz.

De terceros (no basado en libxml)

El beneficio de construir sobre DOM/libxml es que obtiene un buen rendimiento desde el primer momento porque se basa en una extensión nativa. Sin embargo, no todas las librerías de terceros siguen este camino. Algunos de ellos se enumeran a continuación.

Analizador de DOM HTML simple PHP

¡Un analizador HTML DOM escrito en PHP5 + le permite manipular HTML de una manera muy fácil!

  • Requiere PHP 5+.
  • Admite HTML no válido.
  • Busque etiquetas en una página HTML con selectores como jQuery.
  • Extrae contenido de HTML en una sola línea.

Generalmente no recomiendo este analizador. El código base es horrible y el analizador en sí mismo es bastante lento y tiene mucha memoria. No todos los selectores jQuery (como los selectores secundarios) son posibles. Cualquiera de las bibliotecas basadas en libxml debería superar esto fácilmente.

Analizador PHP Html

PHPHtmlParser es un analizador HTML simple y flexible que le permite seleccionar etiquetas utilizando cualquier selector de CSS, como jQuery. El objetivo es ayudar en el desarrollo de herramientas que requieren una manera rápida y fácil de raspar HTML, ¡ya sea válido o no! Este proyecto fue respaldado originalmente por sunra/php-simple-html-dom-parser pero parece que el soporte se detuvo, por lo que este proyecto es mi adaptación de su trabajo anterior.

Nuevamente, no recomendaría este analizador. Es bastante lento con un uso elevado de la CPU. Tampoco hay una función para borrar la memoria de los objetos DOM creados. Estos problemas aumentan particularmente con los bucles anidados. La documentación en sí es inexacta y está mal escrita, sin respuestas a las correcciones desde el 14 de abril del 16.

Ganon

  • Un tokenizador universal y un analizador HTML/XML/RSS DOM
  • Habilidad para manipular elementos y sus atributos.
  • Admite HTML no válido y UTF8
  • Puede realizar consultas avanzadas similares a CSS3 en elementos (como jQuery, espacios de nombres compatibles)
  • Un embellecedor HTML (como HTML Tidy)
  • Minificar CSS y Javascript
  • Ordenar atributos, cambiar mayúsculas y minúsculas, corregir sangría, etc.
  • extensible
  • Análisis de documentos mediante devoluciones de llamada basadas en el carácter/token actual
  • Operaciones separadas en funciones más pequeñas para anularlas fácilmente
  • Rapido y facil

Nunca lo usé. No puedo decir si es bueno.

HTML 5

Puede usar lo anterior para analizar HTML5, pero puede haber peculiaridades debido al marcado que permite HTML5. Entonces, para HTML5, debe considerar usar un analizador dedicado, como:

html5lib

Implementaciones de Python y PHP de un analizador HTML basado en la especificación WHATWG HTML5 para una máxima compatibilidad con los principales navegadores web de escritorio.

Es posible que veamos más analizadores dedicados una vez que HTML5 esté finalizado. También hay una publicación de blog de W3 titulada How-To for html 5 parsing que vale la pena revisar.

Servicios web

Si no tiene ganas de programar PHP, también puede utilizar los servicios web. En general, encontré muy poca utilidad para estos, pero solo somos yo y mis casos de uso.

ScraperWiki

La interfaz externa de ScraperWiki le permite extraer datos en la forma que desee para usar en la web o en sus propias aplicaciones. También puede extraer información sobre el estado de cualquier raspador.

Expresiones regulares

Por último y menos recomendado, puede extraer datos de HTML con expresiones regulares. En general, se desaconseja el uso de expresiones regulares en HTML.

La mayoría de los fragmentos que encontrará en la web para coincidir con el marcado son frágiles. En la mayoría de los casos, solo funcionan para una parte muy particular de HTML. Pequeños cambios de marcado, como agregar espacios en blanco en algún lugar, o agregar o cambiar atributos en una etiqueta, pueden hacer que la expresión regular falle cuando no está escrita correctamente. Debe saber lo que está haciendo antes de utilizar RegEx en HTML.

Los analizadores de HTML ya conocen las reglas sintácticas de HTML. Las expresiones regulares deben enseñarse para cada nueva expresión regular que escriba. Las expresiones regulares están bien en algunos casos, pero realmente depende de su caso de uso.

Puede escribir analizadores más confiables, pero escribir un analizador personalizado completo y confiable con expresiones regulares es una pérdida de tiempo cuando las bibliotecas antes mencionadas ya existen y hacen un trabajo mucho mejor en esto.

Ver también Parsing Html The Cthulhu Way

Libros Si quieres gastar algo de dinero, echa un vistazo a

Guía de PHP Architect para Webscraping con PHP No estoy afiliado a PHP Architect ni a los autores.

Respondido el 05 de junio de 21 a las 08:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.