Suchmaschine Programmieren

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Freitag 1. August 2008, 09:59

Hallo

Ja ihr habe richtig gelesen ich will eine Suchmaschine Programmieren.
Ich habe mir auch schon 1 Terabyte Speicher gekauft.

Ich habe mit das so gedacht:
Ich setze einfach die Buchstaben vom Alphabet der Reihe nach zusammen und schauhe ob was vorhanden ist, wenn ja dann soll allen Links auf der Seite nachgeganen werden und deren Links usw.

[EDIT]

Nur wie bekomme ich die Keywörter aus den Seite heraus?
Text sieht ja so aus:

>Seite Kress wurde bearbeitet</

Nur wenn ich mit "re.findall('>.*</', keyhtml)" dann bekomme ich halt alles zurück was so "> </" geschrieben ist zurück.

[EDIT]:
Das ist gelöst:

Jetzt zum Problem ich bin soweit das ich die Links auf den Seiten finde.
Nur wie bekomme ich die links "sauber"
z.B:
<a href="ueber_die_hardware.htm">
<a href="topic-15572.html" class="topictitle">problems with cherrypy`s http auth using wsgiref</a>
<a target="_blank" href="http://www.flf-book.de/Benutzer/cnc4all.htm">

ich möchte nur den Link und nicht in welcher Frame der sich öffnen soll.
Mit "replace" kann man ja nach den Standart Framen Suchen aber nicht nach selbst gemachrn mit anderem Namen.

Wie macht man das am leichtesten. Ich habe was Versucht den link auzuspalten und in eine Liste zu Backen das ich besser suchen kann aber das hat nicht Funktioniert.

Lösung:
re.findall('<a.*?href="((http|ftp)s?://.*?)".*?>(?uism)', seite)
link.replace('(', '').replace(')', '').replace(', http', '')

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Freitag 1. August 2008, 11:37

Schau doch mal, wie yacy das angeht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 1. August 2008, 15:59

Das Web ist leider kein Baum! Daher reicht es sicherlich nicht allen Links nachzugehen stumpf nachzugehen. Du musst ja auch prüfen, ob Du eine Seite schon besucht hast.

Für das Parsen von HTML sollte man imho nicht auf REs setzen, da HTML stark verschachtelt ist. Im Falle von Links mag das noch gehen, aber ich würde da eher auf einen echten XML (HTML) Parser setzen.
Für Keywords ist das sicherlich auch komfortabler.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 1. August 2008, 16:52

Aber besser einen fehlertoleranten Parser nehmen, wie html5lib ihn bietet, da eine ganze Menge kaputtes HTML im Web rumfliegt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Freitag 1. August 2008, 17:54

Hallo

Danke für die Antworten. Ich schauhe mir html5lib und lxml mal genauer an.
Kennt jemand zu "html5lib" eine Paar gute Beispielcodes?

Gruß
Andyh
Zuletzt geändert von Andyh am Freitag 1. August 2008, 18:24, insgesamt 1-mal geändert.
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 1. August 2008, 18:22

Andyh hat geschrieben:Kennt jamnd zu "html5lib" eine paar gute Beispielcodes?
Die hier? Letztendlich kommt sowieso ein DOM/ET/lxml-Tree raus, und die Outputformate sind ja schon von anderen dokumentiert worden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Freitag 1. August 2008, 19:14

Hallo

Habe das hier gefunden:

Code: Alles auswählen

import urllib,htmllib,formatter 
h = htmllib.HTMLParser(formatter.AbstractFormatter(formatter.DumbWriter())) 
h.feed(urllib.urlopen("http://cnc4all.de") ).read())
was ich nicht verstehe ist was ich damit anfangen kann.

Der Text der Seite baut sich schön auf und das wahrs?

var = h.feed(urllib.urlopen("http://cnc4all.de") ).read())
geht nicht

in einer Funktion:
return h.feed(urllib.urlopen("http://cnc4all.de") ).read())
geht auch nicht

Ist sicher total leicht nur komme ich mal wieder nicht drauf, naja nach 10h Programmieren muss mal wieder eine Pause sein.

Gruß
Andyh

Die Idee mit dem Parser wahr echt gut.
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 1. August 2008, 19:37

``h.feed(urllib.urlopen("http://cnc4all.de").read())`` :?:

Aber ich würde ja HTMLParser nicht verwenden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Freitag 1. August 2008, 20:15

Hallo

Warum?
Muss ja einen Grund haben

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 1. August 2008, 20:19

Andyh hat geschrieben:Warum?
Muss ja einen Grund haben
Weil HTMLParser Schrott nicht so besonders gut parsen kann.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten