Auf dem
Vipergirls Image Board findet man Threads mit Bildergalerien.
Die hochwertigen Sammlungen sind bei
IMX gehostet. Der manuelle Download
würde Jahre dauern. Das Board bietet einen Downloader an, aber dort werden die Bilder so benannt
wie sie bei IMX abgelegt sind, aber nicht mit dem eigentlichen Namen (in der Bild Überschrift).
Außerdem hat man mit diesem Skript die volle Kontrolle über den Download, kann resumen und
überprüfen, was das Skript macht... und es läuft Plattform unabhängig.
Beispiele für IMX Bildergalerien:
Auf der Vipergirls Webseite werden auch andere Bilder Hoster benutzt, aber die Bilder waren es mir
bisher nicht wert gedownloadet zu werden (weder Bildauflösung noch Darbietung waren für mich
interessant). Fall jemand doch eine interessante & größere Sammlung mit hochauflösenden
Bilder gefunden hat, dann kann er mir gerne einen Link schicken, vllt schreibe ich einen
zweiten Spider für diesen Hoster.
Dieser Spider läuft, nur wenn die Bilder bei IMX gehostet sind!
Nachdem Python und Scrapy installiert wurden, verschiebt man den Spider vipergirls.py
(download unten) in den Projektordner wo Scrapy installiert wurde. Hier eine CMD/Shell
starten und die virtuelle Umgebung aktivieren. Windows
CMD:>venvscrapy\Scripts\activate
bzw Linux:
source venvscrapy/bin/activate
Spider Benutzung:
python vipergirls.py --thread-url="https://vipergirls.to/threads/6845122-GirlsDelta" --start-post=1 --end-post=200 --description_lines 1
Die einzige Pflichtangabe ist die URL zur Bildersammlung:
--thread-url=
Der optionale Parameter
--start-post gibt an mit welchem Posting im Thread begonnen werden soll.
Der optionale Parameter
--end-post sagt welches Posting als letztes gedownloadet werden soll.
Mit beiden Parametern kann man den Download gut auf virtuelle Maschinen verteilen, vorausgesetzt
diese haben eine andere IP (zB aus einem VPN)
Der optionale Parameter
--description_lines gibt an wie viel erste Text Zeilen eines Postings
zur Generierung des Ordnernamens herangezogen werden sollen. Der Standardwert ist 1, aber
manche Bildersammlungen schreiben den Namen der Darstellerin erst in der zweiten oder dritten
Zeile des Postings.
Die Bilder werden im frisch erstellten Unterordner
downloads abgelegt. Jedes Posting in
einem separaten Unterordner. Der Ordnername endet auf (#PPPP, III images), wobei #PPPP die
Posting Nummer ist und III die Anzahl der gefundenen Bilderlinks im Posting sind.
Probleme:
1. Der Speicherplatz ist ratzfatz voll. Das Skript nur ausführen wenn im Dateisystem viele
Gigabytes frei sind.
2. Unterbrechungen. Hibernation oder Suspend sollten funktionieren. Unter Linux kann man das
Skript soft mit Ctrl+z unterbrechen und mit
fg fortsetzen. Man kann das Skript auch
hart mit Ctrl+c unterbrechen. Beim Fortsetzen sollte man den
--start-post Parameter auf das
Posting setzen wo unterbrochen wurde, damit Scrapy nicht alle Bilder erneut durchgehen muss.
Der Name des Bildes steht auf der letzten IMX Seite in der Überschrift, Scrapy kann also
anhand der IMX URL nicht wissen wie das Bild am Ende auf der Platte heißen soll und geht in
folge dessen jeden Link beginnend ab
--start-post erneut durch und das dauert fast genauso
lange wie alle Bilder neu herunterzuladen.
3. IMX scheint eine Boterkennung zu haben. Wenn man zu schnell downloadet, dann werden nicht
mehr alle Bilder geladen. Der Download Ordner der Bilder endet zB auf (#0293, 160 images),
wobei 293 die Posting-Nummer ist und 160 die Anzahl der Bilder. Wenn man an den custom_settings
am Anfang des Skriptes herumschraubt sollte man schauen, ob wirklich alle 160 Bilder angekommen
sind. Bei den jetzigen Einstellungen hatte ich bisher keine Probleme.
# Es wird nur eine Datei zur gleichen Zeit geladen
CONCURRENT_REQUESTS_PER_DOMAIN: 1
# Verzögerung wird randomisiert und die Verzögerung ist 1 Sekunde: (0,5...1,5)*DOWNLOAD_DELAY
RANDOMIZE_DOWNLOAD_DELAY: True
DOWNLOAD_DELAY: 1
# Wenn IMX langsam antwortet oder
503 Service Unavailable schickt, dann wird die
nächste Anfrage mit noch größerer Verzögerung losgeschickt (bis zu 10 Sekunden).
AUTOTHROTTLE_START_DELAY: 1
AUTOTHROTTLE_MAX_DELAY: 10
AUTOTHROTTLE_ENABLED: True
Aber wenn man eh ein VPN am Start hat, kann man die Aufgabe besser in ein paar VMs
parallelisieren anstatt an den Settings herumzuschrauben.
Wenn ein Ordner weniger Bilder enthält als im Ordnernamen angegeben kann man das Skript
speziell für dieses Posting nochmal laufen lassen.
--start-post und
--end-post
auf die Posting Nummer hinter dem # im Ordnernamen setzen.