![]() |
Link aus Quelltext raussuchen und auflisten
Hallöchen!
ich habe folgendes Problem... Ich möchte ein Programm schreiben, welches mir eine Wortsammlung von Internetseiten zusammstellt. Dazu hole ich mir den Quelltext einer von mir eingegebenen Startseite und suchen diesen nach Wörtern ab. Damit meine Wortsammlung schön groß wird, möchte ich die im Quelltext gefundenen Links auflisten und nacheinander nach dem gleichen Schema abarbeiten. Wenn das funktioniert, dann müsste das ganze ja unendlich lange gehen nzw bis die Festplatte voll ist(oder halt die DB). Deswegen möchte ich auch diese PROCEDURE jederzeit unterbrechen können. mein Problem liegt jetzt darin, dass ich zwar mit POS und COPY den Link lokalisieren und copieren kann, aber keine Länge für COPY angeben kann, da ich ja die Länge des Links nicht kenne. Wie kann man das am besten bewerkstelligen? was ich bis jetz habe, ist das:
Delphi-Quellcode:
wo die ??? stehen hörts bei mir auf...
RichEdit_Quellcode.Lines.Add(iDHTTP1.Get('http://'+Editinet.Text)); //<== Protkoll angeben!!!
For i:=1 to RichEdit_Quellcode.Lines.Count do begin Memo_Links.Lines.Add(Copy(RichEdit_Quellcode.Lines[i],POS('<a href="',RichEdit_Quellcode.Lines[i]),???))); Ich hoffe das mir jemand helfen kann! mfg knolli |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
|
Re: Link aus Quelltext raussuchen und auflisten
ein Link wird durch "</a>" abgeschlossen. Wenn du also mit PosEx danach suchst (beginnend ab dem Anfang des Links) so kannst du die Länge errechnen.
|
Re: Link aus Quelltext raussuchen und auflisten
wie soll der befehl dann aussehen?
Delphi-Quellcode:
oder wie sorry von PosEx höre ich heute zum ersten mal..
Memo_Links.Lines.Add(Copy(RichEdit_Quellcode.Lines[i],POS('<a href="',RichEdit_Quellcode.Lines[i]),PosEx('</a>',RichEdit_Quellcode.Lines[i]))));
|
Re: Link aus Quelltext raussuchen und auflisten
Zitat:
Uebersichtlicher waere es vielleicht so (kurz und knackig, aber vielleicht nicht fuer alle Zwecke in dieser Form sinnvoll): [code=delphi] s:=RichEdit_Quellcode.Lines[i]; i:=pos(' ![]() enthalten. Daher sollte das erste Vorkommen von chr(34) NACH dem Anker das Ende des URI sein. |
Re: Link aus Quelltext raussuchen und auflisten
Zitat:
Einfach mal in der Hilfe nachschlagen - dafür ist Sie da... Dennoch würde ich vielleicht zu dem ![]() Edit: Rechtschreibfehler korrigiert |
Re: Link aus Quelltext raussuchen und auflisten
Zitat:
Da ich vor zwanzig Jahren meine eigenen Routinen dieser Art geschrieben habe - als es die noch nicht so gab, bin ich nicht imnmer auf der Hoehe der Zeit, was mittlerweile alles mitgeliefert wird. Da ich meine eigenen Bibliotheken einsetze. [EDIT: mit posex finde ich es jedenfalls unuebersichtlicher:
Delphi-Quellcode:
Memo_Links.Lines.Add(Copy(RichEdit_Quellcode.Lines[i],POS('<a href="',RichEdit_Quellcode.Lines[i]),PosEx('"',RichEdit_Quellcode.Lines[i],POS('<a href="',RichEdit_Quellcode.Lines[i])))));
|
Re: Link aus Quelltext raussuchen und auflisten
Zitat:
|
Re: Link aus Quelltext raussuchen und auflisten
Hallo,
natürlich lässt sich jeder Text als einfache Folge von Zeichen betrachten und mittels PosEx() und Copy() untersuchen. Berücksichtigt man die besondere Semantik (HTML), dann hilft vielleicht ![]() Freundliche Grüße |
Re: Link aus Quelltext raussuchen und auflisten
Zitat:
|
Re: Link aus Quelltext raussuchen und auflisten
Zitat:
|
Re: Link aus Quelltext raussuchen und auflisten
Sorry mit dem ExtractLinks() kann ich nix anfangen...
ich hab das hier mal gestestet mit google.de
Delphi-Quellcode:
und raus kommt das hier:
Memo_Links.Lines.Add(Copy(Memo_Quellcode.Lines[i],POS('<a href="',Memo_Quellcode.Lines[i]),PosEx('">',Memo_Quellcode.Lines[i],POS('<a href="',Memo_Quellcode.Lines[i]))));
Delphi-Quellcode:
ich meine hier sind ein paar links drin aber es findet wie man sehen kann unendlich viele leere Zeilen und auch noch anderes zeug, was keine links sind...
charset=UTF-8"
href="http://images.google.de/imghp?hl=de&tab=wi" href="http://maps.google.de/maps?hl=de&tab=wl" href="http://news.google.de/nwshp?hl=de&tab=wn" href="http://www.google.de/prdhp?hl=de&tab=wf" href="http://mail.google.com/mail?hl=de&tab=wm" onclick="this.blur();gbar.tg(event);return false" href="http://blogsearch.google.de/?hl=de&tab=wb" href="http://books.google.de/bkshp?hl=de&tab=wp" href="http://docs.google.com/?hl=de&tab=wo" href="http://picasaweb.google.de/home?hl=de&tab=wq" href="http://groups.google.de/grphp?hl=de&tab=wg" href="http://www.google.com/calendar?hl=de&tab=wc" href="http://www.google.de/reader?hl=de&tab=wy" href="http://video.google.de/?hl=de&tab=wv" href="http://www.google.de/intl/de/options/" hl%3Dde&usg=AFQjCNEuFEstOqdyi_oJiIgrhN9DEbl2cA" /www.google.de/&hl=de" title="Google-Suche" value="" type=submit value="Google-Suche" type=submit value="Auf gut Glück!" style="text-align:left" type=radio name=meta value="lr=lang_de" value="cr=countryDE" was noch ist, von denlinks die hier gefunden wurden, bracuhe ich das ganze OHNE href=" was muss ich noch ändern damit das nicht mit erscheint? ich meine wwenn ich noch +7 also 7 zeichen später anfange stehet zum ende noch anderes zeug da zb:
Delphi-Quellcode:
also wie kann ich das umgehen, dass neben dem Link auch noch anderes drinsteht?
http://news.google.de/nwshp?hl=de&tab=wn">News<
http://www.google.de/prdhp?hl=de&tab=wf">Shopp http://mail.google.com/mail?hl=de&tab=wm">Mail< k="this.blur();gbar.tg(event);return false"><u>Me http://blogsearch.google.de/?hl=de&tab=wb">Blogs http://books.google.de/bkshp?hl=de&tab=wp">Büche http://docs.google.com/?hl=de&tab=wo">Dokum http://picasaweb.google.de/home?hl=de&tab=wq">Fotos http://groups.google.de/grphp?hl=de&tab=wg">Group http://www.google.com/calendar?hl=de&tab=wc">Kalen http://www.google.de/reader?hl=de&tab=wy">Reade |
Re: Link aus Quelltext raussuchen und auflisten
Kannst du mal die eigentlichen Daten posten?
|
Re: Link aus Quelltext raussuchen und auflisten
Das 'href' steht drin, da Du Deine Copy-Funktion nicht bei Pos('a href'...) losschicken darfst, sondern erst danach., Du musst also noch die Länge von 'a href' zu der Position dazu addieren.
Schau Dir dazu das Beispiel von mashutu an. Mit Deinem ganzen Vorhaben wirst Du so aber trotzdem nicht weit kommen. Und ich verstehe auch nicht, warum Du nicht das Beispiel von marabu aufgreifst... naja, Deine Sache. Reguläre Ausdrücke wären eine weitere Möglichkeit. |
Re: Link aus Quelltext raussuchen und auflisten
also nochmal neu!
ich habe bis jetz:
Delphi-Quellcode:
es kommt das raus:
unit U_Test;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, StrUtils; type TForm1 = class(TForm) Memo_Quellcode: TMemo; Memo_Links: TMemo; Button1: TButton; Button2: TButton; Memo_fertig: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Memo_Links.Clear; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=1 to Memo_Quellcode.Lines.Count do // String wo kopiert wird #=============== von WO =================#============================== WIE WEIT ==================================== Memo_Links.Lines.Add(Copy(Memo_Quellcode.Lines[i],POS('<a href="',Memo_Quellcode.Lines[i])+7,PosEx('">',Memo_Quellcode.Lines[i],POS('<a href="',Memo_Quellcode.Lines[i])))); end; procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin For i:=1 to Memo_Links.Lines.Count do begin Memo_fertig.Lines.Add(COPY(Memo_Links.Lines[i],0,Length(memo_Links.Lines[i])-7)); end; end; end.
Delphi-Quellcode:
was ich jetzt noch wissen muss, ist wie ich den überflüssigen schriebs entfernen kann...
t=UTF-8
[url]http://images.google.de/imghp?hl=de&tab=wi[/url] [url]http://maps.google.de/maps?hl=de&tab=wl[/url] [url]http://news.google.de/nwshp?hl=de&tab=wn[/url] [url]http://www.google.de/prdhp?hl=de&tab=wf[/url] [url]http://mail.google.com/mail?hl=de&tab=wm[/url] k="this.blur();gbar.tg(event);return false [url]http://blogsearch.google.de/?hl=de&tab=wb[/url] [url]http://books.google.de/bkshp?hl=de&tab=wp[/url] [url]http://docs.google.com/?hl=de&tab=wo[/url] [url]http://picasaweb.google.de/home?hl=de&tab=wq[/url] [url]http://groups.google.de/grphp?hl=de&tab=wg[/url] [url]http://www.google.com/calendar?hl=de&tab=wc[/url] [url]http://www.google.de/reader?hl=de&tab=wy[/url] [url]http://video.google.de/?hl=de&tab=wv[/url] [url]http://www.google.de/intl/de/options/[/url] e&usg=AFQjCNEuFEstOqdyi_oJiIgrhN9DEbl2cA oogle.de/&hl=de "Google-Suche" value=" ubmit value="Google-Suche ubmit value="Auf gut Glück! "text-align:left adio name=meta value="lr=lang_de "cr=countryDE @s-off: warum werde ich damit nich tweit kommen? und ich habe mir das beispiel angeschaut, aber ich finde es zu kompliziert. ich kann da einfach nix draus lesen (sorry aba da bin ich vllt zu blöd dafür) |
Re: Link aus Quelltext raussuchen und auflisten
Nein, ich wollte eigentlich die Daten haben die du LIEST. Die Rohdaten also - nicht den Quelltext!
|
Re: Link aus Quelltext raussuchen und auflisten
oh...
naja also hier meine rohdaten:
Delphi-Quellcode:
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>Google</title><style>body,td,a,p,.h{font-family:arial,sans-serif}.h{font-size:20px}.h{color:#3366cc}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}#gbar{float:left;font-weight:bold;height:22px;padding-left:2px}#gbh{border-top:1px solid #c9d7f1;font-size:0;height:0;position:absolute;right:0;top:24px;width:200%}#gbi{background:#fff;border:1px solid;border-color:#c9d7f1 #36c #36c #a2bae7;top:24px;z-index:1000}#guser{padding-bottom:7px !important}#gbar,#guser{font-size:13px;padding-top:1px !important}@media all{.gb1,.gb3{height:22px;margin-right:.73em;vertical-align:top}}#gbi,.gb2{visibility:hidden;position:absolute}.gb2{z-index:1001}#gbar a,#gbar a:active,#gbar a:visited{color:#00c;font-weight:normal}.gb2 a,.gb3 a{text-decoration:none}.gb2 a{display:block;padding:.2em .5em}#gbar .gb2 a:hover{background:#36c;color:#fff}</style><script>window.google={kEI:"Xt2ER7mRHYKAnQOhiuRD",kEXPI:"17259,17735",kHL:"de"};
function sf(){document.f.q.focus()} window.clk=function(b,c,d,e,f,g){if(document.images){var a=encodeURIComponent||escape;(new Image).src="/url?sa=T"+(c?"&oi="+a(c):"")+(d?"&cad="+a(d):"")+"&ct="+a(e)+"&cd="+a(f)+(b?"&url="+a(b.replace(/#.*/,"")).replace(/\+/g,"%2B"):"")+"&ei=Xt2ER7mRHYKAnQOhiuRD"+g}return true}; window.gbar={};(function(){;var i=window.gbar,a,n,b,o="visible";function p(c,g,f){c.visibility=c.visibility==o?"hidden":o;c.left=g+"px";c.top=f+"px"}i.tg=function(c){var g=0,f,d,k,e=0,h=0,l=window.navExtra;!n&&(n=document.getElementById("gbar"));!b&&(b=n.getElementsByTagName("span"));(c||window.event).cancelBubble=true;if(!a){a=document.createElement(Array.every||window.createPopup?"iframe":"div");a.frameBorder="0";a.id="gbi";a.scrolling="no";a.src="#";document.body.appendChild(a);if(l&&b[8])for(var q in l){var m=document.createElement("span");m.appendChild(l[q]);m.className="gb2";b[0].parentNode.insertBefore(m,b[8])}document.onclick=i.close}for(;b[e];e++){d=b[e];k=d.className;if(k=="gb3"){f=d.offsetLeft;while(d=d.offsetParent)f+=d.offsetLeft}else if(k=="gb2"){p(d.style,f+1,25+g);h=Math.max(h,d.offsetWidth);g+=20}}for(e=0;b[e];e++){if(b[e].className=="gb2"){b[e].style.width=h+"px"}}var j=a.style;j.height=g+"px";j.width=h+"px";p(j,f,24)};i.close=function(c){a&&a.style.visibility==o&&i.tg(c)};})();</script></head><body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 onload="sf();if(document.images){new Image().src='/images/nav_logo3.png'}" topmargin=3 marginheight=3><div id=gbar><nobr><span class=gb1>Web</a></span> <span class=gb1>[url="http://images.google.de/imghp?hl=de&tab=wi"]Bilder[/url]</span> <span class=gb1>[url="http://maps.google.de/maps?hl=de&tab=wl"]Maps[/url]</span> <span class=gb1>[url="http://news.google.de/nwshp?hl=de&tab=wn"]News[/url]</span> <span class=gb1>[url="http://www.google.de/prdhp?hl=de&tab=wf"]Shopping[/url]</span> <span class=gb1>[url="http://mail.google.com/mail?hl=de&tab=wm"]Mail[/url]</span> <span class=gb3>[url="http://www.google.de/intl/de/options/"]<u>Mehr</u> <span style=font-size:11px>▼</span>[/url]</span> <span class=gb2>[url="http://blogsearch.google.de/?hl=de&tab=wb"]Blogs[/url]</span> <span class=gb2>[url="http://books.google.de/bkshp?hl=de&tab=wp"]Bücher[/url]</span> <span class=gb2>[url="http://docs.google.com/?hl=de&tab=wo"]Dokumente[/url]</span> <span class=gb2>[url="http://picasaweb.google.de/home?hl=de&tab=wq"]Fotos[/url]</span> <span class=gb2>[url="http://groups.google.de/grphp?hl=de&tab=wg"]Groups[/url]</span> <span class=gb2>[url="http://www.google.com/calendar?hl=de&tab=wc"]Kalender[/url]</span> <span class=gb2>[url="http://www.google.de/reader?hl=de&tab=wy"]Reader[/url]</span> <span class=gb2>[url="http://video.google.de/?hl=de&tab=wv"]Video[/url]</span> <span class=gb2>[url="http://www.google.de/intl/de/options/"]und noch mehr »[/url]</span> </nobr></div><div id=gbh></div><div align=right id=guser style="font-size:84%;padding:0 0 4px" width=100%><nobr>[url="/url?sa=p&pref=ig&pval=3&q=http://www.google.de/ig%3Fhl%3Dde&usg=AFQjCNEuFEstOqdyi_oJiIgrhN9DEbl2cA"]iGoogle[/url] | [url="https://www.google.com/accounts/Login?continue=http://www.google.de/&hl=de"]Anmelden[/url]</nobr></div><center><br clear=all id=lgpd>[img]/intl/de_de/images/logo.gif[/img] <form action="/search" name=f><table cellpadding=0 cellspacing=0><tr valign=top><td width=25%></td><td align=center nowrap><input name=hl type=hidden value=de><input maxlength=2048 name=q size=55 title="Google-Suche" value=""> <input name=btnG type=submit value="Google-Suche"><input name=btnI type=submit value="Auf gut Glück!"></td><td nowrap width=25%><font size=-2><a href=/advanced_search?hl=de>Erweiterte Suche</a> [url="/preferences?hl=de>Einstellungen</a> <a"]Sprachtools[/url]</font></td></tr><tr><td align=center colspan=3><font size=-1><span style="text-align:left">Suche: <input id=all type=radio name=meta value="" checked><label for=all> Das Web </label><input id=lgr type=radio name=meta value="lr=lang_de"><label for=lgr> Seiten auf Deutsch </label><input id=cty type=radio name=meta value="cr=countryDE"><label for=cty> Seiten aus Deutschland </label></span></font></td></tr></table></form> <font size=-1>[url="/intl/de/ads/"]Werbeprogramme[/url] - [url="/services/"]Unternehmensangebote[/url] - [url="/intl/de/about.html"]Über Google[/url] - <a href=http://www.google.com/ncr>Google.com in English</a></font> <font size=-2>©2008 Google</font></p></center></body></html> |
Re: Link aus Quelltext raussuchen und auflisten
Delphi-Quellcode:
Das ist nur Quick and dirty. Insbesondere an der Markierung waeren noch andere Protokolle zu pruefen.
procedure getURLs(sName:string);
procedure processLine(s:string;var t:system.text); const csStop ='"'; csStart ='a href='; ciStartLen=7; var sTmp: string; iCount, iPos: integer; begin iCount:=0; repeat inc(iCount); iPos:=pos(csStart,s); if iPos>0 then begin s:=copy(s,iPos+ciStartLen+1,Length(s)); iPos:=pos(csStop,s); if iPos>0 then begin sTmp:=copy(s,1,iPos-1); s:=copy(s,iPos+1,length(s)); if LowerCase(copy(sTmp,1,4))='http' then //<<<<<<<<!!!!!!!!!! writeln(t,sTmp); end; end; until iPos=0; end; var tout, t : system.text; s : string; begin system.assign(t,sName); system.assign(tout,ChangeFileExt(sName,'URLs')); reset(t); rewrite(tout); while not eof(t) do begin readln(t,s); processLine(s,tout); end; system.close(t); system.close(tout); end; Auch der Name der Zieldatei ist einfach nur so... Aber grundsaetzlich sollte klar werden was Sache ist. |
Re: Link aus Quelltext raussuchen und auflisten
In seinem Quelltext scheinen auch URLs zu sein, die nicht von Hochkommata eingeschlossen sind
Zitat:
Ich sage ja, nach diesem kopierehier kopiereda-Schema wird das nichts. Jedenfalls nichts zuverlässiges. |
Re: Link aus Quelltext raussuchen und auflisten
@s-off:
Ich hab' ja geschrieben, dasses quick and dirty ist und dass er das noch an seine Beduerfnisse anpassen muss. Scheint ja auch nicht business-critical zu sein, was er sich da zusammenprogrammiert. Denke aber, dass ich ihm eine Hilfestellung gegeben habe wie er grundsaetzlich vorgehen kann und einen brauchbaren Output bekommt. Klar gibt es noch diverse Syntaxvarianten. Der allgemeinen Nichtstandardisierung im Internet sei dank... |
Re: Link aus Quelltext raussuchen und auflisten
wende doch nochmal pos mit'http:' oder so an :)
kannste mir vielleicht mal ne exe datei deines projektes schicken. würde das gern bei meiner homepage mal ausprobieren :) |
Re: Link aus Quelltext raussuchen und auflisten
@mashutu:
Mein Kommentar war nicht gegen Dich gerichtet. Er sollte dem Threadersteller lediglich als Antwort auf seine Frage dienen: Zitat:
@knolli Zitat:
Die Zeit, die Du bisher in diesen Thread investiert hast, hättest Du dafür Aufwenden sollen, Dich in Bezug auf die Dir genannten Vorschläge weiterzubilden. |
Re: Link aus Quelltext raussuchen und auflisten
Wie wäre es man statt mit pos oder ähnlichem einen richtigen Parser einsetzt? Ich denke man könnte hier auch den MS-XML Parser einsetzen, die benötigten Klassen und Interfaces liefert Delphi mit (mindestens ab D7). Oder man kann beispielweise mit Yacc für Delphi (
![]() mfg |
Re: Link aus Quelltext raussuchen und auflisten
so ich hab jetz eine eigene Lösung:
Delphi-Quellcode:
sie erscheint euch vllt nicht als die beste, aber für meine zwecke reicht sie.
procedure TForm1.ExtractLinks(Sender: TObject);
var i, iStop:integer; sLink:String; begin sLink:=''; iStop:=Memo_Quellcode.Lines.Count-1; Memo_Temp.Clear; for i:=0 to iStop do begin IF MatchesMask(Memo_Quellcode.Lines[i], '*href="http://*"*') then begin Memo_Temp.Lines.Add(Copy(Memo_Quellcode.Lines[i],POS('href="',Memo_Quellcode.Lines[i])+6,Length(Memo_Quellcode.Lines[i]))); end; end; for i:=0 to Memo_Temp.Lines.Count-1 do Memo_Links.Lines.Add(Copy(Memo_Temp.Lines[i],0,Pos('"',Memo_Temp.Lines[i])-1)); end; vielen Dank an euch für die Hilfe! [edit= man mus noch masks in die USES einbinden] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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