Website parsen mit HTML Tidy

Roin

Freier Denker
Registriert
22 Juli 2013
Beiträge
581
Hallo Leute,

ich möchte für ein kleines Programm von mir eine Website (HTML) laden und anschließend einige Elemente von dieser Seite extrahieren. Dieses Problem klingt für mich so, als wenn es schon tausend Mal gelöst wurde. Doch ich google mal wieder nicht vernünftig, wie es mir scheint.

Ich habe gefunden, dass HTML Tidy da eine ganz nützliche Lib zu ist.
Aktuell schwanke ich noch zwischen einer C++ und einer Java Implementierung, hängt auch ein bisschen davon ab, ob ich später eine Grafische Oberfläche dazu bauen möchte, aber das ist ein anderes Thema.
In C++ braucht man hierfür libtidy und in Java JTidy, welche effektiv das gleiche machen.

Ich suche eigentlich nur ein KURZES Tutorial, wie ich nun da einen String (HTML Seite) reinwerfe und dann sowas wie ein Assoziatives Array oder ähnliches rausbekomme. Also den erzeugten DOM-Baum, wenn man es so nennen kann. Dann könnte ich mir deutlich sinniger die passenden Elemente raussuchen als wenn ich eigenständig irgendwelche Suchen und Ersetzen-Konstrukte baue.

Hat da jemand ein Snippet zur Hand oder eine passende Quelle? Das Problem ist doch bestimmt auch schonmal jemand von euch angegangen?

Grüße!


P.S.: Alternativ würde ich auch Python oder Php nutzen. Aktuell stehe ich nur stark auf dem Schlauch, wie ich aus einer nicht unbedingt gut formatierten HTML-Datei meine entsprechenden Tags rauslesen kann.
 
Zuletzt bearbeitet:
Ich kenne Java und c++ zu wenig um auf die Sprachen selber eingehen zu können. Tidy's kenne ich im Web als "bereiniger" oder "Fehlersucher", deshalb denke ich du suchst einfach das falsche.
Du brauchst einen HTML Parser, spontan habe ich für Java jsoup.org gefunden und für gut befunden das ermöglicht ein parsen über selectors.
[src=javascript]
div.foo div.bar > a.baz
[/src]
 
  • Thread Starter Thread Starter
  • #3

Ungefähr sowas suche ich. Das klingt doch schon mal ganz gut. Schaue ich mir morgen dann mal genauer an!
 
Für Python (und auch PHP?) gibt es bzw. .

Was ich dir aber aktuell dennoch empfehlen würde: - das Projekt ist momentan in einem Freeze / "Suspendend until further notice" - aber ist in so fern einfach zu nutzen, dass du Javascript verarbeiten kannst, also auch so etwas wie die CSS-Selektoren (sollten) ebenfalls möglich sind.

Ansonsten, man kann auch notfalls etwas HTML selbst parsen, wenn du die bereits schon herunterlädst und snapshottest. Man kann auch mit einem "Browser" capturen, also ähnlich wie mit PhantomJS, nur ohne PhantomJS - ich nutze zum Beispiel ein JS Skript (GreaseMonkey) um einen dynamischen "Feed" zu parsen. Die Daten (HTML Dom Node Collection) die ich dabei sammele über CSS Selektoren, downloade ich per Default ohne "Nachfrage" lokal auf das System. Und ein weiteres Skript verwendet die gewonnenen Daten als JSON (JSON.stringify(Dictionary) + JSON.parse(data)".

Das könnte für dich vermutlich auch eine gute Lösung sein, Vorteil bei einem JS Skript - du kannst bereits Daten spezifisch abgreifen, die hinter/in einer Javascript Umgebung "versteckt" sind.
 
  • Thread Starter Thread Starter
  • #5
Beautiful Soup für Python ist ganz nett.
Mit Selenium (Webdriver) rufe ich die Adresse auf, warte, bis da einiges an Javascript durchgelaufen ist und kann dann den Inhalt an BeautifulSoup übergeben und dort dann meine gewünschten Daten suchen.
Das klappt relativ gut. Natürlich muss ich noch etwas stöbern, wo ich was immer finde aber der Tipp war ganz gut!
 
Zurück
Oben