Extraer HTML con Yahoo Query Language

Extraer HTML con Yahoo Query Language

Extraer HTML con Yahoo Query Language

Para uno de los proyectos que estoy preparando estaba valorando Yahoo Query Language para extraer parte del HTML de una página web mediante JavaScript, añadirlo al DOM para manipularlo y mostrarlo en una página del proyecto. Si queremos extraer HTML de una web que no permite peticiones AJAX entre dominios en lugar de montarnos un servidor proxy podemos usar YQL. Éste nos permite ajustar la petición query para que nos devuelva los datos en formato XML o JSON. Yahoo define YQL de la siguiente forma:

The Yahoo! Query Language is an expressive SQL-like language that lets you query, filter, and join data across Web services. With YQL, apps run faster with fewer lines of code and a smaller network footprint.

Funcionamiento de la demo

Esta demo se carga la ficha de datos que tienen las páginas de Wikipedia, pero podemos probar a cargar datos desde otras fuentes. En el campo URL insertaremos la URL de la página de la que queremos extraer el HTML y en el campo XPath insertaremos la expresión XPath del nodo que queremos cargar.

Podemos obtener la expresión XPath del nodo desde las developer tools de Google Chrome o desde Firebug de Firefox. Para ello, colocamos el cursor del ratón sobre el nodo y pulsamos el botón derecho del ratón y en el menú contextual que aparece pulsaremos la opción Copiar XPath. Ahora sólo tenemos que pegarlo en el campo XPath de la demo.

Para obtener resultados más concretos es conveniente entender un poco el funcionamiento de XPath, así por ejemplo, para obtener la tabla de datos de las páginas de la Wikipedia las developer tools de Google Chrome me han generado la expresión Xpath //*[@id=”mw-content-text”]/table[1]. Pero ésta no es siempre la primera tabla dentro del nodo con id=mw-content-text así que si quiero una expresión que me valga para cualquier página de la Wikipedia deberé entender un poco el funcionamiento de Xpath, en este caso necesitaré //table[contains(@class, “infobox”)].

JavaScript e YQL

Yahoo Query Language además de extensa documentación y ejemplos ofrece la herramienta YQL Console que nos permite probar nuestros YQL statements para verificar que obtenemos una respuesta correcta. En la siguiente captura podemos ver la respuesta de la query que la demo realiza por defecto. Como lo que yo necesito es el html de la web uso XML en lugar de JSON y YQL me devolverá un XML con la parte de HTML solicitada dentro del tag <results>.

YQL Console

En la demo dejo como variables la URL y el XPath dentro de mi YQL statement para que el usuario pueda probar el funcionamiento con otras webs y lo inserto dentro de una función encodeURIComponent para codificar los caracteres. Es importante tener en cuenta que YQL parsea por defecto el contenido de cualquier página web usando la especificación HTML 4.01. Si la página sobre la que vamos a hacer la llamada está en HTML5 deberemos parsearla usando la especificación HTML5, por lo que tendremos que añadir al YQL statement compat=”html5″. En caso contrario, el código HTML que nos devolverá la aplicación no será exactamente el mismo y nos encontraremos, sobre todo, etiquetas p que no estaban en el código original.

Se realiza una llamada XMLHttpRequest para obtener el nodo XPath solicitado y se construye un nuevo HTML document para poder parsear antes de mostrar al usuario.

El código completo del JavaScript de la demo es el siguiente:

Tags:
©2024 PoseLab SL. All rights reserved.