Zugriff auf HTML



  • Hallo,

    ich habe eine Frage zur generellen Herangehensweise bei folgendem Problem.
    Ich möchte aus einem C++ Programm auf eine HTML Seite zugreifen, um aus dieser ein paar Werte in das Programm zu übertragen.

    Die begehrten Werte sind in diesen beiden Listen(Auszug aus dem html Body):

    <div id="state-root">
        <div class="caption"><div id="draghandle"></div></div>
        <div id="state">
          <ul id="state0" class="connectedState"></ul>
          <ul id="state1" class="connectedState"></ul>
        </div>
     </div>
    

    Was ich bisher versucht habe ist libcurl unter VS2013 zum laufen zu bekommen. Leider bin ich als Anfänger daran gescheitert. Es gibt doch bestimmt noch andere Möglichkeiten?
    Am liebsten wäre mir, dass aus den Listen Klassen generiert werden.
    Wenn mir jemand die generelle Herangehensweise erläutern und die Bibliotheken dazu nennen könnte wäre ich sehr dankbar.

    mfg haudegen



  • Etwas Fertiges wird´s wohl nicht geben, es sei denn, irgendeine Komponente benutzt HTML zur Kommunikation und bietet eine API zum Erzeugen/Parsen an.

    Welche Probleme hast du denn mit libcurl gehabt? Mit dem VS2013 sollte das doch recht einfach hinzubekommen sein.



  • - du kannst mal schauen QT - bietet glaube ich solche Klassen schon von selbst... (da bin ich mir aber nicht ganz sicher) aber mit QT kannst du in 10-20 min einen einfachen eigenen Browser coden da müsste das auch klappen...

    - dann kannst du dir http requests + regex anschauen, also das du dir den html-code aus dem netz "lädtst" und dann einfach regex drüberlaufen lassen um die gewünschten infos zu bekommmen (std::regex oder boost::regex)

    - es gibt glaube ich auch ein c++ bibliothek die für soetwas gemacht glaube "WT-WebToolkit" zur erstellung von web-apps...
    bin mir aber jetzt nicht ganz sicher ob die sowas kann was du gerne tun möchtest, sollte aber eig funktionieren und hab leider keine zeit intensiver zu googlen, ich denk müsstest du aber schnell heraus finden... ( http://www.webtoolkit.eu/wt )

    ps. ich würde es aber über einen http-request und regex lösen... da kannst du auch gleich mit dem ergebnis weiterarbeiten... (evt. ist dies aber nicht die eleganteste lösung) 🙄



  • Ich hab jetzt libcurl doch zum laufen bekommen.
    Nach etwas googeln die Einstellungen in VS gefunden die gefehlt hatten.

    Danke @ Gast ich guck mir deine Vorschläge mal an.



  • Hier werden ein paar Begriffe durcheinander geworfen. Also erst mal gibt es eine Unterschied zwischen http und html. Oder eigentlich keinen Unterschied sondern das sind verschiedene Sachen.

    Wenn ich den Titel lese "Zugriff auf HTML", dann ist der schon ungenau. Wie liegen die HTML-Daten vor? Wenn sie als Datei vorliegen, dann kann man die mit std::ifstream lesen.

    In der Frage taucht dann libcurl auf. Das hat erst mal mit html nichts zu tun. Es ist ein http-Client. Damit kann ich auf einen Webserver zugreifen. Häufig liefert dieser Daten im html-Format aus.

    __Gast liefert noch den Hinweis auf das "WT-WebToolkit". Das wiederum ist ein http-Server und hat mit der Problemstellung wieder gar nichts zu tun. Es erzeugt html und liefert sie per http aus. Zum lesen von http oder parsen von html ist das nicht geeignet.

    Die Frage und auch Lösung schimmert dennoch hier durch: Du willst offensichtlich auf html-Daten über http zugreifen. Also mit libcurl oder einer anderen http client lib kannst Du die Daten bekommen. Mit regulären Ausdrücken kannst Du sie dann parsen.

    Es hilft, wenn man die richtigen Begriffe kennt und versteht. Da kann man präziser fragen oder auch eine Suchmaschine bemühen. Eine Suchmaschine wird keine Hinweise auf http liefern, wenn ich nach html frage.



  • Wo ist eigentlich der Unterschied zwischen boost Regex und dem "normalen" ?
    Welches sollte man eher verwenden? Gib´s evtl. ein paar deutsche Beispiele für Regex Verwendung?



  • tntnet schrieb:

    Hier werden ein paar Begriffe durcheinander geworfen. Also erst mal gibt es eine Unterschied zwischen http und html. Oder eigentlich keinen Unterschied sondern das sind verschiedene Sachen.

    - ähhhm hab ich das behauptet? steht doch extra da das man den html-code abfragt bzw lädt ... ? (per http request)

    tntnet schrieb:

    Wenn ich den Titel lese "Zugriff auf HTML", dann ist der schon ungenau. Wie liegen die HTML-Daten vor? Wenn sie als Datei vorliegen, dann kann man die mit std::ifstream lesen.

    - ähhmmm ich bin von aus gegangen im netz da er es per libcurl versucht hat?...
    - bitte richtig lesen...

    tntnet schrieb:

    In der Frage taucht dann libcurl auf. Das hat erst mal mit html nichts zu tun. Es ist ein http-Client. Damit kann ich auf einen Webserver zugreifen. Häufig liefert dieser Daten im html-Format aus.

    - ähhmm vll solltest du dich mal informieren was ein http-client genau tut... bevor du hier große töne spuckst...

    tntnet schrieb:

    __Gast liefert noch den Hinweis auf das "WT-WebToolkit". Das wiederum ist ein http-Server und hat mit der Problemstellung wieder gar nichts zu tun. Es erzeugt html und liefert sie per http aus. Zum lesen von http oder parsen von html ist das nicht geeignet.

    - wt toolkit ist eine c++ api für webanwendungen 😉 -> ich bin davon ausgegangen das man darüber http-requests relativ einfach coden kann (da der fragesteller durchschimmern lassen hat er wäre noch noch nicht so lange dabei...)
    - ein http-server wäre z.b. eine konfiguration des apache ;)=
    - hier nochmal ein wiki link was wt ist 😉 bitte richtig informieren, bevor du postest! ( http://de.wikipedia.org/wiki/Wt_(Web_Toolkit) )

    tntnet schrieb:

    Die Frage und auch Lösung schimmert dennoch hier durch: Du willst offensichtlich auf html-Daten über http zugreifen. Also mit libcurl oder einer anderen http client lib kannst Du die Daten bekommen. Mit regulären Ausdrücken kannst Du sie dann parsen.

    - 😮 ist doch das was ich geschrieben habe per http-request den html-code abfragen ( entweder temp. in eine variable oder in .txt-bzw. anderes format speichern ) dann mit regex infos raus ziehen ...
    - das kannst du mit http-requests mit qt oder wt relativ einfach umsetzen! 😉
    - RegEx ( gibt es bei boost und im std-namespace (ab c++11))

    tntnet schrieb:

    Es hilft, wenn man die richtigen Begriffe kennt und versteht. Da kann man präziser fragen oder auch eine Suchmaschine bemühen. Eine Suchmaschine wird keine Hinweise auf http liefern, wenn ich nach html frage.

    - jop deshalb hab ich im den tipp mit dem http-request geben und entsprechende programme bzw. apis um dies umzusetzen 😉

    Gute Frage: 🙂

    räägääx schrieb:

    Wo ist eigentlich der Unterschied zwischen boost Regex und dem "normalen" ?
    Welches sollte man eher verwenden? Gib´s evtl. ein paar deutsche Beispiele für Regex Verwendung?

    - boost hat umfangreichere regex- nutzungsmöglichkeiten und ist evt. etwas leichter zu handhaben als die c++11 regex ausdrücke im std-namespace...
    - soweit ich weiß kann man mit den std-regex ausdrücken auch nicht alles umsetzen... (boost ist ähnlich den regex von perl)
    - was du eher verwendest ist geschmachssache und vielleich was du machen willst... hast du ein großes projekt mit vielen reg.ausdrücken ist meiner meinung nach boost wahrscheinlich geeigneter, einfacher umzusetzen, ist aber sicherlich auch mit std-namespace regex umsetztbar...
    - dafür sind die std-regex eh im std-namespace enthalten ( musst du nicht extra linken und includen -> also es sind keine externen bibliotheken halt )
    - aber was du nutzt oder was wirklich "besser" ist kann ich nicht sagen und ist meier meinung nach problem bezogen zu beantworten und geschmackssache 😉

    lg



  • __Gast schrieb:

    tntnet schrieb:

    In der Frage taucht dann libcurl auf. Das hat erst mal mit html nichts zu tun. Es ist ein http-Client. Damit kann ich auf einen Webserver zugreifen. Häufig liefert dieser Daten im html-Format aus.

    - ähhmm vll solltest du dich mal informieren was ein http-client genau tut... bevor du hier große töne spuckst...

    - entschuldige, war etwas gereizt eben... sollte nicht böse gemeint sein aber so klingt es ... ich bitte um entschuldigung ... 😞
    - nat. hast du recht und nicht bei jedem http-request wird html ausgeliefert...
    - aber es hilft ihm zu googlen und er kann das problem lösen sofern er gewillt ist eine recherche zu betreiben 😉

    lg
    ps. wollt ich noch loswerden 🙄



  • __Gast schrieb:

    __Gast schrieb:

    tntnet schrieb:

    In der Frage taucht dann libcurl auf. Das hat erst mal mit html nichts zu tun. Es ist ein http-Client. Damit kann ich auf einen Webserver zugreifen. Häufig liefert dieser Daten im html-Format aus.

    - ähhmm vll solltest du dich mal informieren was ein http-client genau tut... bevor du hier große töne spuckst...

    - entschuldige, war etwas gereizt eben... sollte nicht böse gemeint sein aber so klingt es ... ich bitte um entschuldigung ... 😞
    - nat. hast du recht und nicht bei jedem http-request wird html ausgeliefert...
    - aber es hilft ihm zu googlen und er kann das problem lösen sofern er gewillt ist eine recherche zu betreiben 😉

    lg
    ps. wollt ich noch loswerden 🙄

    Na da hast Du ja gerade noch mal die Kurve bekommen. Ich war schon ein wenig beleidigt. Aber ich nehme Deine Entschuldigung gerne an 👍 .

    Ich habe auch das Gefühl, dass Du das falsch verstanden hast. Ich habe mich in erster Linie auf die Originalfrage von alterhaudegen bezogen.

    Nur mal so zur Ergänzung: ich weiß, was ein http-Client genau tut. Und zwar sehr genau. Ich habe sowohl einen http-Client als auch einen Http-Server geschrieben. Und auch Wt kenne ich gut, da es ja praktisch eine direkte Konkurrenz zu meinen Tntnet ist. Und es ist ein Server und eben kein Client. Damit kann man eben nicht auf einen Webserver zugreifen.



  • Na da hast Du ja gerade noch mal die Kurve bekommen. Ich war schon ein wenig beleidigt. Aber ich nehme Deine Entschuldigung gerne an 👍 .

    das freut mich... entschuldige mich bitte nochmal.. wird nicht nochmal vorkommen 🙂 ..

    Nur mal so zur Ergänzung: ich weiß, was ein http-Client genau tut. Und zwar sehr genau. Ich habe sowohl einen http-Client als auch einen Http-Server geschrieben. Und auch Wt kenne ich gut, da es ja praktisch eine direkte Konkurrenz zu meinen Tntnet ist. Und es ist ein Server und eben kein Client. Damit kann man eben nicht auf einen Webserver zugreifen.

    bin ich auch drauf gestoßen auf dein tntnet sieht echt gut aus 😉 respekt...
    jop... ist schon richtig ... ich dachte man kann mit WT auch http-get anfragen schicken und auswerten... (das weiß ich aber nicht genau, habe ich oben geschrieben, ich dachte das kanns)

    ich selbst würde eher zu libcurl tendieren 😉 ...
    nach gestriger kurzer recherche erscheint das für mich am geeignetesten ...
    (ist wahrscheinlich aber geschmackssache, wie und mit was du das umsetzt)


Anmelden zum Antworten