websites auswerten und mit ihnen interagieren

Status
Für weitere Antworten geschlossen.

obi--wan

Well-known member
Ich will mit C++ in mehreren meiner Projekte Daten von einer website hohlen, bzw. mit ihr (PHP, bzw. JavaScript) interagieren. Das HTML-File downloaden mit libcurl kann ich schon, aber mein Problem ist wie ich nun effizient einzelne Elemente extrahiere. Hab mal durch Zufall etwas zu dem Thema in JavaScript gefunden dort kann man mit verschiedenen Funktionen einzelne Tags extrahieren. Gibt es vieleicht eine Bibliothek die ähnliches kann für C++? Und wie sieht das mit der Interaktion aus, also irgendwelche Buttons auf dynamischen Webseiten klicken, zb. hier im Board einen Post posten?

Wenn jemand ausführliche Tutorials oder Unterlagen hat wäre ich dafür dankbar. Oder wenn jemand weiß mit welchen Begriffen ich bei Google was zu dem Thema finde (hab schon ewig gesucht aber nix gefunden).

Hoffe ihr könnt mir helfen!

mfg
obi--wan
 
Hi,
ich würde auf der anderen Seite ansetzen und eine API-Schnittstelle deiner Seite erstellen. Damit geht alles einfacher UND wenn du die Seite von der Optik her änderst, funktioniert das Programm dann noch ;)

Wenn mein Vorschlag nicht gut ist, würde ich die HTML-Datei mit regulären Ausdrücken parsen. Reguläre Ausdrücke in C++

Gruß
Broken Sword
 
Ich glaub das hast du jetzt falsch verstanden, ich hab selbst keine Seite und will auch keine machen. Ich will Daten von fremden Seiten hohlen und mit ihnen interagieren.

mfg
obi--wan
 
Also entweder mit Regex arbeiten - oder du nimmst das HTML-Dokument einfach als XML-Datei her und suchst dir so deine Sachen zusammen, die du brauchst.
 
Hat noch wer ein (deutsches) Tutorial über Regular Expresions für mich? Aber nicht in .net weil ich würd gern Platformunabhängig bleiben. Hab ein wenig gesucht und herausgefunden das in den Boost Librarys eine Library für Regex drinen ist. Aber ich hab noch nie mit Regex gearbeitet, und versteh das nicht so ganz.

mfg
obi--wan
 
Es ist egal in welcher Sprache du dir das anschaust. Wichtig sind an sich überhaupt erst die Regex-Ausdrücke. Und die sind in JEDER Sprache gleich.
Hier mal ne Übersicht - ist zwar nur relativ oberflächlich angekratzt, aber die Grundlegenden Sachen sind erklärt:
http://de.wikipedia.org/wiki/Regulärer_Ausdruck
 
Es kommt mir fast so vor als wäre das einer der Wikipedia Artikel bei denen der Autor wollte das ihn keiner versteht.

Ich hab noch ein wenig mehr gesucht und unteranderem mehrere Librarys zum parsen und auswerten von html files gefunden:
HtmlDocument
HTML Agility Pack

Aber leider baut das eine auf .net auf und das andere ist eine ms Bibliothek. Deshalb bleibt mir wohl nichts anderes als Regular Expressions über, auserdem hab ich damit deutlich mehr Möglichkeiten.

Ich suche jetzt eine Bibliothek für Regular Expressions in C++ und ein deutsches Tutorial dazu, denn das Thema ist so komplex das ich alle englischen bis jetzt nicht verstanden habe.

Hoffe sowas läst sich finden!

mfg
obi--wan
 
Wieso bleibt dir nichts weiter als RegEx übrig? Ich hab doch geschrieben: Behandele das HTML-Dokument einfach als XML! Dann kannst du die Elemente alle schön und fein säuberlich mit jedem üblichen XMLParser durchlaufen und ihren Inhalt/Attribute überprüfen und auswerten.
Da brauchst du keine grausigen String-Operationen a la RegEx.
 
Wieso bleibt dir nichts weiter als RegEx übrig? Ich hab doch geschrieben: Behandele das HTML-Dokument einfach als XML!

Das ist aber auch nur praktikabel solange die Webseiten xml konform geschrieben wurden. Die Browser sind oft sehr tollerant und die Entwickler der Seiten achten längst nicht alle drauf ob die Seiten komplett valide ist.

Aber ich würde auch eher zu der xml variante tendieren. Nen eigenen ordentlichen parser zu schreiben ist definitiv komplizierter
 
Seit wann werden Webseiten XML konform geschrieben? ;)

Grundsätzlich gilt: Jedes öffnende Tag hat auch ein schließendes Tag. Hat es das nicht, kommt natürlich der XML-Parser durcheinander. Das gleiche Problem hast du aber auch dann, wenn du mit RegEx arbeitest - prüfst du nämlich auf Vorkommen eines Elementes, so hast du ein Problem, wenn dazu z.B. das schließende Tag nicht da ist - denn wie willst du sonst den Inhalt des (X)HTML-Elementes erkennen, wenn du garnicht weißt wo das Tag endet? ;)

Die Variante mit dem XMLParser hat auch den Vorteil, dass du Inhalt und die jeweiligen Attribute SEHR leicht und schnell auslesen kannst. Ehe du das mit RegEx gelöst hast... :)
 
Seit wann werden Webseiten XML konform geschrieben? ;)

Alle webseiten die xhtml valide sind sind xml konform...

Grundsätzlich gilt: Jedes öffnende Tag hat auch ein schließendes Tag. Hat es das nicht, kommt natürlich der XML-Parser durcheinander. Das gleiche Problem hast du aber auch dann, wenn du mit RegEx arbeitest - prüfst du nämlich auf Vorkommen eines Elementes, so hast du ein Problem, wenn dazu z.B. das schließende Tag nicht da ist - denn wie willst du sonst den Inhalt des (X)HTML-Elementes erkennen, wenn du garnicht weißt wo das Tag endet? ;)
Dann ist doch die Frage wie der gewählte xml parser auf einen Fehler reagiert. Im schlimmsten fall bricht er das weitere parsen ab. Wenn er das tut ist der nutzen eines fertigen XML Parsers gleich null... Ist das der fall ist (imho) eine eigene Implementierung sinnvoller.
 
Das hab ich auch nie behauptet... Wir reden hier von Webseiten. Wenn die Webseite in XHTML oder in einem xml validem HTML stil geschrieben wurde kann ohne probleme mit einer existierenden xml-lib gearbeitet werden. Sonst nicht. Ich habe nie HTML und XHTML gleich gesetzt
 
Ich wollte damit sagen: Es gibt genügend Webseiten, die NICHT XHTML konform geschrieben sind - sondern "nur" HTML konform.
 
Ich schätze mal das weit über 50% der Webseiten nicht in xhtml, oder xml kompatibles html geschrieben sind. Und warscheinlich sind nicht viel weniger nicht einmal html konform, und werden nur durch die extrem tolleranten Browser dargestellt. Das "HTML Agility Pack" ist zum Beispiel, wenn ich das richtig verstanden habe ein umgebauter XML-Parser der jetzt mit HTML umgehen kann und auch deutlich toleranter ist. Das komt aber trotzdem nicht in Frage weil es auf .net aufbaut, und .net möchte ich auf keinen Fall einsetzten.

Ein parser ist sicherlich die schnellere und einfachere Variante. Weswegen ich sie auch lieber nutztn würde, wenn ich denn einen für html geeignten finden würde. Aber da ich jetzt Interesse an den Regular Expressions gefunden habe, und mir noch ein paar andere anwendungsgebiete vorstellen könnte würde ich die gerne lernen.

mfg
obi--wan
 
Quatsch kaufen, RegEx ist nicht so komplex.
Man sucht damit halt in einem Text nach bestimmten Regeln sag ich mal.
Kleines Beispiel: "^" bedeutet Zeilenanfang, "$" Zeilenende, "." ein beliebiges Zeichen.

Wenn ich also z.B. folgende Datei habe:
Code:
a
b
ccgggg
dd
e

Und ich suche nach dieser regular Expression: "/^.$/" (die Slashes werden in vielen Sprachen verwendet, hat aber RegEx technisch keine Bedeutung)
Dann sucht er nach etwas, was mit einem beliebigen Zeichen anfaengt und sofort wieder aufhoert. Also kurz gesagt alle Zeilen, die nur ein Zeichen enthalten.
Das trifft hier zu auf: "a", "b", "e"

Such dir irgendwelche Tutorials, muss nicht C++ sein, wie schon gesagt, sind RegEx in allen Sprachen (fast) identisch.
Wie man nun die Methoden in der Boost Library aufruft, sollte mit der englischen Erklaerung auch gehen, wenn du das Prinzip von RegEx verstanden hast.

PS: Weiteres Beispiel:
"+" bedeutet, dass das zuvor angegebene Zeichen beliebig oft hintereinander steht, jedoch mindestens ein Mal.
So wird bei "/g+/" die Zeile "ccgggg" gefunden. Und so weiter.
Wenn du Fragen hast, frag, aber Geld wuerd ich auf keinen Fall dafuer ausgeben.
 
Quatsch kaufen, RegEx ist nicht so komplex.
sicher ... ?

die Slashes werden in vielen Sprachen verwendet, hat aber RegEx technisch keine Bedeutung
Natürlich haben sie eine Bedeutung - das sind sogenannte "Begrenzer", welche Beginn und Ende eines regulären Ausdrucks festlegen.

Wenn du Fragen hast, frag, aber Geld wuerd ich auf keinen Fall dafuer ausgeben.
Wenn du dafür kein Geld ausgeben würdest, bist du wohl ein Hobby-Scripter ;)
Bücher > OnlineTutorials ... :)

In einem Buch wird nämlich auch die Verwendung von Begrenzern erklärt ;)
Um mal bei dieser Kleinigkeit zu bleiben.

Vielleicht drückst du dich auch einfach nur ungenau aus - aber so wirklich mit Fachwissen glänzen konntest du gerade nicht. Eventuell doch mal ein Buch kaufen? :rot:
 
Bücher > OnlineTutorials

Das halte ich so pauschal auch für falsch. Bücher sind sicher, wenn es nur um den theoretischen Hintergrund zu irgendeinem Thema geht das Medium der Wahl, aber gerade wenn es um praktischere Sachen geht (wie eben der Umgang mit RegEx) finde ich ein gutes Onlinetutorial (idealerweise auf einem zweiten Monitor, auf dem ersten die Programmierumgebung ;)) wesentlich komfortabler. Mag aber auch immer eine individuelle Entscheidung sein, was man da bevorzugt.
 
Bücher sind sicher, wenn es nur um den theoretischen Hintergrund zu irgendeinem Thema geht das Medium der Wahl, aber gerade wenn es um praktischere Sachen geht (wie eben der Umgang mit RegEx) finde ich ein gutes Onlinetutorial (idealerweise auf einem zweiten Monitor, auf dem ersten die Programmierumgebung ;)) wesentlich komfortabler.
Naja... sagen wir es mal so:
Chomsky-Hierarchie ? Wikipedia
Regulärer Ausdruck ? Wikipedia
Das gehört ja alles zu einem großen Gebiet ... Reguläre Ausdrücke ("RegEx") sind jetzt nicht nur die wilde Verkettung irgendwelcher Zeichen, die nach einem Suchausdruck suchen sollen.
Aber da du "Hintergrund" schreibst, könnte man es glatt gelten lassen ;)

Ich will hier jetzt nur nicht die Idee keimen lassen, reguläre Ausdrücke wären sowas wie das vom Threadersteller genannte "/^.$/" - da steckt ein bisschen mehr dahinter, als der gemeine PHP-Scripter meint ;)
 
Status
Für weitere Antworten geschlossen.

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten