Webcrawler zum Suchen und Herunterladen auf DeviantArt

Du hast eine Idee für ein Projekt?
Antworten
Benutzeravatar
Foobar
User
Beiträge: 8
Registriert: Sonntag 2. September 2012, 10:02
Wohnort: Hessen

Hallöle,

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:
  1. DeviantArt bietet keine API o.ä., nicht mal RSS. Bleibt also nur die Option des HTML Parsings, vermutlich werde ich dazu BeautifulSoup oder lxml nutzen.
  2. 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.
  3. 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?
  4. 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?
  5. 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?
  6. 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?
Das ist so mein aktueller Stand. Für jede noch so kleine Idee, Anregung oder Info bin ich sehr dankbar!
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
seishin
User
Beiträge: 87
Registriert: Montag 19. Dezember 2011, 16:42

Wie wäre es mit der API: http://www.deviantart.com/developers/

Gruß
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

1. DeviantArt nutzt JavaScript, also brauchst du einen derartigen Parser + Kenntnisse.
2. Größtenteils über URLs. Z.B. Standard: deviantart.com/traditional/ Anzeigeoptionen: ?thumb_mode=1&view_mode=0
3. Je nachdem wie schnell du die Elemente scrapen möchtest, kannst du Threads/Processe nutzen oder eben nicht.
4. Wenn du dich einloggst, musst du auch eingeloggt bleiben -> Cookies. Ich nutze "mechanize" und "cookielib", jedoch unterstützt "mechanize" keine JS. Ggf. tuts "Selenium".
5. Wenn du etwas angezeigt bekommst, wurde es bereits runtergeladen. Würde ich direkt im Programm integrieren, was du downloaden möchtest und was nicht. Z.B. aus der Kategorie "Natur" die Beiträge/Bilder von dem jeweiligen Tag/Monat oder sonstige Kriterien, die du parsen und herausfinden musst.
6. Dictionary. Jedoch mit den Original Downloadnamen/URL. Beim Download soll das Programm einfach checken, ob das jeweilige Bild bereits gedownloaded wurde. Wenn du aber das Bild nochmal brauchst, musst du die dem Programm iwie mitteilen.
Antworten