ich würde gern einen Webcrawler für DeviantArt schreiben. Diesen möchte ich mit einem oder mehreren Nutzernamen von DeviantArt füttern und der Crawler soll mir dann die entsprechenden Nutzergallerien automatisch herunterladen.
Dabei möchte ich Metainformationen wie Nutzername des Künstlers, Lizenz, Titel, Original-URL etc. direkt in die IPTC Daten (und evtl. ins XMP-Format) speichern.
Leider hab ich aber einige technische Hürden vor mir, zu denen ich über alle Tipps, Anregungen oder Infos froh bin:
- DeviantArt bietet keine API o.ä., nicht mal RSS. Bleibt also nur die Option des HTML Parsings, vermutlich werde ich dazu BeautifulSoup oder lxml nutzen.
- Zur Frage, wie man einen Webcrawler aufbaut, habe ich nur eine recht spärliche Infografik auf Wikipedia sowie ein ganz brauchbar scheinendes Tutorial. Trotzdem bin ich für Tipps und Infos dankbar, wie man da grundsätzlich rangeht - vor allem zur Frage, wie ich Sicherheitsprobleme verhindere. Ich möchte auf keinen Fall durch schlechte Programmierung einen DoS Angriff o.ä. starten und will unbedingt vermeiden, dass DeviantArt mich sperrt.
- Damit weder mein Programm noch meine IP gesperrt werden und weder mein PC noch meine Internetverbindung überlastet wird, rechne ich damit, dass Dinge wie Shedulding, Threads und evtl. Hintergrundprozesse erforderlich sein werden. Leider habe ich hier keinerlei Erfahrung. Threads hatte ich mal in Java, aber so richtig bin ich nie durchgestiegen (besonders bzgl. Synchronisations- und Sicherheitsprobleme). Gibt es zu solchen Themen gute Anleitungen?
- Um vollen Zugriff auf die Daten zu bekommen, muss ich mich ggf. einloggen. Ich nehme an, dass geht das über urllib2 und POST Requests läuft. Gibts dazu einfache Tutorials bzw. evtl. sogar Vorlagen?
- Ich bin mir noch nicht so schlüssig darüber, wie ich eigentlich vermeide, meine Festplatte gänzlich zu zu müllen. Wie würdet ihr das angehen? Ein Fenster mit Vorschaubildern, aus denen ich die Dateien auswähle, die ich laden möchte? Oder einmal gelöschte Dateien nicht erneut herunterladen? Wie würde das funktionieren?
- Die Dateien werden nach dem Download verschoben und umbenannt (ggf. auch außerhalb der Kontrolle meines Programmes, z.B. mit Hilfe anderer Programme). Im Zweifelsfall könnten Sie sogar gelöscht werden. Wie stelle ich dennoch sicher, dass mein Programm sich heruntergeladende Dateien merkt und nicht erneut läd, wenn ich es ein paar Tage später nochmal laufen lasse (außer ich möchte z.B. gelöschte Daten explizit neu laden)? Muss ich eine Datenbank dazu anlegen?
Ich beginne mich gerade zu fragen, ob es für ein solches Projekt nicht sinnvoller ist, Bibliotheken wie PySide zu nutzen... Was meint ihr?
Danke schön
Gruß, Micha