![]() |
Position von Text/Links in einer HTML Datei finden
Moin zusammen,
ich such mich jetzt schon 2 Wochen bucklig nach einer Möglichkeit den Text einer HTML Datei (Plaintext) nicht nur raus zu filtern, sondern auch die Position der einzelnen Texte (Position des ersten Buchstabens im String). Grund ist der, das ich für eine Webabfrage eine HTML Datei analysieren will/muss. Dazu muss ich wissen an welcher Position ein Text/Link in der HTML Datei ist. Ich krepel mir schon ein ab eine eigene while Schleife zu basteln, doch es gibt einfach zu viele Ausnahmen. Habt ihr vielleicht für mich einen kleinen Tipp wonach ich noch so suchen kann/einlesen sollte? Habt Dank vorab :-D Hiele |
Re: Position von Text/Links in einer HTML Datei finden
Hallo,
irgendwie habe ich das Gefühl, dass dieser Thread für dich interessant sein könnte: ![]() Grüße vom marabu |
Re: Position von Text/Links in einer HTML Datei finden
Hi marabu,
danke für deine erste Hilfe - wie schon öffters :oops: :-D Diese Funktion nutze ich auch schon um die Links zu ermitteln. Aber sie hilft mir nicht den Text mit Posion zu finden. Vielleicht habe ich auch zu wenig Grundlagen vermittelt. Also: 1. Es gibt einen LinuxServer von Gira für Hausautomatisierung 2. Dieser kann Webabfragen durchführen um z.B. Wetterdaten aus dem Internet für die Visualisierung bereit zu halten. 3. Um so eine Webabfrage für den Server zu erstellen, muss der User kompliziert den Quelltext einer HTML Datei durchfosten um die Stelle zu finden die der Server ein eine Variable schreiben soll. 4. Grundlegend funktioniert es folgendermaßen: a. Öffne Website b. Lese soviele beliebige Anzahl an Daten (Zeichen) bis du folgende Zeichenkette findest (z.B. 'href="') c. Dann speichere folgende Zeichen in Variable X d. ... bis du folgende Zeichen findest (z.B. '">') 5. Um jetzt, wie im unternen Beispiel an Quelltext den zweiten Link zu finden (default.html) muss der User bei der Abfrage darauf achten, dass er wie in b. beschrieben eine "Finde Vorgabe", machte die bis zum Zweiten Link eindeutig ist. Hier: 'target="Hauptframe2" href="' 6. Ich möchte es dem User leicht machen und eine Webabfrage ohne Quelltext Durchsuchung zu erstellen. Dafür soll eine Liste erstellt werden mit den Plaintexten und Links und Bilder, die dann per Drag&Drop ausgesucht werden. Das Programm erstellt dann die Abfrage automatisch für den Server. Damit dann die Abfrage erstellt werden kann, muss das Programm den Quelltest nach dem gewünschten durchsuchen den Vor und Nachtext finden und sicherstellen, das der Vortext eindeutig und "unique" ist. Nur Beispiel:
Delphi-Quellcode:
Hoffe ist jetzt etwas klarer.
<BODY ID="index">
<CENTER> <TABLE style="height:54px;" cellspacing="0" cellpadding="0" border="0"> <TR><TD valign="middle"> <TABLE style="width:720px;" cellspacing="0" cellpadding="0" border="0"> <TR> <TD style="width:31px;"> <a target="Hauptframe1" href="default1.html" onmouseover="document.up.src=up1.src" onmouseout="document.up.src=up0.src" target="_parent"> [img]res/up.gif[/img]</a></TD> <TD style="width:20px;" align="center"> [img]res/hdr_left.gif[/img]</TD> <TD align="center" valign="middle" style="background:url('res/hdr_mid.gif');" class="title" nowrap="nowrap"> [url="default2.html"]hiele.de[/url] </TD> <TD style="width:20px;"> Für eine Lösung biete ich eine Flasche guten Wein. (Zeigt meine Verzweifelung :? ) Gruß Hiele |
Re: Position von Text/Links in einer HTML Datei finden
Hallo Hiele,
ich fürchte ich verstehe noch nicht ganz. Du möchtest eine Programmfunktion anbieten, mit der ein Benutzer eine beliebige selbstgeschriebene HTML-Seite einlesen kann, dann eine Liste der Links abgeboten bekommt und dort einen Link auswählen kann, der durch eine Abfrage bei einem Wetterdienst ersetzt wird? Freundliche Grüße |
Re: Position von Text/Links in einer HTML Datei finden
Hi marabu,
... fast. Normalerweise muss der Benutzer für eine Webabfrage (egal welche Seite er abfragen möchte) z.B. wetter.com, den Quelltext per Hand durchforsten um die Abfrage wie oben beschrieben Punkt 4 a-d zu erstellen. Also wenn er z.B. die aktuelle Temperatur in eine Variable packen will, um sie auf der Visu anzuzeigen, erstellt er eine Abfrage nach dem Schema: Durchsuch den Quelltext von ![]() dann speichere die Daten die folgen in der Variable bis zur Stelle </span> Sprich das Programm muss den Quelltext von Anfang an durchsuchen, bis die gewünschte Information (hier die Tagestemp.) gefunden wurde (Der Benutzer sagt ja meinem Programm, was er ermittel will, da das Programm vorher die Website analysiert und dem Benutzer alle sinnvollen Information (Texte Bilder Links etc.) zusammenstellt) Um diesen Wert/Text nun für den Server im Quelltext auffindbar zu machen, muss in der Abfrage der Teil vor und nach der gewünschten Information in der Abfrage gespeichert sein. Mein Programm bekommt also die Info: Ich will den Tempwert. Daraufhin sucht sich mein Programm den Teil vor und nach aus dem Quelltext und stellt sicher das der Quelltext vor der gewünschten Info (Tempwert) nicht im oberen Teil des Quelltext nochmal vorkommt. Sonst würde ja die Abfrage dort schon beginnen Daten in die Variable zu speichern. Es ist also wichtig für mich, nicht nur den Plaintext einer HTML Datei heraus zufiltern (ist ja eher einfach), sondern auch wo diese Texte sich im Quelltext befinden. Klarer :?: Gruß Hiele |
Re: Position von Text/Links in einer HTML Datei finden
Hallo Hiele,
ich merke schon, dass du dich bemühst alles gut zu beschreiben, aber vielleicht bin ja ich heute nicht so gut drauf. Kann es sein, dass du einfach die aktuelle Temperatur von irgendeinem Wetterdienst auslesen möchtest?
Delphi-Quellcode:
Sorry, wenn ich heute etwas begriffsstutzig bin.
const
W_URL = 'http://www.accuweather.com/world-index-forecast.asp' + '?partner=accuweather&traveler=0&loccode=EUR|DE|GM007|LIMBURG'; W_ID = 'quicklook_current_temps'; function CurrentTemperature(const urlWeather, tempId: string): string; var doc: OleVariant; begin doc := CoHtmlDocument.Create; doc.open; doc.Write(http.Get(urlWeather)); doc.Close; Result := doc.all.item(tempId).innerText; end; Freundliche Grüße |
Re: Position von Text/Links in einer HTML Datei finden
Hallo Hiele,
ich vermute Du möchtest den HTML-Quelltext parsen. Hierzu gibt es eine Komponente die rasend schnell, jedoch nicht ganz trivial zu verstehen ist. Vielleicht hilft Dir diese weiter: ![]() Ich verwende diesen für alle Arten von HTML und XML Parsing (und HTML Redesign). Grüße Michael |
Re: Position von Text/Links in einer HTML Datei finden
Kein Problem - Immerhin nimmst du dir Zeit - Also dafür Danke vorab.
Es geht nicht im speziellen um Temperaturwerte. Sondern vielmehr darum bestimmte Teile aus dem Quelltext ein eine Variable zu bringen. Wenn der Nutzer z.B. die Akt. Lottozahlen will, dann wird dem Giraserver eben die gewünschte Website mitgeteilt, der sich dann den Quelltext der HTML Datei lädt und diesen nach dem Abfrageschema ausliest. Um so ein Abfrage-Schema zu erstellen, wird dem Server zuvor gesagt, welche Website und wie er die gewünschte information findet. Lade den Quelltext von ![]() Lese von Anfang des Datei bis du folgende Stelle findest (Also der Teil vor der gewünschten Info) Dann pack den gefundenen Text in die Variable X , bis zu der Stelle die im Quelltext nach der gewünschten Info kommt. Der eigentliche Parser ist im Giraserver. Um den für diese Abfrage zu konfigurenen muss ein Script erstellt werden. Und dieses erstellen des Scriptes ist sehr aufwendig. Meine Prog sollt einfach diese Scripterstellung vereinfachen. Nach dem Prinzip WYSIWYG. @Michael: Ich habe mich zwar schon mit div. Parsern beschäftigt, doch keiner hilft mir weiter bzgl. der Position, da ich einen Teil Quelltext vor und nach der gewünschten Info brauche Werde mir aber den auch nochmal zugemühte führen - Gedankt für den Tip Hiele |
Re: Position von Text/Links in einer HTML Datei finden
Du brauchst einen DOM (Document Object Modell) Parser.
Im DOM wird dir die gesamte Webseite als Baumstruktur aufbereitet. Absolute Positionen in HTML spielen dann keine Rolle mehr. Wenn du dann ein bestimmtes Element auswählen möchtest, kannst du entweder eine ralativ starre (*) Technik anwenden und einfach merken, an welchen Kreuzungen du im Baum abbiegen musst. Beispiel: /2/5/3 - von der Wurzel in das 2. Child-Element (<body>) dann in das 5. Child-Element und dann in das 3. Child-Element. *) selbst diese Technik dürfte besser als dein bisheriger Ansatz sein Du kannst auch den gesamten Restbaum (ausgehend vom <body> Element) nach einem bestimmten Text durchsuchen. Wird die Stelle gefunden, bist du irgendwo im Baum auf deinem gesuchten Element oder Attribut. Es ist dann kein Problem, sich im Baum dann eine Ebene hoch und dann zum vorherigen oder nachfolgenden Childelement zu bewegen. Oder es ist möglich mit XPATH Ausdrücken zu arbeiten. Das wäre dann der Königsweg. Hier gibt es allerdings das Problem, dass HTML üblicherweise nicht so sauber geschachtet ist wie das bei XML der Fall ist. Wenn die Seite aber in XHTML geschrieben ist, dann ist es relativ einfach, beliebige Daten sauber zu extrahieren. Ebenso kann dann die Seite leicht über die Baumstruktur verändert werden. PS: du solltest dir den Internet Explorer Developer Toolbar installieren. ![]() Er zeigt dir (unter anderem) die Baumstruktur und lässt selektierte Element blinken |
Re: Position von Text/Links in einer HTML Datei finden
@shmia: Mit DOM hatte ich auch am Anfang gespielt, jedoch der Parser der im GiraServer (Hausautom.)
läuft setzt für eine Webabfrage ein Script vorraus, welches dem integrierten Parser sagt, wo er welche Infos im Quelltext findet. Wie oben geschrieben, will ich ein Tool bauen, welches solche Scripte erstellt. Die meisten Benutzer kommen kaum zurecht, sich durch den Quelltext einer HTML Datei zu wuseln. So ein Script kann kann schnell meherere Hundert Anweisungen enthalten, die normalerweise per Hand ermittelt werde. Hier entstehen auch die meisten Fehler. Da man eine bestimmte Stelle im Quelltext haben möchte und dem Parser (Giraserver) sagt. Such die Stelle A(ein kurzer Auszug aus dem Quelltext) und dann speichere die folgenden Zeichen (z.B. Lottozahlen o.ä.) bis zur Stellte B (wieder ein kurzer Auszug aus dem Quelltext). Wenn jetzt aber die A mehrfach im Quelltext vorkommt, wird der Parser die erste Stelle nehmen an der er diesen Auszug A findet. Wenn nun dann nicht auch sicher B folgt führt dies schon zu Fehlern. Das Tool soll den Quelltext nach verwertbaren Infos durchsuchen (Texte/Bilder/Links) diese dann auflisten. Der Benutzer kann nun wählen was er will. Danach erstellt das Tool den Script um sicher zustellen, das es konform ist. Sucht also zur gewünschten Info die passenen Qulltextauschnitte Vor und Nach der Info. (Also A/B) und dies so, dass der Quelltext A (vor Info) sicher so gewählt ist, das der Parser der den Quelltext Zeichen für Zeichen durchgeht findet. Gruß Hiele |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz