AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Webseiten werte anhand von ID auslesen und ausgeben

Webseiten werte anhand von ID auslesen und ausgeben

Ein Thema von mamble · begonnen am 30. Jul 2012 · letzter Beitrag vom 1. Aug 2012
Antwort Antwort
mamble

Registriert seit: 1. Dez 2010
8 Beiträge
 
#1

Webseiten werte anhand von ID auslesen und ausgeben

  Alt 30. Jul 2012, 21:58
Ich habe hier eine simple Webseite.

Code:
<html>
   <head>
      <title>Daten</title>
   </head>
   <body>
   
   <p id="Person1">Hanni</p>
   
   <p id="Person2">Karl</p>
   
   <p id="Dio">4</p>
   
   </body>
</html>

Mit einer einfachen Applikation möchte ich nun die 3 Werte "Hanni", "Karl" und "4" in meine drei Delphi variablen, "PERSON1", "PERSON2" und "DIO" schreiben.

Mit TWebbrowser könnte ich es realisieren, aber visuell möchte ich das nicht haben.

Es geht darum darum die Daten mit möglichst wenig Zeilen Code in die Applikation zu holen.

Ich würd' ja gern die Indy benutzen, aber mit Idhttp.get, Copy und Pos bekomm ich das nicht hin.
Die Werte auf der Seite ändern sich ab und an und dann ist die Länge der Namen immer unterschiedlich... gibt es eine simple Möglichkeit den Inhalt anhand der ID zu erfassen?
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#2

AW: Webseiten werte anhand von ID auslesen und ausgeben

  Alt 30. Jul 2012, 22:03
Da gibt es eine Menge Möglichkeiten. Recht schnell und einfach ist ein Regulärer Ausdruck (Regular Expressions, Regex), zumindest wenn man damit schon mal gearbeitet hat. Eine weitaus schönere Methode wäre ein DOM-Parser. Das funktioniert aber nur bei korrektem HTML-Code. Mit TWebBrowser hast du auch eine art DOM-Parser (glaube ich). Soweit ich weiß kann man den auch unsichtbar machen. Du kannst aber auch, wenn du willst, mit Copy und Pos arbeiten. Das ist aber oft etwas wackelig, vor allem ewnn sich der Inhalt der Webseite verändert. Der Trick ist es, nach dem "</p>" zu suchen.

Liebe Grüße,
Vlaentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
mamble

Registriert seit: 1. Dez 2010
8 Beiträge
 
#3

AW: Webseiten werte anhand von ID auslesen und ausgeben

  Alt 30. Jul 2012, 22:20
Vielen dank für deine schnelle Antwort.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
id: string;
begin
id:= Idhttp1.Get('data.php');
id:= copy (id, pos('Person1', id)+9, Length(id));
id:= copy (id, 1, pos('</p>', id)-1);
edit1.Text := id;
end;
Hier erhalte ich wenn ich nach Person1 und Person2 im Code suche die beiden Namen, aber bei Dio leider nicht, da andere Länge.

Hast du ein Beispiel für die Regex? Ich blick da nicht ganz durch.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#4

AW: Webseiten werte anhand von ID auslesen und ausgeben

  Alt 30. Jul 2012, 23:04
Naja, dann schreibst du für Dio eben 5 statt 9 da rein. Oder gleich Length('Dio">').

Zur Regex: Ich kann dir auf Delphi-Seite leider nicht helfen. Ohne zu testen hätte ich es mal so probiert:

Code:
/<p id="(.*)">(.*)</p>/
Wichtig: Die Suche muss non-greedy sein. Sie liefert alle vorhanden <p>-Tags mit ID und Inhalt.

Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Webseiten werte anhand von ID auslesen und ausgeben

  Alt 30. Jul 2012, 23:37
Hier mal etwas konkreter...
Angehängte Dateien
Dateityp: zip RegExpr.zip (34,1 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Webseiten werte anhand von ID auslesen und ausgeben

  Alt 31. Jul 2012, 00:13
Es geht auch relativ einfach über eine TXMLDocument-Komponente. Die Funktion XMLDocument.DOMDocument.GetElementById() wird leider von MSXML nicht unterstützt, so daß man selbst nach der ID suchen muß. Der Aufwand hält sich aber in Grenzen und ist im Gegensatz zu den RegEx-Lösungen wesentlich flexibler:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  n: Integer;
  ID, Tag: IDOMNode;
  Tags: IDOMNodeList;
begin
  XMLDocument1.XML.Text:=
    '<html>'+
    ' <head>'+
    ' <title>Daten</title>'+
    ' </head>'+
    ' <body>'+
    ' <p id="Person1">Hanni</p>'+
    ' <p id="Person2">Karl</p>'+
    ' <p id="Dio">4</p>'+
    ' </body>'+
    '</html>';
  XMLDocument1.Active:=true;
  Tags:=XMLDocument1.DOMDocument.GetElementsByTagName('*');
  for n:=0 to Tags.Length-1 do
  begin
    Tag:=Tags.Item[n];
    ID:=Tag.Attributes.GetNamedItem('id');
    if Assigned(ID)
      then ShowMessage(Format('%s: %s',[ID.NodeValue,Tag.FirstChild.NodeValue]));
  end;
end;
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
mamble

Registriert seit: 1. Dez 2010
8 Beiträge
 
#7

AW: Webseiten werte anhand von ID auslesen und ausgeben

  Alt 31. Jul 2012, 17:10
Danke für alle Antworten.

@omata: Das Beispiel war perfekt. Ich habe Match[2] je Durchgang in eine Stringlist geschrieben und diese dann nachher den einzelnen Variablen zugewiesen.

Übrigens könnte ich das Format auch anders machen so wie <Person1>Hanni</Person1> oder Person1:Hanni , die einzige Vorraussetzung ist das die Datei eine PHP Datei ist, da die Daten durch GET vorher eingegrenzt werden und dann aus der DB geholt werden.
Am Besten wäre ein Format und eine Methode die möglichst wenig Traffic verursacht.




Das letzte Problem das ich habe ist eine Alternative für die Indy's unter FIREMONKEY - iOS zu finden, die funktionieren anscheinend nur unter Mac/PC.

Jetzt kann ich die Webseite garnicht erst durch idHttp1.get anfordern. Gibt es da für FIREMONKEY - iOS eine einfach Alternative?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Webseiten werte anhand von ID auslesen und ausgeben

  Alt 1. Aug 2012, 08:43
Du kannst aber auch, wenn du willst, mit Copy und Pos arbeiten. Das ist aber oft etwas wackelig...
Das nennt man dann murksen.
Das ist ungefähr so als wenn man bei einem Auto das Getriebe nur mit einer Wasserpumpenzange bewaffnet wechseln möchte.
Auch die Verwendung von RegEx zum Parsen von HTML ist Gemurkse:
http://www.codinghorror.com/blog/200...hulhu-way.html
Es ist nicht verboten zu murksen, aber man sollte halt wissen, dass der Code prinzipiell unstabil ist.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf