Entwickler-Ecke
Internet / Netzwerk - Quelltext einer Webseite auslesen
dominikkv2 - So 24.09.06 19:16
Titel: Quelltext einer Webseite auslesen
Hi
ich habe vor 7 Tagen angefage mich mit Delphi zu beschäftigen und bin grad dabei mein zweites Program zu schreiben.
Dieses Programm soll den Quelltext aus einer webseite auslesen und daraus Informationen filtern.
Meine Frage: wie kann ich den Quelltext der seite abfragen die grad mein FireFox/Opera anzeigt? Wenn das nicht geht hatte ich die Idee die seite mit einem TWebBrowser anzuzeigen und dann darus den quelltext zu holen (wobei ich auch da nicht weiss wie das geht). In mehreren Beiträgen habe ich gesehen das man das mit der Komponente FastNet geht, allerdings hab ich Turbo Delphi ohne FasNet. Ausserdem soll es irgendwie mit IDHTTP gehen, hab allerdings keine ahnung wie :-(
hoffe ihr könnt mir helfen
mfg.dominikkv
wulfskin - So 24.09.06 20:07
Hallo,
wenn es nur um den Quelltext geht, brauchst du keine Komponenten verwenden. Da kannst du direkt auf die APIs zugreifen:
Gruß Hape!
Chryzler - So 24.09.06 20:31
Wenn dein Browser die gefilterten Daten anzeigen soll, dann ist IdHTTPProxy (weiß den Namen leider nicht genau) das Richtige. Dann kannst du dein Programm im Browser als Proxy eintragen, und dein Prog bekommt jeden Quelltext.
wulfskin - So 24.09.06 20:35
Chryzler hat folgendes geschrieben: |
Wenn dein Browser die gefilterten Daten anzeigen soll, dann ist IdHTTPProxy (weiß den Namen leider nicht genau) das Richtige. Dann kannst du dein Programm im Browser als Proxy eintragen, und dein Prog bekommt jeden Quelltext. |
Was meinst du damit? Welche Quelltext sollte man denn so nicht bekommen?
Chryzler - So 24.09.06 20:59
Ich meine damit das, was ich geschrieben habe. Vielleicht will
dominikkv2 einen Webfilter o.ä. schreiben, und dazu muss man ja den gefilterten Quelltext im Browser anzeigen lassen. Er hat gefragt, wie er den Quelltext von der Seite kriegt, die gerade im FF angezeigt wird. Bei deinen Vorschlägen muss er erstmal die URL aus dem Browser kriegen, bei einem Proxy bekommt er die URL und dazu noch gleich den Quelltext.
marconist - So 24.09.06 21:17
Hi,
ich halte auch die Lösung mit local proxy für die elegantere Möglichkeit.
Üblicherweise schreibe ich so etwas mit tserversocket und tclientsocket.
srs,
marconist
dominikkv2 - Mo 25.09.06 18:34
hi
erstmal danke für eure antworten
ich will keinen webfilter machen, der browser soll alles anzeigen was er sonst auch anzeigen würde, nur will ich den quelltext von der seite holen. dieser quelltext enthält informationen die ich analysieren und speichern will. dazu muss ich doch irgendwie den quelltext der seite in mein programm "importieren", vllt in eine variable oder memo?
ich habe schon mehrmals das wort indy gehört, weiss aber nicht so ganz was das ist und wie ich das anwenden kann.
vllt könnt ihr mir einen beispiel-code geben damit ich da ein bisschen durchblick?
achja und bei swissdelphycenter hab ich schon geschaut, da brauch ich aber andere komponenten die ich nicht hab :/
Chryzler - Mo 25.09.06 18:41
Also, die Indys sind Komponenten (hauptsächlich Netzwerkkomponenten), z.B. HTTP-Client, FTP-Client, aber auch Server, z.B. Telnet-Server, FTP-Server. Darunter ist auch ein HTTPProxy.
Ich weiß nicht ob bei Turbo Delphi die Indy Komponenten dabei sind. (Ich weiß nichtmal was Turbo Delphi ist). Ich glaube die Indys sind kostenlos, d.h. du müsstest sie auch irgendwo runterladen können.
Wenn du die Komponenten hast, dann pflanzt du dir so einen TIdTTPProxy auf deine Form. Wie es weitergeht, sag ich dir nachher...
Chryzler
dominikkv2 - Mo 25.09.06 18:53
turbo-delphi ist eine kostenlose version von delphi und ist glaube ich erst seit september draussen. früher hieß das mal developper studio oder so^^
indy 9 und 10 sind dabei, nur weiss ich eben nicht wie ich das anwenden kann. es gibt auch keine objekte wie TIdTTPProxy von indy die man auf die form ziehen kann :(
Chryzler - Mo 25.09.06 19:14
Also ich hab grad nachgeschaut: es heißt TIdHTTPProxyServer
Hier [
http://www.delphi-forum.de/viewtopic.php?t=60934] hab ich was brauchbares gefunden. Im HTTPDocument-Ereignis des IdHTTPProxyServers gibt es das Argument "ADocument". Das müsste eigentlich die URL sein, die man aufgrufen hat. Dann gibt es noch ein Argument namens "VStream", das ist der Quelltext.
dominikkv2 - Do 28.09.06 14:43
hi
ich hab leider keine ahnung wie ich Indy verwenden kann :/
es gibt keinerlei objekte die TIdHTTPProxyServer oder ähnlich heißen oder irgendwas mit Indy zu tun haben...
oder muss ich das irgendwie anders machen?
btw: gibt es hier im forum irgendein bewertungssystem zum bewerten der posts anderer?
Chryzler - Sa 30.09.06 17:14
dominikkv2 hat folgendes geschrieben: |
hi
ich hab leider keine ahnung wie ich Indy verwenden kann :/
es gibt keinerlei objekte die TIdHTTPProxyServer oder ähnlich heißen oder irgendwas mit Indy zu tun haben... |
Dann ist bei deinem Delphi auch kein Indy dabei. :? Lade dir doch mal von der Homepage die Komponenten runter.
dominikkv2 hat folgendes geschrieben: |
gibt es hier im forum irgendein bewertungssystem zum bewerten der posts anderer? |
Ein Bewertungssystem gibts hier nicht, wäre aber eine gute Idee! :?:
dominikkv2 - Sa 30.09.06 18:56
hmm...ich glaub ich hab indy installiert...bei der installation hat er mich gefragt ob er indy 9 oder 10 verwenden soll.
naja auf jedenfall ich habs jetzt geschaft :)
mit der funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function GetHTMLCode(WB: IWebbrowser2; ACode: TStrings): Boolean; var ps: IPersistStreamInit; s: string; ss: TStringStream; sa: IStream; begin ps := WB.document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa:= TStreamAdapter.Create(ss, soReference) as IStream; Result := Succeeded(ps.Save(sa, Bool(True))); if Result then ACode.Add(ss.Datastring); end; finally ss.Free; end; end; |
jetzt hab ich aber ein problem:
auf "normalen" inetseiten funktioniert das, allerdings nicht auf der seite
http://www.space-pioneers.de/ wo das programm letztendlich eingesetzt werden soll :/
wenn man aber die seite Aktualisiert gehts <--!!
weiss jemand warum und wie ich es hinbekomm das man den quelltext gleich bekommt und nicht erst aktualisieren muss?
eine alternative ist es wie oben gesagt einen proxyserver zu erstellen...gibt es da tutorials dazu?
danke für eure antworten :)
mfg.dominik
dominikkv2 - So 01.10.06 14:51
ich hab mir jetzt borland developer studio 2006 runtergeladen und da kann ich jetzt indy benutzen...
hab TIdHTTPProxyServer auf Form1 plaziert und im FF den proxy eingetragen und siehe da... klappt auf anhieb. :mrgreen:
allerdings hab ich ein neues problem ...
hier mal der quelltext:
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: 29: 30: 31: 32:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdCustomTCPServer, IdTCPServer, IdCmdTCPServer, IdHTTPProxyServer;
type TForm1 = class(TForm) IdHTTPProxyServer1: TIdHTTPProxyServer; procedure IdHTTPProxyServer1Connect(AContext: TIdContext); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.IdHTTPProxyServer1Connect(AContext: TIdContext); begin showmessage ('connected') end;
end. |
Fehlermeldung:
Zitat: |
[Pascal Fehler] Unit1.pas(13): E2003 Undefinierter Bezeichner: 'TIdContext' |
-.-
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!