¡Ya tenemos terminada la primera aproximación de lo que será en un futuro WebStruct!
Actualmente la aplicación realiza lo siguiente:
– A partir de una url inicial, construimos un grafo que almacena información de todas las páginas del sitio. Este proceso se realiza con una araña que basa su funcionamiento en dos partes muy bien definidas: un requestor y un parser.
El resquestor se encarga de realizar peticiones HTTP para obtener el código HTML de cada página.
El parser se encarga de analizar dicho código para buscar los puntos interesantes del código: enlaces, titulo, etc.
– Dicho grafo tiene complejidad constante en accesos a partir de la url que queremos buscar.
– Con el grafo construido ejecuta algoritmos que aportan información sobre el portal, el viernes os explicaré su funcionalidad y utilidad.
El requestor lo he implementado de forma muy sencilla gracias a la librería libCurl para C++.
El parser me ha llevado más tiempo. Después de mucho investigar y probar con flex++ y con Spirit, al final he tenido que decantarme por otra opción más artesanal y prescindir de dichas funciones. El problema ha sido únicamente de integración (en el caso de frlex++) ya que es complejo integrarlo en otras aplicaciones, y de falta de conocimientos (en el caso de Spirit). Spirit es una librería bastante potente pero muy difícil de utilizar para el propósito que busco. Está especializado en realizar análisis de cadenas muy explícitas y definidas, siendo el código HTML un lenguaje muy poco claro y con una sintaxis ambigua. Además tenemos un problema muy grande con el hecho de la formación del código HTML, ya que la teoría y la práctica se corresponde en muy pocos casos por lo que ha de ser un parser muy flexible.
En todo caso en un futuro se intentará de nuevo utilizar dicha librería para optimizar el código y hacerlo más sencillo de ampliar y de leer. Mientras tanto la función find de la librería string ha sido de gran utilidad. Dicha función encuentra una cadena dentro de otra. También nos hemos apoyado en la función substr que obtiene una subcadena a partir de una cadena mayor.
Actualmente tenemos una herramienta interesante. Espero que con esta base y en un futuro tengamos una herramienta potente, rápida, útil y usable, que nos permita ofrecer un servicio de forma automática e independiente.
Hola Samuel, creo que la exposición que realizarás el viernes puede resultar muy interesante ya que creo que tu herramienta puede servir para comparar dos páginas web y eso es lo que según mi opinión puede dar potencia a tu herramienta.
No se si tendrás implementada esto que te comentó, pero la realización de graficos que comparen los datos de dos páginas web puede resultar muy interesante, si no para esta versión para futuras versiones.
Un saludo,
Sergio Vasco Hernández.
Enhorabuena Samu!
Veo que esto va viento en popa a toda vela!
No se hasta que punto querrás llegar con la aplicación. Te recomiendo que lo de las librerías elijas muy bien cuál de ellas debes utilizar porque supongo que con páginas enormes tendrás problemas de performances.
Saludos!
Por cierto, se me olvidaba.
Desde lo que puedo entender, esta tarea sería muy paralelizable. No se como lo tienes implementada pero estaría bien tenerlo en cuenta.
PD: Pablo, tenéis que mirar qué le pasa a vuestro server. Es lentísimo… (Y no tengo problemas de conexión)
http://speedtest.ookla.com/result/1271899831.png