・ 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.
$ pip install scrapy
...
..
.
$ scrapy version #Version prüfen
Scrapy 1.8.0
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
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
.
..
...
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'
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
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!
Recommended Posts