Schnelle Datenverarbeitung (Webcrawler)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jonso
User
Beiträge: 8
Registriert: Montag 23. August 2010, 15:00

Hallo,
ich bin derzeit dabei einen Webcrawler in Python zu schreiben.
Das Grundgerüst ist fertig und ich gehe langsam zur optimierung über.
Leider weiß ich nicht, wie ich die Daten am besten sammeln sollte.
Zu speichern sind die besuchten und gefundenen, aber noch nicht
besuchten urls. Das Problem ist, das die Menge der abzugleichenden
Daten ständig wächst.

Deshalb bin ich auf der Suche nach der
effizientesten Methode Daten miteinander zu vergleichen, um
die selbe seite nicht zweimal aufzurufen und der, mit der ich
Daten schnellstmöglich speichern und wieder abrufen kann.
Das heißt, dass ich keine weiteren Funktionen, bis auf die oben
genannten bräuchte, bis auf das der typ in dem die Daten
die ich speichern und wieder abrufen möchte iterierbar sein sollte.

Ich habe mal gelesen, dass dictionarys relativ schnell sein sollen.
Gilt das nur, wenn ich ein Key/Value Paar suche, oder auch wenn
ich nur mehrere Keys habe?
Ansonsten habe ich noch darüber nachgedacht, ein set-, deque-
oder iteratorobjekt zu benutzen.
In dem Objekt müssen ausschließlich urls als string gespeichert werden.

Würde mich sehr über Tipps freuen,
Jonso
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Eine URL ist ja per definitionem eindeutig - das ist ja geradezu prädestiniert als Schlüssel für ein Dictionary ;-)

Eine bessere Zugriffszeit als bei einem Dictionary kannst Du nicht erreichen, da diese O(1) ist.

Da Du das alles aber vermutlich nicht im Speicher halten willst, könntest Du ja mal einen KV-Store a la Reddis in Betracht ziehen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Eine URL ist ja per definitionem eindeutig - das ist ja geradezu prädestiniert als Schlüssel für ein Dictionary ;-)
In der Realität eher weniger:
Können durchaus alle auf den gleichen Inhalt verweisen und das ist jetzt auch nicht sonderlich unüblich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

@Leonidas: Ja und? Im Regelfall verweist ja nur eine URL direkt auf die Inhalte, während der Rest lediglich weiterleitet. Und diese Weiterleitungen kann der Crawler ja erkennen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Leonidas hat geschrieben:Können durchaus alle auf den gleichen Inhalt verweisen und das ist jetzt auch nicht sonderlich unüblich.
Das ist aber dann ein Problem des Seitenbetreibers. Im Endeffekt zersplittert damit der Wert einer Seite für Suchmaschinen. Wenn man sich als Webmaster so etwas aufgebaut hat, dann sollte man ganz stark über ein permanentes Redirect auf eine kanonische Seite nachdenken.

Dem Abrufer bleibt gar nichts anderes übrig, als diese Seiten individuell zu betrachten.
Antworten