Crawler geht nicht

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

BlitzChecker

Betreff: Crawler geht nicht

BeitragMi, Apr 12, 2006 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich habe mal angefangen einen Crawler (andere nennen sowas auch Spider oder Robot) zu programmieren. Das ist sowas wie z.B. der Googlebot, also ein Programm, was das Internet nach Links durchsucht. Allerdings funktioniert mein Code nicht. Der macht komischerweise vor fast jeden gefundenen Link ein http:// mehr. Am Ende sieht das dann ungefähr z.B. so aus: http://http://http://http://ht...tzforum.de

Mein Code:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2

outputfile$ = "sites\sites0.txt"

Global file = WriteFile(outputfile$)

Type url2do
Field url$
Field server$
End Type


readurls("blitzforum.de/","blitzforum.de")

For url_new.url2do = Each url2do
DebugLog url_new.url2do\url+" "+ url_new.url2do\server
readurls(url_new.url2do\url, url_new.url2do\server)
url_done.url2do = First url2do
Delete url_done.url2do

If GetKey() Then
If Input("Wirklich beenden?")="JA" Then
Exit
EndIf
EndIf

If FileSize(outputfile$)=>1048576 Then ;Wenn Datei grösser als 1048576 Bytes (1MB) dann neue Datei erstellen
count = count + 1
outputfile$ = "sites\sites"+Str(count)+".txt"
CloseFile file
file = WriteFile(outputfile$)
EndIf
Next

CloseFile file

Function readurls(starturl$,server$)
stream = OpenTCPStream(server$,80)
If Not stream Then Return
WriteLine stream,"GET http://"+starturl$+" HTTP/1.0 USER-AGENT: Spindexer1.0"
WriteLine stream,Chr$(10)
While Not Eof(stream)
zeile$ = ReadLine$(stream)
;Print zeile$
If Instr(zeile$,"<a href=") Then
If Left(ParseContent(zeile$,"href"),1)="/" And Left(ParseContent(zeile$,"href"),7) <> "HTTP://" And Left(ParseContent(zeile$,"href"),10) <> "JAVASCRIPT" And Left(ParseContent(zeile$,"href"),7) <> "MAILTO:" Then
WriteLine file, starturl$+ParseContent(zeile$,"href")
url_new.url2do = New url2do
url_new.url2do\url = starturl$+ParseContent(zeile$,"href")
url_new.url2do\server = server$
ElseIf Left(ParseContent(zeile$,"href"),7) <> "HTTP://" And Left(ParseContent(zeile$,"href"),10) <> "JAVASCRIPT" And Left(ParseContent(zeile$,"href"),7) <> "MAILTO:"
WriteLine file, starturl$+ParseContent(zeile$,"href")
url_new.url2do = New url2do
url_new.url2do\url = starturl$+ParseContent(zeile$,"href")
url_new.url2do\server = server$
ElseIf Left(ParseContent(zeile$,"href"),10) <> "JAVASCRIPT" And Left(ParseContent(zeile$,"href"),7) <> "MAILTO:"
WriteLine file, ParseContent(zeile$,"href")
url_new.url2do = New url2do
url_new.url2do\url = ParseContent(zeile$,"href")
temp$ = Replace(ParseContent(zeile$,"href"),"HTTP://","")
If Instr(temp$,"/") > 0 Then
url_new.url2do\server = Left(temp$,Instr(temp$,"/")-1)
Else
url_new.url2do\server = temp$
EndIf
EndIf
;Print zeile$
EndIf
Wend
CloseTCPStream stream
End Function


Function ParseContent$(inh$,tag$,ext$="=")
inh$=Upper(inh$)
par$=Upper(tag$+ext$)
If Instr(inh$,par$) Then
b=Instr(inh$," ",Instr(inh$,par$)+1)-Instr(inh$,par$)
a=Instr(inh$,">",Instr(inh$,par$)+1)-Instr(inh$,par$)
If a>b And b>0 Then
sizepart$=Mid$(inh$,Instr(inh$,par$),b)
ElseIf a>0 Then
sizepart$=Mid$(inh$,Instr(inh$,par$),a)
End If
change$=Replace$(Mid$(sizepart$,Instr(sizepart$,"=")+1,Len(sizepart$)-Instr(sizepart$,"=")+1),Chr$(34),"")
Return change$
End If
End Function


Weiss jemand wo der Fehler liegt?
www.xairro.com
 

trooper

BeitragDo, Apr 13, 2006 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
er schreibt zu oft http://
-- imtane.de.vu --
a cherring ping

BlitzChecker

BeitragDo, Apr 13, 2006 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
das weiss ich. ich hab ja nicht umsonst
BlitzChecker hat Folgendes geschrieben:
Der macht komischerweise vor fast jeden gefundenen Link ein http:// mehr. Am Ende sieht das dann ungefähr z.B. so aus: http://http://http://http://ht...tzforum.de
geschrieben... Rolling Eyes

Weiss niemand wo der Bug liegt?
www.xairro.com

Blitzcoder

Newsposter

BeitragDo, Apr 13, 2006 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
mach doch einfach:

Code: [AUSKLAPPEN]

if not left$(linkvar$,7)="http://" then linkvar$="http://"+linkvar$


MfG Blitzcoder
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

BlitzChecker

BeitragDo, Apr 13, 2006 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
so hatte ich es schonmal, ging aber auch ned
www.xairro.com
 

trooper

BeitragDo, Apr 13, 2006 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
wahrscheinlich wird "readurls" zu oft ausgeführt bzw. links werden doppelt verarbeitet, höchstwahr. liegt der fehler in der schleife For url_new.url2do = Each url2do , probier doch einfach mal eine einfache seite mit nur ein, zwei links.
-- imtane.de.vu --
a cherring ping

Markus2

BeitragDo, Apr 13, 2006 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Mache dir möglichst viele HTML Seiten
mit so vielen Fehlern wie möglich und
versuche die richtig zu parsen , sonnst bringt das nix .
(erstmal ohne TCP Stream, direkt die Datei lesen!)

BlitzChecker

BeitragFr, Apr 14, 2006 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab jetzt noch einige bugs rausgebügelt, z.B. dass der nicht immer die adresse in großbuchsteben schreibt, sonst kommen linuysysteme damit nicht zurecht. aber ich glaube, ich werde auf eine javalösung umsteigen, da die javacrawler mehr als 10 seiten in der sekunde schaffen zu durchsuchen. meins schafft gerade mal 3-4 in der sekunde. vil kann ich ja auch das javateil nach bb portieren.

und ausserdem würd mein crawler ununterbrochen crawlen, da der auch seiten aufnimmt, die schon aufgenommen sind und somit in einer endlosschleife crawlt.
www.xairro.com

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group