Discusión sobre el artículo "Análisis sintáctico HTML con ayuda de curl"

 

Artículo publicado Análisis sintáctico HTML con ayuda de curl:

En el artículo se describe una sencilla biblioteca que usa componentes de terceros para parsear código HTML. El lector podrá saber cómo llegar hasta los datos que no se pueden obtener con solicitudes GET y POST. Vamos a elegir algún sitio web con páginas no demasiado voluminosas, e intentaremos obtener del mismo información interesante.

Como sucede en otros casos, puede perfectemente surgir la pregunta: "¿Para qué necesitamos esto?" Podemos tomar de un script MQL la página de un sitio web y leer en un lugar conocido de antemano un número de símbolos conocido de antemano. Y, a continuación, trabajar con la línea obtenida. Sí, podemos hacerlo de esa forma. Pero este enfoque vinculará inalterablemente el código MQL del script al código HTML de la página. ¿Y si este código cambia, aunque sea solo un poco? Precisamente en estos casos necesitaremos un parser (analizador sintáctico), que nos dará la posibilidad de trabajar con un documento HTML como si se tratara de un árbol (volveremos a este punto en el apartado correspondiente). Es posible implementarlo en MQL, pero, ¿será esto correcto? ¿Cómo se reflejará en el rendimiento? ¿Resultará cómodo corregir y mejorar un código así? Por eso, la tarea del análisis sintáctico se mostrará en una biblioteca aparte. Debemos destacar de inmediato que el parser no resolverá todos los problemas. Hará su parte del trabajo, pero, ¿qué ocurrirá si el diseño del sitio web cambia de una forma tan radical que los nombres de las clases y atributos sean otros totalmente distintos? En este caso, deberemos cambiar el objeto de la búsqueda de forma operativa, y es posible que no solo un objeto. Por eso, una de las tareas a las que nos enfrentaremos será la creación del código necesario, lo más rápido posible y con el mínimo de esfuerzo. Y, preferiblemente, a partir de componentes ya preparados. En este caso, si se da la situación descrita, el desarrollador podrá corregir y mejorar el código, así como introducir los cambios de forma operativa.

Vamos a elegir algún sitio web con páginas no demasiado voluminosas, e intentaremos obtener del mismo información interesante. La elección en sí no es algo tan importante, pero de todas formas, intentaremos que nuestros esfuerzos no sean en vano. COmo es lógico, esta información deberá estar disponible para los scripts MQL en el terminal. El código de programación se creará en forma de biblioteca DLL estándar.

En el presente artículo, la tarea se resolverá sin llamadas asincrónicas y sin tener en cuenta el flujo múltiple.

Autor: Andrei Novichkov

 

¿Hay alguna restricción para el análisis sintáctico?

No se mucho de este asunto, quiero parsear, digamos, datos de estas tablas. Al mismo tiempo necesito cambiar la fecha del calendario en la página, ¿es posible implementarlo con las herramientas del artículo o necesito algo más?

Московская Биржа - Основные параметры срочного контракта
Московская Биржа - Основные параметры срочного контракта
  • www.moex.com
Влияем на развитие, создаем будущее
 
Aleksey Vyazmikin:

¿Hay alguna restricción para el análisis sintáctico?

No se mucho de este asunto, quiero parsear, digamos, datos de estas tablas. Al mismo tiempo necesito cambiar la fecha del calendario en la página, ¿es posible implementarlo con las herramientas del artículo o necesito algo más?

Es imposible crear un mecanismo único para el análisis sintáctico. Puedes utilizar el artículo como base. También se pueden tomar librerías para parsear y recibir páginas. El artículo se centra en cómo trabajar con bibliotecas en un ejemplo concreto. Y el ejemplo no es complicado, para que el lector no se confunda. Recibimos una página, la cargamos en el parser. Y luego es un trabajo puramente individual, porque la estructura de las páginas es diferente en todas partes y habrá que tenerlo en cuenta. Por lo tanto, el código del artículo tendrá que ser corregido.

 

¡Ese es un giro elegante!

andrei, no puedes darnos simplemente

1. descripción de todas las funciones de esta dll - GETANDPARSE.dll

2. ejemplos de llamada a cada una de las funciones

esto permitira no entrar en todos los detalles del proyecto, yo por ejemplo todavia tengo VS 2010,

es por eso que ni siquiera puedo exponer su proyecto


Quiero usar su dll para

1. leer una página del sitio SSL

2. escribirlo en un archivo

3. Voy a analizar yo mismo, lo más probable.....

 
Denis Sartakov:

Es un giro elegante.

Buenas tardes.

La descripción de funciones de mi dll no te ayudará. Lamentablemente, cualquier dll de este tipo será "dependiente de la página". Mi dll sólo analiza la página sobre la que escribo en el artículo. No hay nada que puedas hacer, tienes que construir en la dll un algoritmo para buscar la información necesaria en la página ya analizada, por supuesto, es diferente cada vez. Hay algo al respecto en el artículo. Trate de alejarse de esto, "generalizar" de alguna manera el esquema de búsqueda - para obtener toda una poderosa aplicación independiente, que será necesaria para muy pocas personas. Necesitas un nuevo proyecto. Tome kurl para la recuperación de páginas, tome jimbo para el análisis sintáctico. Todo lo que tienes que hacer es correr a través del árbol que jimbo construye y encontrar la pieza que necesitas. Y dos. Mi dll es un tutorial. Cuento con el lector sin mucho conocimiento del tema, gente que lo sabe todo mejor que yo. Por eso el código es lo más ligero posible - comprobaciones mínimas, nada de manejo de excepciones, es inadmisible para una variante de combate.

P.D. Aún así, el estudio 10 podría actualizarse. Ya tenemos C++ 20 en febrero, así que ya es hora.

 
Andrei Novichkov:

Buenas tardes.

La descripción de funciones de mi dll no te servirá de ayuda. Lamentablemente, cualquier dll de este tipo será "dependiente de la página". Mi dll sólo analiza la página sobre la que escribo en el artículo. No hay nada que puedas hacer, tienes que construir en la dll un algoritmo para buscar la información necesaria en la página ya analizada, por supuesto, es diferente cada vez. Hay algo al respecto en el artículo. Trate de alejarse de esto, "generalizar" de alguna manera el esquema de búsqueda - para obtener toda una poderosa aplicación independiente, que será necesaria para muy pocas personas. Necesitas un nuevo proyecto. Tome kurl para la recuperación de páginas, tome jimbo para el análisis sintáctico. Todo lo que tienes que hacer es correr a través del árbol que jimbo construye y encontrar la pieza que necesitas. Y dos. Mi dll es un tutorial. Cuento con el lector sin mucho conocimiento del tema, gente que lo sabe todo mejor que yo. Por eso el código es lo más ligero posible - comprobaciones mínimas, nada de manejo de excepciones, es inadmisible para una variante de combate.

P.D. Aún así, el estudio 10 podría actualizarse. Ya tenemos C++ 20 en febrero, así que ya es hora.

Sí, gracias.

 

andrei, ¿puedes decirme cómo descargar esto de libcurl?


libcurl-x32.dll y libcurl-x32.lib.


se descarga algo de basura...

libcurl.a - ¿de qué tipo es?

 
Denis Sartakov:

andrei, ¿puedes decirme cómo descargar esto de libcurl?


libcurl-x32.dll y libcurl-x32.lib


Se descarga alguna basura.....

libcurl.a - ¿de qué tipo es?

Allí usted debe mirar cuidadosamente y elegir OS y bitness. Las versiones de 32 bits probablemente sólo se llamará libcurl.dll.

He adjuntado el archivo para usted, pero no lo he comprobado

Archivos adjuntos:
libcurl.zip  482 kb
 
Denis Sartakov:

Quiero utilizar su dll para

1. leer una página del sitio SSL

2. escribirla en un archivo

3. lo analizo yo mismo, lo más probable....

Puedes hacerlo sin DLL. ¿Qué hay de malo en descargar a través de WebRequest? Puedes parsear en MQL5. Hay diferentes códigos listos para HTML/XML. Como ejemplo, aquí hay una variante.

Извлечение структурированных данных из HTML-страниц с помощью CSS-селекторов
Извлечение структурированных данных из HTML-страниц с помощью CSS-селекторов
  • www.mql5.com
Среда разработки MetaTrader позволяет интегрировать программы и внешние данные, в частности, получаемые из сети Интернет через WebRequest. Наиболее универсальным и часто применяемым форматом данных в сети является HTML. В тех случаях, когда тот или иной публичный сервис не предоставляет открытый API для запросов или его протокол трудно...
 
Andrei Novichkov:

Ahí tienes que mirar con cuidado y elegir OS y bitness. Lo más probable es que las versiones de 32 bits se llamen simplemente libcurl.dll

Te adjunto el archivo, pero no lo he comprobado

Es sólo una dll, necesitas una librería .lib,

para que puedas hacer tus propios proyectos en C++

 
Stanislav Korotky:

Puede hacerlo sin DLL. ¿Qué hay de malo en descargar vía WebRequest? Puedes parsear en MQL5. Hay varios códigos listos para HTML/XML. Como ejemplo, aquí está tal variante.

Parsing - aquí no hay problemas en absoluto, siempre se puede hacer mal o mal.

sólo hay una cuestión -

1. leer del programa una página del sitio SSL


No he encontrado ejemplos adecuados de trabajo....