Vipergirls/IMX Spider

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.

Download

📥 vipergirls