Entwickler-Ecke

Internet / Netzwerk - Website auswerten....(wichtig, bitte nochmal lesen)


Anonymous - Di 24.06.03 11:19
Titel: Website auswerten....(wichtig, bitte nochmal lesen)
Hallo, vielleicht kann mir jemand helfen...


Ich würde gerne eine Website auswerten....Ich lade z.B. eine Seite und möchte alle Links in ein StringGrid packen....Kann mir jemand helfen?


Tino - Di 24.06.03 12:15

Hallo!

Was genau ist Dein Problem? Weißt du nicht wie man eine Datei aus dem Internet downloadet oder wie man eine HTML Datei parst oder wie man Text in ein StringGrid hinzufügt?

Gruß
Tino


Anonymous - Di 24.06.03 12:20

îch weiß nicht wie ich links aus einer kompletten html datei rausfiltert!


foxy - Di 24.06.03 12:24

tino ich denke er meint das er alle vorhandenen Links die auf der page enthalten sind, in ein Grid reinpackt und dann die vergleicht , und irgendwas mit den links, die er relevant findet , etwas amchen kann .

wow was für ein satz :rofl:


Anonymous - Di 24.06.03 12:33

ja genau


Delete - Di 24.06.03 13:28

Dann nimm dir einen HTML-Parser! Der einfachste Weg wäre über die TWebBrowser-Komponente von Delphi. Mit der hast du Zugriff auf alle Elemente der HTML-Seite und kannst daher auch relativ bequem alle Links "<a>" suchen und in dein StringGrid eintragen lassen.


Anonymous - Di 24.06.03 13:35

ja aber wie suche ich denn nach den Links <a>?


Anonymous - Di 24.06.03 13:59

Mehr wie das hab ich bis jetzt noch nicht gefunden....hab keinen plan wie ich das alles anstellen soll....



Quelltext
1:
2:
3:
NMHTTP1.Get(URL);
Memo1.Text := NMHTTP1.Body;
if Pos('<a', Memo1.Text) <> 0 then //naja, weiß noch nicht weiter;


Tino - Di 24.06.03 14:05

Na ja, eine HTML Seite zu parsen ist nicht besonders einfach. Ich würde dir empfehlen einen fertigen HTML Parser zu benutzen. Schau mal auf Torry [http://www.torry.net] nach.

Wenn Du es selber machen willst dann sind die Befehle Pos und Copy ganz hilfreich.

Gruß
Tino


Anonymous - Di 24.06.03 14:16

Ja ist schon nicht einfach...aber komme schon näher

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button2Click(Sender: TObject);

var
  a, b: integer;
Begin
  a:=Pos('<a href=', Memo1.Text);
  b:=Pos('/a>', Memo1.Text);
  ShowMessage(Copy(Memo1.Text, a+1, b-1-a));

End;


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Tino - Di 24.06.03 14:22

Du darfst die Groß- / Kleinschreibung nicht bachten. Dein Code würde z. B. das hier nicht finden:

Quelltext
1:
<A HREF="KJLJJ"></A>                    

Schau mal in der Hilfe nach UpperCase.

Gruß
Tino


Anonymous - Di 24.06.03 14:26

ich glaub ich mache mit diesem projekt dann mal später weiter....mir fehlt noch reichlich erfahrung dafür...


Tino - Di 24.06.03 14:44

Wie gesagt: Dann benutze einfach einen fertigen HTML Parser. Diese sind meistens recht einfach zu benutzen.

Gruß
Tino


Anonymous - Di 24.06.03 18:00

So, habs jetzt ganz anders und total Easy hinbekommen.....



Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to Webbrowser1.OleObject.Document.links.Length - 1 do
    Listbox1.Items.Add(Webbrowser1.OleObject.Document.Links.Item(i));
end;



Aber vielleicht kann mir jetzt jemand sagen wie ich einige Links rausfiltern kann....


Ich suche nämlich nur Links wie folgt: http://www.url.de/vieitem=0123456

Der Link ändert sich hinten nur in der nummer....

Leider sind auf der seite aber auch noch andere links wie http://www.bannerklick.de u.s.w.

Wie schaffe ich es also das ich nur die oben genannten urls mit der nummer raus bekomme?


Ex0rzist - Di 24.06.03 18:22

Schau mal hier [http://www.swissdelphicenter.ch/de/showcode.php?id=743]


Tweafis - Di 24.06.03 18:39

Ak-Alex hat folgendes geschrieben:
Ich suche nämlich nur Links wie folgt: http://www.url.de/vieitem=0123456



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:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  aUrl: string;
  searchUrl: string;

begin
  searchUrl := 'http://www.url.de/viewitem=';

  for i := 0 to Webbrowser1.OleObject.Document.links.Length - 1 do begin
    aUrl := Webbrowser1.OleObject.Document.Links.Item(i);

    if Pos(aUrl, searchUrl) > 0 then
      Listbox1.Items.Add();

    { kann auch so gemacht werden:

    if Copy(aUrl, 1, length(searchUrl)) = searchUrl then
      Listbox1.Items.Add();

    }

  end;
end;


Anonymous - Di 24.06.03 18:46

Funktioniert leider nicht....


Anonymous - Di 24.06.03 18:47

Mit der zweiten möglichkeit gehts , danke


Tweafis - Di 24.06.03 21:02

Kann garnicht gehen, ich hab vergessen bei Add was reinzuschreiben. Ansonsten sollte auch das erste gehen (Fehler gefunden, du musst aUrl und searchUrl vertauschen, der substr kommt als erstes) ;) (Hab den Code nicht geändert, das kannst du doch auch selbst ;)


Anonymous - Di 24.06.03 21:06

ja das habe ich schon direkt gesehen,,, aber die erste möglichkeit funktioniert bei mir trotzdem nicht....


Tweafis - Di 24.06.03 21:08

Wie gesagt, mit den Zeieln


Delphi-Quelltext
1:
2:
    if Pos(searchUrl, aUrl) > 0 then
      Listbox1.Items.Add(aUrl);


sollte es gehen