| Autor |
Beitrag |
RuSsAk
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 12.10.09 20:45
hi leute
ich habe da mal ein problem und hoffe ihr könnt mir helfen
ich weiss hier gibts schon tausende threads dazu habe auch die ganzen codes ausprobiert aber mich hat nichts weiter gebracht gegoogelt und bei DP hab ich auch shcon geguckt aber nichts nur welche die die ganzen text auslesen aber da bleibt zu viel übrig und string replace würde da auch nichts bringen:(
ich suche eine funktion die ein quelltext parst
und zwar ich brauceh den text der zwischen "href="" und "</a>" steht aber auch wirklich nur den der dazwischen steht weil sonst sonst wäre das ja so wie bei den anderen die ich aussprobiert habe
wäre für eure hilfe sehr dankbar
ps. den quelltext habe ich in ein memo
mfg Moderiert von Narses: Topic aus Internet / Netzwerk verschoben am Mo 12.10.2009 um 23:05
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 12.10.09 20:49
Dann geh den Quelltext doch Zeile für Zeile mit einer Schleife durch und schaue nach ob dort diese Anfangs und Enddaten gefunden werden.
Wenn ja soll der Anfangspunkt fürs Kopieren hinter dem ersten Tag und der Endpunkt fürs Kopieren vor dem letzteren Tag stehen. 
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
RuSsAk 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 12.10.09 20:50
Dude566 hat folgendes geschrieben : | Dann geh den Quelltext doch Zeile für Zeile mit einer Schleife durch und schaue nach ob dort diese Anfangs und Enddaten gefunden werden.
Wenn ja soll der Anfangspunkt fürs Kopieren hinter dem ersten Tag und der Endpunkt fürs Kopieren vor dem letzteren Tag stehen.  |
hättest du vllt ein beispiel code zur seite?
bin noch frischling
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 12.10.09 21:05
Bei Gelegenheit kann ich da mal ein kleines Beispiel schreiben, habe leider gerade keins an der Hand. Vielleicht hat ja jemand eins.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
RuSsAk 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 12.10.09 21:08
Dude566 hat folgendes geschrieben : | | Bei Gelegenheit kann ich da mal ein kleines Beispiel schreiben, habe leider gerade keins an der Hand. Vielleicht hat ja jemand eins. |
wäre dir sehr dankbar:)
ja wäre auch schön 
|
|
Apuch
      
Beiträge: 27
Kubuntu 9.04, Win 2000
Delphi 7
|
Verfasst: Mo 12.10.09 21:08
HTML parsen wird übel (vor allem für deinen Webcrawler, der es sicher werden soll  ). Echte HTML-Daten sind nicht zwangsläufig wohlgeformt, damit wirds schwieriger...
Das einfachste ist wirklich Ueilenweise durchzugehen... für jede Zeile dann folgende Schritte:
1) suche 'href="'
2) gehe von der Position rückwärts bis zum letzten '<'
3) War der Buchstabe davor ein 'a'? Dann haben wir fast einen Eintrag
4) von der gefundenen 'href="'-Position aus alles einlesen bis zum nächsten '"'. das ist das Ergebniss
Das ganze natürlich mit der restlichen Zeile wiederhohlen...
@ RuSsAk: blind aus dem HTML-Code dieser Seite rausgegriffen:
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:
| <div id="sidebar_quicklinks" class="sidebarbox">
<div class="sidebarheader"> <b>Quicklinks</b> </div> <div class="sidebarcontent" style="line-height: 14px"> <a href="search.php?search_id=newposts" class="gensmall">Beiträge seit letztem Besuch</a> <a href="search.php?search_id=unread" class="gensmall">Ungelesene Themen</a> <div class="gensmall" style="margin-top: 2px"> <form action="search.php?search_id=sincex" method="POST" name="sincex_sb_searchform" style="margin-top: 0px; margin-bottom: 0px"> Seit <select class="post" style="font-size: 9px; width: 43px; " name="sincex_time"><option>1</option> <option>2</option>
<option>3</option> <option>4</option> <option>5</option> <option>8</option> <option>12</option> <option>15</option>
<option>20</option> <option>24</option> <option>36</option> <option>48</option></select> Stunden <input class="liteoption" style="font-size: 9px; width: 30px;" type="submit" value="Go!" /></form></div> <a href="search.php?search_id=unanswered" class="gensmall">Unbeantwortete Beiträge</a> <a href="search.php?search_id=open" class="gensmall">Offene Fragen</a>
<a href="vc.php?mode=new&ref_type=0" class="gensmall">Kontakt zum Team</a> </div> </div> |
alles was mit '<a' anfängt, ist ein potentielles Ergebniss...
MfG
|
|
RuSsAk 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 12.10.09 21:19
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
das hilft mir leider auch nich weiter 
|
|
Apuch
      
Beiträge: 27
Kubuntu 9.04, Win 2000
Delphi 7
|
Verfasst: Mo 12.10.09 22:08
Sorry, hatte da was durcheinander gehauen...
Hier eine Quick&Dirty-Variante. Ich arbeite mich selbst gerade in Delphi ein (Quereinsteiger, komme von C). Das sollte man also nicht als Beispiel für guten Code nehmen  Für produktiven Code solltest du noch etwas aufräumen und es sind sicher nicht alle Sonderfälle sauber abgefangen...
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: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| procedure ScanLine(line : string; var urls : TStringList); var p,p2 : integer; i : integer; url : string; begin p := pos('href="', line); if p = 0 then Exit;
i := p; while not (ord(line[i]) = ord('<')) do begin dec(i); if i = 0 then begin line := copy(line, p + 6, length(line) - p - 6); ScanLine(line, urls); Exit; end; end; if not ord(line[p+1]) = ord('a') then begin line := copy(line, p + 6, length(line) - p - 6); ScanLine(line, urls); Exit; end;
p2 := PosEx('"', line, p + 6); if p2 = 0 then Exit;
url := copy(line, p + 6, p2 - p - 6); urls.Add(url);
line := copy(line, p2, length(line) - p2); ScanLine(line, urls); end;
procedure TForm1.Button1Click(Sender: TObject); var line : string; urls : TStringList; begin line := copy(Memo1.Text,1,length(Memo1.Text)); urls := TStringList.Create; ScanLine(line, urls); Memo2.Lines := urls; end; |
Zwei Memos und den entsprechenden Button noch schnell anlegen und testen...
Memo1-Text : Der HTML-Code von oben
Memo2-Text :
search.php?search_id=newposts
search.php?search_id=unread
search.php?search_id=unanswered
search.php?search_id=open
vc.php?mode=new&ref_type=0
so besser? 
|
|
RuSsAk 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 12.10.09 23:14
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
danke dir erstmal
aber guck mal: Moderiert von Narses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 13.10.09 03:07
Hast du oben bei uses die Unit "StrUtils" stehen?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
RuSsAk 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 13.10.09 03:19
elundril hat folgendes geschrieben : | Hast du oben bei uses die Unit "StrUtils" stehen?
lg elundril |
ahh misst das hatte ich vergessen
ich danke euch vielmals für eure hilfe
[EDIT]misst habe noch ein kleines problemchen hätte vllt noch jmd ein code zur seite der doppelte wörter löscht? wenn nicht denn auch nich schlimm denn google ich mal wieder
und nochmal danke  [/EDIT]
|
|
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Di 13.10.09 09:52
Hallo,
eine Möglichkeit ist eine TStringList und dort alle Wörter speichern. Wird das Property Duplicates auf dupIgnore gesetzt sind keine Duplikate in der Liste.
|
|
RuSsAk 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 13.10.09 14:20
martin300 hat folgendes geschrieben : | Hallo,
eine Möglichkeit ist eine TStringList und dort alle Wörter speichern. Wird das Property Duplicates auf dupIgnore gesetzt sind keine Duplikate in der Liste. |
kennst du vllt eine leichtere methode?
mfg,
|
|
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Di 13.10.09 15:22
sieh dir das an:
delphi.about.com/od/.../remove-duplicat.htm
oder du prüfst beim Einfügen ob der Eintrag schon vorhanden ist. Dafür eignet sich
Delphi-Quelltext
bei der TStringList.
Das Ergebnis vom Code weiter oben ist übrigens schon in einer TStringList gespeichert. 
|
|