Diskussion zum Artikel "Parsen von HTML mit curl"

 

Neuer Artikel Parsen von HTML mit curl :

Der Artikel enthält die Beschreibung einer einfachen HTML-Code Parsing-Bibliothek mit Komponenten von Drittanbietern. Insbesondere werden die Möglichkeiten des Zugriffs auf Daten behandelt, die nicht über GET- und POST-Anfragen abgerufen werden können. Wir werden eine nicht zu umfangreiche Webseite auswählen und versuchen, interessante Daten von dieser Webseite zu laden.

Man kann sich fragen: "Wozu das Ganze?" Eine einfache Lösung besteht darin, direkt aus einem MQL-Skript auf die Seite der Website zuzugreifen und die bereits bekannte Anzahl von Positionen an der bekannten Seitenposition zu lesen. Anschließend kann die empfangene Zeichenkette weiterverarbeitet werden. Dies ist eine der möglichen Methoden. Aber in diesem Fall wird der MQL-Skriptcode eng an den HTML-Code der Seite gebunden. Was passiert, wenn sich der HTML-Code ändert? Deshalb benötigen wir einen Parser, der eine baumartige Operation mit einem HTML-Dokument ermöglicht (die Details werden in einem separaten Abschnitt erläutert). Wenn wir den Parser in MQL implementieren, wird dies bequem und effizient in Bezug auf die Leistung sein? Kann ein solcher Code ordnungsgemäß gepflegt werden? Aus diesem Grund werden die Parsing-Funktionen in einer separaten Bibliothek implementiert. Der Parser wird jedoch nicht alle Probleme lösen. Er erfüllt die gewünschte Funktionen. Aber was ist, wenn sich das Design der Website radikal ändert und andere Klassennamen und Attribute verwendet werden? In diesem Fall müssen wir das Suchobjekt ändern oder mehrere Objekte bearbeiten. Daher ist es eines unserer Ziele, den notwendigen Code so schnell wie möglich und mit geringstem Aufwand zu erstellen. Es wird besser sein, wenn wir fertige Module verwenden. Dies ermöglicht es dem Entwickler, den Code einfach zu pflegen und im Falle der oben genannten Situation schnell zu bearbeiten.

Wir werden eine nicht zu umfangreiche Webseite auswählen und versuchen, interessante Daten von dieser Webseite zu laden. Die Art der Daten ist in diesem Fall nicht wesentlich, aber lassen Sie uns versuchen, ein nützliches Werkzeug zu schaffen. Natürlich müssen diese Daten den MQL-Skripten im Terminal zur Verfügung stehen. Der Programmcode wird als Standard-DLL erstellt.

In diesem Artikel werden wir das Tool ohne asynchrone Aufrufe und Multithreading implementieren.

Autor: Andrei Novichkov

Andrei Novichkov
Andrei Novichkov
  • www.mql5.com
Hat den Artikel Parsen von HTML mit curl veröffentlicht Der Artikel enthält die Beschreibung einer einfachen HTML-Code Parsing-Bibliothek mit Komponenten von Drittanbietern. Insbesondere werden die Möglichkeiten des Zugriffs auf Daten behandelt, die nicht über GET- und POST-Anfragen abgerufen werden können. Wir werden eine nicht zu umfangreiche...
 

Gibt es irgendwelche Einschränkungen beim Parsen?

Ich weiß nicht viel über dieses Geschäft, ich möchte, sagen wir, Daten aus diesen Tabellen zu parsen. Gleichzeitig muss ich das Datum des Kalenders auf der Seite ändern, ist es möglich, es mit den Tools aus dem Artikel zu implementieren oder brauche ich etwas anderes?

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

Gibt es irgendwelche Einschränkungen beim Parsing?

Ich weiß nicht viel über dieses Geschäft, ich möchte, sagen wir, Daten aus diesen Tabellen zu parsen. Gleichzeitig muss ich das Datum des Kalenders auf der Seite ändern, ist es möglich, es mit den Tools aus dem Artikel zu implementieren oder brauche ich etwas anderes?

Es ist unmöglich, einen einzigen Mechanismus für das Parsing zu erstellen. Sie können den Artikel als Grundlage verwenden. Es können auch Bibliotheken zum Parsen und Empfangen von Seiten genommen werden. Der Artikel konzentriert sich darauf, wie man mit Bibliotheken an einem konkreten Beispiel arbeitet. Und das Beispiel ist nicht kompliziert, so dass der Leser nicht verwirrt wird. Wir bekommen eine Seite, laden sie in den Parser. Und dann ist es reine Einzelarbeit, denn die Struktur von Seiten ist überall anders und muss berücksichtigt werden. Deshalb muss der Code aus dem Artikel korrigiert werden.

 

Das ist eine verwegene Wendung!

andrei, kannst du uns nicht einfach folgendes geben

1. eine Beschreibung aller Funktionen in dieser dll - GETANDPARSE.dll

2. Beispiele für den Aufruf jeder der Funktionen

dies wird es ermöglichen, nicht in alle Details des Projekts zu gehen, ich zum Beispiel habe noch VS 2010,

deshalb kann ich Ihr Projekt nicht einmal freilegen


Ich möchte Ihre DLL verwenden, um

1. eine Seite von einer SSL-Site lesen

2. sie in eine Datei zu schreiben

3. ich werde sie selbst parsen, höchstwahrscheinlich.....

 
Denis Sartakov:

verdreht.

Guten Tag!

Die Beschreibung der Funktionen meiner dll wird Ihnen nicht weiterhelfen. Leider ist jede solche dll "seitenabhängig". Meine dll analysiert nur die Seite, über die ich in dem Artikel schreibe. Da kann man nichts machen, man muss in die Dll einen Algorithmus einbauen, der die notwendigen Informationen in der bereits geparsten Seite sucht, natürlich ist das jedes Mal anders. In dem Artikel steht etwas darüber. Versuchen Sie, davon wegzukommen, "verallgemeinern" Sie irgendwie das Suchschema - um eine ganz mächtige, eigenständige Anwendung zu bekommen, die nur von sehr wenigen Leuten benötigt wird. Sie brauchen ein neues Projekt. Nehmen Sie kurl für den Seitenaufruf, nehmen Sie jimbo für das Parsing. Alles, was Sie tun müssen, ist durch den Baum zu laufen, den jimbo aufbaut, und das Stück zu finden, das Sie brauchen. Und zweitens. Meine DLL ist ein Tutorial. Ich rechne damit, dass der Leser nicht viel Ahnung vom Thema hat, Leute mit Ahnung wissen alles besser als ich. Deshalb ist der Code so leicht wie möglich - minimale Prüfungen, keine Ausnahmebehandlung, das ist unzulässig für eine Kampfvariante.

P.S. Trotzdem könnte das 10. Studio aktualisiert werden. Wir haben bereits C++ 20, das im Februar kommt, also ist es höchste Zeit.

 
Andrei Novichkov:

Guten Tag.

Die Beschreibung der Funktionen meiner dll wird Ihnen nicht weiterhelfen. Leider ist jede solche dll "seitenabhängig". Meine dll analysiert nur die Seite, über die ich in diesem Artikel schreibe. Da kann man nichts machen, man muss in die Dll einen Algorithmus einbauen, der die notwendigen Informationen in der bereits geparsten Seite sucht, natürlich ist das jedes Mal anders. In dem Artikel steht etwas darüber. Versuchen Sie, davon wegzukommen, "verallgemeinern" Sie irgendwie das Suchschema - um eine ganz mächtige, eigenständige Anwendung zu bekommen, die nur von sehr wenigen Leuten benötigt wird. Sie brauchen ein neues Projekt. Nehmen Sie kurl für den Seitenaufruf, nehmen Sie jimbo für das Parsing. Alles, was Sie tun müssen, ist durch den Baum zu laufen, den jimbo aufbaut, und das Stück zu finden, das Sie brauchen. Und zweitens. Meine DLL ist ein Tutorial. Ich rechne mit Lesern, die nicht viel Ahnung von der Materie haben, mit Leuten, die alles besser wissen als ich. Deshalb ist der Code so leicht wie möglich - minimale Prüfungen, keine Ausnahmebehandlung, es ist unzulässig für eine Kampfvariante.

P.S. Trotzdem könnte das 10. Studio aktualisiert werden. Wir haben bereits C++ 20, das im Februar kommt, also ist es höchste Zeit.

Ja, danke.

 

andrei, können Sie mir sagen, wie ich das von libcurl herunterladen kann?


libcurl-x32.dll und libcurl-x32.lib.


Irgendein Müll wird heruntergeladen...

libcurl.a - welcher Typ ist das?

 
Denis Sartakov:

andrei, können Sie mir sagen, wie man diese von libcurl herunterladen?


libcurl-x32.dll und libcurl-x32.lib


Einiges an Müll wird heruntergeladen.....

libcurl.a - welcher Typ ist das?

Hier sollten Sie genau hinschauen und das Betriebssystem und die Bitgröße auswählen. 32-Bit-Versionen werden wahrscheinlich einfach libcurl.dll genannt.

Ich habe die Datei für Sie angehängt, aber ich habe sie nicht überprüft

Dateien:
libcurl.zip  482 kb
 
Denis Sartakov:

Ich möchte Ihre DLL verwenden, um

1. eine Seite von der SSL-Site zu lesen

2. sie in eine Datei zu schreiben

3. ich werde sie selbst parsen, wahrscheinlich....

Sie können es auch ohne DLL machen. Was ist falsch am Herunterladen über WebRequest? Sie können in MQL5 parsen. Es gibt verschiedene vorgefertigte Codes für HTML/XML. Als Beispiel ist hier eine solche Variante.

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

Dort müssen Sie genau hinschauen und das Betriebssystem und die Bitgröße auswählen. 32-Bit-Versionen werden höchstwahrscheinlich einfach libcurl.dll genannt

Ich habe die Datei für Sie angehängt, aber ich habe sie nicht überprüft

Es ist nur eine dll, du brauchst eine .lib Bibliothek,

damit Sie Ihre eigenen Projekte in C++ erstellen können

 
Stanislav Korotky:

Sie können es auch ohne DLL tun. Was ist falsch am Herunterladen über WebRequest? Sie können in MQL5 parsen. Es gibt verschiedene vorgefertigte Codes für HTML/XML. Als Beispiel ist hier eine solche Variante.

Parsen - hier gibt es überhaupt keine Probleme, man kann es immer gut oder schlecht machen.

Es gibt nur eine Frage -

1. eine Seite von einer SSL-Site aus dem Programm zu lesen


Ich habe keine adäquaten Arbeitsbeispiele gefunden....