[PYTHON] Laden Sie Bilder von "Irasutoya" mit Scrapy herunter

Einführung

・ Ich benutze Scrapy, weil ich es vorerst benutzen wollte. ・ Auf dieser Ebene ist es definitiv besser, schöne Suppe als Scrapy zu verwenden.

Das herunterzuladende Bild ist diese Seite. Laden Sie alle Bilder von Trump am Link-Ziel herunter.

1. Installieren Sie Scrapy

$ pip install scrapy
...
..
.
$ scrapy version #Version prüfen
Scrapy 1.8.0

2. Erstellen Sie ein Projekt

2-1.

$ scrapy startproject download_images

Das Verzeichnis ist fertig.

$ cd download_images
download_images $ tree
.
├── download_images
│   ├── __init__.py
│   ├── __pycache__
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       ├── __init__.py
│       └── __pycache__
└── scrapy.cfg

2-2. Einstellen des Anforderungsübertragungsintervalls

Kommentieren Sie DOWNLOAD_DELAY in settings.py aus und legen Sie das Anforderungsübertragungsintervall (Einheit: Sekunden) fest. Wenn das Anforderungsintervall kurz ist, sieht es wie ein Dos-Angriff aus. Stellen Sie ihn daher unbedingt ein. (Einige Websites werden blockiert.)

settings.py


...
..
.
DOWNLOAD_DELAY = 3
.
..
...

2-3. Aktivieren Sie den Cache.

Kommentieren Sie einfach den Code aus, der mit "HTTPCACHE_" beginnt. Beseitigt den Aufwand, bei Versuchen und Fehlern wiederholt auf dieselbe Seite zuzugreifen.

settings.py


.
..
...
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0
HTTPCACHE_DIR = 'httpcache'
HTTPCACHE_IGNORE_HTTP_CODES = []
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

3. Laden Sie das Bild herunter

3-1. Spinne erstellen

Erstellen Sie eine Vorlage

$ scrapy genspider download_images_spider www.irasutoya.com

Das Befehlsausführungsverzeichnis lautet

download_images #← hier
├── download_images
│   ├── ...
│   ├── ..
│   ├── .
│   └── spiders
│       ├── __init__.py
│       └── __pycache__
└── scrapy.cfg

Dann sieht das Spinnenverzeichnis so aus

download_images
├── download_images
│   ├── ...
│   ├── ..
│   ├── .
│   └── spiders
│       ├── __init__.py
│       ├── __pycache__
│       │   └── __init__.cpython-37.pyc
│       └── download_images_spider.py
└── scrapy.cfg

3-3 Bearbeiten Sie die erstellte Vorlagendatei

download_images_spider.py


# -*- coding: utf-8 -*-
import os, scrapy, urllib
from download_images.items import DownloadImagesItem


class DownloadImagesSpiderSpider(scrapy.Spider):
    name = 'download_images_spider'
    allowed_domains = ['www.irasutoya.com']
    start_urls = [
        'https://www.irasutoya.com/2010/05/numbercardspade.html', #Spaten (Nummer)
        'https://www.irasutoya.com/2017/05/facecardspade.html', #Spaten (Bildkarte)

        'https://www.irasutoya.com/2010/05/numbercardheart.html', #Herz (Nummer)
        'https://www.irasutoya.com/2017/05/facecardheart.html', #Herz (Bildkarte)

        'https://www.irasutoya.com/2010/05/numbercarddiamond.html', #Diamant (Nummer)
        'https://www.irasutoya.com/2017/05/facecarddiamond.html', #Diamant (Bildkarte)

        'https://www.irasutoya.com/2010/05/numbercardclub.html', #Verein (Nummer)
        'https://www.irasutoya.com/2017/05/facecardclub.html', #Club (Bildkarte)

        'https://www.irasutoya.com/2017/05/cardjoker.html', #Joker

        'https://www.irasutoya.com/2017/05/cardback.html', #Rückseite
    ]
    dest_dir = '/Users/~~~/images' #Zielverzeichnis herunterladen

    def parse(self, response):
#Abhängig von der Webseite müssen Sie den CSS-Selektor auf den entsprechenden umschreiben.
        for image in response.css('div.separator img'):
            #URL der herunterzuladenden Datei
            image_url = image.css('::attr(src)').extract_first().strip()

            #Dateiname des herunterzuladenden Bildes
            file_name = image_url[image_url.rfind('/') + 1:]

            #Wenn das Ziel zum Herunterladen von Bildern nicht vorhanden ist, erstellen Sie es
            if not os.path.exists(self.dest_dir):
                os.mkdir(self.dest_dir)
            
            #herunterladen
            urllib.request.urlretrieve(image_url, os.path.join(self.dest_dir, file_name))

            time.sleep(1) #Das Download-Intervall beträgt 1 Sekunde

Sie haben alle Bilder von Trump heruntergeladen! image.png

Recommended Posts

Laden Sie Bilder von "Irasutoya" mit Scrapy herunter
Laden Sie Bilder mithilfe von Anfragen herunter
Geotag-Vorhersage aus Bildern mit DNN
Verwenden Sie boto, um die Datei von S3 herunterzuladen.
Laden Sie Bilder von der URL-Liste in Python herunter
Laden Sie Profilbilder (Symbole) für alle von Slack herunter
Laden Sie Bilder von der URL mit Pillow in Python 3
Massen-Download-Bilder von einer bestimmten URL mit Python
Massen-Download-Bilder von einer bestimmten Site-URL mit Python
Extrahieren Sie Zeichen aus Bildern mithilfe der Zeichenerkennungs-API von docomo
Sammeln Sie Bilder mit icrawler
Finden Sie Kartenillustrationen aus Bildern mithilfe der Feature-Point-Anpassung
Kompilieren Sie Tesseract für Tess4J, um Bilder mit CentOS zu transkribieren
Mit Python abflachen
Laden Sie Bilder automatisch mit Scraping herunter
Speichern Sie Bilder mit Python3-Anforderungen
Sofort von Google-Bildern abkratzen!
Skript beim Ausführen von Scrapy aus dem Skript
Kategorisieren Sie Katzenbilder mit ChainerCV
Laden Sie Videos von YouTube herunter (youtube-dl)
Laden Sie Excel mit Spring MVC herunter
Batch-Download-Bilder von einer bestimmten URL mit Python Modified-Version