![]() |
Gewisse Zeile mit bestimmtem Wort aus Memo (html) auslesen
Liebe Delphianer,
Ich stehe mal wieder vor einem Problem - Ich muss für ein Forum ein Programm schreiben, dass den HTML Quelltext einer gewissen Seite ausliest, und mir dann im Quelltext immer nur die folgenden Textstücke: <A href="profile.php?ids=verschiedenezahlen"> rauskopiert und in einer .txt speichert. Soweit sogut - momentan lese ich so den Quelltext der Seite aus und trage ihn in ein Memo ein:
Delphi-Quellcode:
Wie bringe ich es nun zum Stande, dass Delphi auf einen Knopfdruck exakt diese Zeilen mit profile.php?
procedure TForm1.Button2Click(Sender: TObject);
var vTemp : variant; begin vTemp := WebBrowser1.Document; if Webbrowser1.LocationURL <> '' then Memo1.Text := vTemp.Body.OuterHTML else ShowMessage('Seite nicht vorhanden!'); end; in ein weiteres Memo oder in eine Textdatei kopiert? In der Hoffnung, dass die Frage nicht zu banal aber dennoch lösbar ist, - M. S. |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
mit folgendem Code ist das leicht möglich:
Delphi-Quellcode:
Du rufst die Procedure ExtractWBLinks() auf und musst allerdings eine Calback-Methode angeben:
type
TOnExtractLink = procedure(const URL:string) of object; // Extract all Links from Document procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink); // Extract all Links from Browser's Document procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink); ... procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink); var doc, links, link : OleVariant; i : Integer; begin doc := Document; links := doc.links; for i:=0 to links.Length-1 do begin link := links.item(i); callback(link.HREF); end; end; procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink); begin if not Assigned(WebBrowser.Document) then Exit; ExtractDocumentLinks(WebBrowser.Document, callback); end;
Delphi-Quellcode:
...
ExtractWBLinks(WebBrowser1, AddToList); ... procedure TForm1.AddToList(const URL:string); begin // hier wäre Gelegenheit, unerwünschte oder doppelte URL auszufiltern if copy(URL, 1, 5) = 'http:' then Memo1.Lines.Add(URL) // hier alle http: URL rein else Memo2.Lines.Add(URL); // und hier den Rest (ftp:, mailto: ,...) end; |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
Hammer !
Vielen Dank für die schnelle Hilfe, versuche es gleich mal! |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
Hallo nochmal!
Ich scheine irgendwie zu blöd dafür zu sein, das Script zum Laufen zu bringen. Mir fehlt für addtolist wohl irgend eine Typendeklaration, aber ich komme nicht drauf, wie ich AddToList deklarieren soll und ob überhaupt !? So schaut mein Quelltext momentan aus:
Delphi-Quellcode:
Einzigste Fehlermeldung die ich bekomme ist: "Undefinierter Bezeichner: 'AddToList'",
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw; type TForm1 = class(TForm) WebBrowser1: TWebBrowser; Button1: TButton; Button2: TButton; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TOnExtractLink = procedure(const URL:string) of object; // Extract all Links from Document procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink); // Extract all Links from Browser's Document procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink); var Form1: TForm1; implementation {$R *.dfm} procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink); var doc, links, link : OleVariant; i : Integer; begin doc := Document; links := doc.links; for i:=0 to links.Length-1 do begin link := links.item(i); callback(link.HREF); end; end; procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink); begin if not Assigned(WebBrowser.Document) then Exit; ExtractDocumentLinks(WebBrowser.Document, callback); end; procedure TForm1.AddToList(const URL:string); begin // hier wäre Gelegenheit, unerwünschte oder doppelte URL auszufiltern if copy(URL, 1, 5) = 'http:' then Memo1.Lines.Add(URL) // hier alle http: URL rein else Memo2.Lines.Add(URL); // und hier den Rest (ftp:, mailto: ,...) end; procedure TForm1.Button1Click(Sender: TObject); begin WebBrowser1.Navigate('http://www.webseite.de'); end; procedure TForm1.Button2Click(Sender: TObject); begin ExtractWBLinks(WebBrowser1, AddToList); end; end. was ja nun auch logisch ist, da ich es ja nicht deklariert habe, oder habe ich irgend etwas anderes falsch verstanden? (Tut mir leid, bin noch am Lernen ;-). Und habe nun echt lange versucht es selbst zu lösen, aber komme einfach nicht drauf *verzweifel*) Grüße, - M. S. |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
Hallo,
versuche es mal so:
Delphi-Quellcode:
Gute Nacht
// ...
private { Private-Deklarationen } procedure AddToList(const URL:string); // ... |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
Nabend nochmal,
Der oberhammer! Alles funktioniert - und ich habe wieder mal dazugelernt :-) Super! Danke Dir für den schnellen Späteinsatz, Gute Nacht, - M.S. |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
Hallo -
Ich fürchte, ich habe doch noch eine Frage. Mit dem jetzigen Script füge ich alle Html-Links dem Memo hinzu. Kann ich irgendwie schaffen, nur Links in diesem Format ins Memo zu kopieren? ![]() Ich habe mir den Post mit dem Leerzeilen löschen angesehen, und dachte mir, ich könnte vielleicht alles "aussen um die gewollten Links" löschen (also alle anderen Links) funktioniert aber auch nicht. Mein Erster versuch war natürlich in dieser Zeile:
Delphi-Quellcode:
Einfach den Anfang der Zeile mit einem * anzugeben, funktioniert leider nicht.
if copy(URL, 1, 5) = 'http://www.webseite.de/profile.php?ids=*' then
Memo1.Lines.Add(URL) // hier alle http: URL rein (So landen alle Links in Memo 2) Wahrscheinlich ist mein Annährungsversuch nicht ganz so richtig, ich würde mich riesig über weitere Hilfe freuen! Lässt sich vielleicht einfach im jetzigen Quelltext festlegen, dass nur die gewollten Urls in das Memo kopiert werden? Grüße, - M.S. EDIT: Habe es nun mit einem StringReplace gelöst, indem ich alle mir bekannten, nicht gewollten urls lösche. Klappt soweit. Über elegantere Lösungen bin ich natürlich happy :-) |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
Moin,
du könntest die Prozedur AddList so umbauen:
Delphi-Quellcode:
Das hätte den Vorteil, dass du auf die variierenden Zahlen mit Memo1.Lines.ValueFromIndex[i] zugreifen kannst.
uses
StrUtils; // AnsiStartsText, RightStr procedure TForm1.AddToList(const URL:string); const PFX = 'http://www.webseite.de/profile.php?'; begin if AnsiStartsText(PFX, URL) then Memo1.Lines.Add(RightStr(URL, Length(URL) - Length(PFX))) else Memo2.Lines.Add(URL); end; Freundliche Grüße |
Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles
Hallo!
Super Sache! Vorallem genial, dass ich so die Ids einzeln bekomme! Der Oberwahnsinn! Hab' tausend Dank, - M. S. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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