Entwickler-Ecke
Internet / Netzwerk - Text aus homepage auslesen
noobie123 - So 26.10.08 14:26
Titel: Text aus homepage auslesen
hallo,
ich sitze schon 3 std. hier und finde nichts passendes, nicht nur in diesem forum, argh.
Ich möchte gerne etwas aus einer php seite auslesen lassen.
in der php seite steht dies:
Quelltext
1:
| <a style="text-decoration: none;" href="/grad/"><span id="grad_celsius">12</span> celsius</a> |
auf meiner Form habe ich ein Edit feld, in der jetzt nach einem button klick diese 12 grad stehen soll.
dies geht leider nicht:
Delphi-Quelltext
1:
| edit1.text:=wb.OleObject.document.forms.item(0).elements.item('grad_celsius').value; |
in der forensuche bin auch auf "Pos" und so weiter gekommen. ich möchte aber nicht die position ermitteln oder sonstiges sondern einen bestimmt deklarierten text in einer homepage einfach nur bei mir im edit kopieren.
Hidden - So 26.10.08 14:31
Hi,
Du willst einen Teiltext aus einem String extrahieren. Das geht mit den Methoden
COPY POS POSEX.
mfG,
whitef - So 26.10.08 15:41
ich habs mal überflogen... weiss ja net ob das das passende ist...
das hatte ich ja auch shcon vorher mit meiner suche gefunden aber dachte nicht dass das was hilft....
Hidden - So 26.10.08 15:50
Hi,
Könntest du demnächst ein paar Zeilen mehr schreiben, wenn etwas unklar ist? Ich muss jetzt nämlich um so mehr im Nebel fischen ;)
Copy('Ich bin ein Text', 2, 9) liefert
'ch bin e' - liefert also einen Ausschnitt
Delphi-Quelltext
1: 2:
| S := 'Das ; startet den Text'; Copy(S, Pos(';', S), Length(S)); |
liefert ' startet den Text'.
Delphi-Quelltext
1: 2:
| S := 'Das zweite ; startet den Text; hallo, welt'; Copy(S, PosEx(';', S, Pos(';', S) + 1), Length(S)); |
liefert: ' hallo, welt'.
Diese Methoden sind für die allermeißten Textoperationen ausreichend ;) für 5x PosEx macht man natürlich dann irgendwann eine Schleife ;)
mfG,
whitef - So 26.10.08 16:51
also.... soweit ich weiss, braucht man diesen ansatz um objekte im eigenen browser auszuwählen etc.: "wb.OleObject"
dann müsste man doch nur noch dem obigen oleobject mitteilen was man kopiert haben möchte: <span id="grad_celsius">
das beides zusammen... mh sowas bräuchten wir...
Hidden - So 26.10.08 20:21
Dann mach das doch :gruebel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| "<span id="grad_celsius">12</span>"
var StrStart: Integer; const StartText = '<span id="grad_celsius">'; FinText = '</span>'; StrStart := Pos(StartText, S) + Length(StartText); MyTemperature := StrToInt(Copy(S, StrStart, Length(S) - PosEx(FinText, S, StrStart) - 1)); |
mfG,
SiegfriedXX - Mo 27.10.08 16:27
Ich möcht nur noch mal klarstellen was die Frage war:
whitef möchte aus einer Internetseite (hier ist es eine .php adresse) den quellcode auslesen.
Innerhalb des Quellcodes benötigt er nun einen Wert und nur dieser ist auch von interesse.
In einem Delphi Programm soll nun also von klicken eines Buttons dieser bestimmte Wert in z.B. ein Editfeld kopiert werden.
was wir wissen ist das die bestimmte quellcodezeile den Zeichenwert: '<a style="text-decoration: none;" href="/grad/"><span id="grad_celsius">
12</span> celsius</a>' enthält. Die Zahl 12 soll nun aus dem gestamten Quellcode gefiltert werden.
1. Wie läd man also einen Quellcode ein (bzw. nur einen Teil mit oleobjekt (kenne die funktion nu nicht so))
2. Wie filtert man aus dem Quellcode der in einem String steckt (oder arraystring) den Wert der gesucht ist
das sind die hier gestellten Fragen.
whitef hat schon einen Vorschlag mit oleobjekten gebracht..
Meine Lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| unit Unit1;
interface
uses IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP; type IdHTTP1: TIdHTTP;
implementation
procedure TForm1.Button1Click(Sender: TObject); var httpcode:string; begin httpcode:=IdHTTP1.Get('http://www.google.de'); memo1.Text:=httpcode; end;
|
Das wäre zum Punkt 1 den Quelltext einlesen (Hier wurde einfach ein Memo gewählt in das der quelltext auch dargestellt werden kann). Bitte nicht vergessen den Indy-Clients Componente -> IdHTTP (idHTTP) hinzuzufügen. Im Reiter bei Delphi 7.0 Standart oben unter
Indy-Clients zu finden.
Das Filtern müsste nu leichter fallen.. da fragt man einfach den string ab und filtert sich das nu raus.. Beispiele wurden hier ja schon gebracht geht auch auf verschiedenste art..
Hoffe konnte Helfen
noobie123 - Di 28.10.08 20:52
ok habs endlich mal gepackt... hehe
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| sAngriff := Pos('id=counter1 typ="countdown"', Quelltext) + IntAngriffPlus; eAngriff := PosEx('</SPAN></TD></TR>', Quelltext, sAngriff); If (sAngriff > 0) And (eAngriff > 0) Then Begin AngriffA.Caption := Copy(Quelltext, sAngriff, eAngriff - sAngriff); End; |
bloss etwas irrietiert mich bei dem ganzen!
Testweise schick das programm immer n kumpel... und bei dem erscheinen da immer voll der kaudawelch quelltext..., aber ist denk ich mal nur ne defintionssache von Pos & PosEx
Hidden - Di 28.10.08 21:04
Hi,
Ganz schön kriegerischer Quelltext *g* ;)
Pos und PosEx sollten auch auf seinem Rechner laufen :) Was für ein Kaudawelsch bekommt er denn? Einen anderen Teil der Seitenquelltextes, oder.. ?
mfG,
whitef - Di 28.10.08 23:08
lol... jo, zeig mal :D
noobie123 - Di 28.10.08 23:11
ja genau, etwas aus dem quelltext...
bei kommt zb das hier:
Angriff: 12
und bei ihm:
Angriff: META CONTENT<http> usw. halt
kleiner screenshot anbei :D
SiegfriedXX - Mi 29.10.08 18:01
also nicht überall funtkioniert posex
.. daher hier eine variante wie es auch anders funktioniert :D
Fortsetzung des ersten Teils (mit der Variable httpcode als Quellcode Angabe)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.SpeedButton1Click(Sender: TObject); var filter1,filter2 :string; position1,position2 :integer; begin
filter1:=edit1.Text; filter2:=edit2.Text; position1 := Length(filter1); position1 := Pos(filter1, httpcode) + Length(filter1); repeat position2 := Pos(filter2, httpcode); until position2 >= position1;
if position1 <> Length(filter1) then edit4.Text:= copy(httpcode,position1,position2-position1) else edit4.text:='Kein Treffer!'; end; |
Hidden - Mi 29.10.08 20:10
Hi,
Wenn du einen lang genuge Startmarkierung hast, nimm doch einfach Pos ;)
und dann halt statt
Quelltext
1: 2:
| Pos('<span id="grad_celsius">', S) Pos('<a style="text-decoration: none;" href="/grad/"><span id="grad_celsius">', S) |
Eigentlich sollte das obere aber doch ausreichend sein :gruebel: Meine Glaskugel sagt mir, dass ihr euch gesagt habt 'wir nehmen PosEx ab 200 oder so, dann ist das weniger Rechenaufwand'.
Wahrscheinlich kommt das nämlich nichtmehr vor. Dann gibt PosEx 0 zurück und ihr bekommt den Text von Anfang an.
mfG,
SiegfriedXX - Mi 29.10.08 21:51
das problem ist das posex einfach nicht akzeptiert wird bei allen versionen.. jedenfalls funktioniert es in meiner nicht ganz.. aber wo das problem? so wie oben funktionierts außerdem weiß man ja was man filtert..
edit:
es gibt übrigens mehrere möglichkeiten eine filterung durchzuführen.. das mit pos ist nur eine möglichkeit.. dahinter steckt auch mehr ist nur eine stupide funktion
oldschool ist hier immer das beste damit man genau weiß was man macht.. also das array/string mit schleifendurchläufe auf char basierende abfragen.. so wie es pos auch macht..
Hidden - Do 30.10.08 18:18
Aso, es geht um die Delphi-Version :D Ja, PosEx war nicht von Anfang an dabei.
pflo - So 16.11.08 18:50
Hi,
hab n ähnliches problem un hab das jetzt ma so probiert.
das geht auch mit fast allen seiten aba bei youtube streickt IdHTTP.
da kommt die fehlameldung "HTTP/1.1 403 Forbidden."
kann mir jemand helfen??
gruß pflo
toms - So 16.11.08 19:12
Vielleicht liegt's am UserAgent. Probiere mal:
IdHttp1.Request.UserAgent:='Mozilla/4.0'; (oder ähnliches)
pflo - So 16.11.08 19:15
thx jetzt klapts
DesperadoStrike - So 23.11.08 14:55
hallo, kannst du mir nichtmal deinen kompletten quellcode schicken? habe aktuell ein ähnliches problem und weiß nicht so recht weiter. quellcode auslesen usw funktioniert super aber die einzelnen werte rauszufiltern aus den <tr> bekomm ich einfach nicht auf die reihe. posex wird bei mir auch nicht so wirklich erkannt. wär sehr lieb wenn ich mir deinen source mal zu schulungszwecken ansehen dürfte.
mfg patrick
pflo - So 23.11.08 16:49
Hi DesperadoStrike
Bei mir geht das mit dem Posex auch nich, darum hab ich den quelltext in nen 2. string geschrieben, den ich dann imma abschneide.
Der Funktion gibst du den suchbegriff und den gesammt text. Die ausgabe der funktion is dann das ab dem suchbegriff bis zum ". der gesammttext wird abgeschnitten. ich hoffe ich hab mich nich zu verquer ausgedrückt, und ich denke die funktion is selbsterklärend genug.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function abschneiden(SubStr:string; var S:string):string; begin if pos(SubStr, S)=0 then begin abschneiden:=''; exit; end; S:=copy(S, pos(SubStr, S)+length(SubStr), length(S)); abschneiden:= copy(S, 0, pos('"', S)-1); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!