C++ | Text aus Website auslesen



  • Hey,
    ich habe mich gefragt ob man aus Webseiten Daten wie zB Textpassagen(die sich jedoch ändern könnten) auslesen kann. Habe mich auf einigen Foren eingelesen aber nichts brauchbares gefunden. Hoffe jemend kann mich da aufklären.
    Hier die Website die die Ich gerne auslesen würde:https://www.feuerwehr-krems.at/ShowArtikelSpeed.asp?Artikel=5072&filter=07
    Wäre so gedacht dass sich bei änderung ein Telegram-Bot den neuen Inhalt versendet aber dass schaff ich allen.
    Danke im schonmal im voraus.

    Lg
    Firealex



  • Wo liegen denn die Probleme? Wenn du bisher eher wenig in C++ programmiert hast, wäre eine andere Sprache auch okay?
    Soll es plattformunabhängig sein oder für ein bestimmtes OS?
    So wie ich es sehe, müsste das hier heruntergeladen werden.
    Anschließend bekommst du ein Dokument, das so aussieht:

    
    <html>
    <head>
    <meta http-equiv="Content-Language" content="de">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <link rel="stylesheet" href="/stylesheet.css" type="text/css">
    <title>Zeige eingesetzte Feuerwehren in NÖ</title></head>
    <body class="ListeEng" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
    
    <table border="0" width="100%" id="table2" cellpadding="0" height="28" cellspacing="0">
    
    	<tr><td height="22" width="1%" class=ListeGerade></td><td height="22" width ="*" class=ListeGerade>Keine Feuerwehr in Einsatz.</td><td height="22" width="28%" class=ListeGerade>&nbsp;</td><td height="22" width="20%" class=ListeGerade>&nbsp;</td></tr><tr><td height="22" width="1%" class=ListeUngerade></td><td height="22" width ="*" class=ListeUngerade>&nbsp;</td><td height="22" width="28%" class=ListeUngerade>&nbsp;</td><td height="22" width="20%" class=ListeUngerade>&nbsp;</td></tr>    
      </table>
    </body>
    </html>
    

    Und da müsstest du dich eben zu den Einsätzen durchhangeln und diese auswerten.

    Edit: Vermutlich wäre es besser, diese Seite herunterzuladen und die Einsätze zu filtern.



  • Schau dir mal https://scrapy.org/ an. Ist allerdings nicht C++.



  • Habe sowas schon häufiger gemacht. Ich verwende dafür libcurl um den Quelltext der Website zu holen. libcurl kannst du dann auch gleich wieder für den Telegram-Bot nutzen. Parsen kannst du es dann selbst. Ich habe bei mir immer std::regex dafür benutzt. Aber das mag nicht jeder.



  • @Zhavok Im Allgemeinen könnte das aber problematisch sein, da HTML keine reguläre Sprache ist. Kann natürlich Anwendungsbezogen trotzdem funktionieren.



  • @Schlangenmensch ich kenne mich im Webbereich schlecht aus, deshalb hab ich das immer so gemacht. Oder mit webdriverxx + Selenium. Aber da läuft halt wirklich dann ein Browser mit 😅



  • Ich persönlich würde sowas niemals mit C++ machen. Viel zu viel Aufwand sich die passenden Libs zu suchen und alles zusammenzuknoten.

    Mit Java, C#, Python etc. ist das Einbinden von Modulen/Komponenten/Libraries so viel einfacher und es sind auch fertige Libs verfügbar mit denen man relativ einfach mit HTML hantieren kann. Oder gleich Commandline-Tools zusammenknoten. Im Prinzip sollte für das ganze ein Shell-Skript reichen. Vielleicht mit einem minimalen Teil in einer "echten" Programmiersprache dazwischen den das Shell-Script aufruft.

    Eine Möglichkeit wäre z.B. das HTML erstmal nach XML zu konvertieren und dann mit XQuery bzw. XSLT draufzuhauen. Der einzige Teil wo nicht ohne zu Googeln nicht sicher weiss dass es dafür gute fertige Commandline-Tools gibt ist die HTML->XML Konvertierung. Kann mir aber nicht vorstellen dass es da nichts fertiges gibt, HTML nach z.B. XHTML zu konvertieren ist denke ich nicht wirklich so schwer.



  • @hustbaer sagte in C++ | Text aus Website auslesen:

    Mit Java

    Habe das zwar selbst noch nie gemacht, aber auch schon gesehen. Puppeteer in retractions.js. Heute ist ja Open-Space in Mode, deshalb sind meine Zweifel völlig falsch.



  • Was ist Open Space? Und was für Zweifel hast du in Bezug auf was?



  • Weiss es auch nicht genau, ist mir einfach in den Sinn gekommen...


Log in to reply