・ J'utilise Scrapy parce que je voulais l'utiliser pour le moment. ・ À ce niveau, il est certainement préférable d'utiliser Beautiful soup plutôt que Scrapy.
・ L'image à télécharger est cette page. Téléchargez toutes les images de Trump à la destination du lien.
$ pip install scrapy
...
..
.
$ scrapy version #Vérifier la version
Scrapy 1.8.0
2-1.
$ scrapy startproject download_images
Le répertoire est terminé.
$ 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
Décommentez DOWNLOAD_DELAY
dans settings.py et définissez l'intervalle de transmission de la demande (unité: secondes).
Si l'intervalle de requête est court, cela ressemblera à une attaque Dos, alors assurez-vous de le définir.
(Certains sites seront bloqués.)
settings.py
...
..
.
DOWNLOAD_DELAY = 3
.
..
...
Décommentez simplement le code qui commence par HTTPCACHE_
.
Élimine les tracas liés à l'accès répété à la même page pendant les essais et les erreurs.
settings.py
.
..
...
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0
HTTPCACHE_DIR = 'httpcache'
HTTPCACHE_IGNORE_HTTP_CODES = []
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
Créer un modèle
$ scrapy genspider download_images_spider www.irasutoya.com
Le répertoire d'exécution de la commande est
download_images #← ici
├── download_images
│ ├── ...
│ ├── ..
│ ├── .
│ └── spiders
│ ├── __init__.py
│ └── __pycache__
└── scrapy.cfg
Ensuite, le répertoire des araignées ressemble à ceci
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', #Spade (nombre)
'https://www.irasutoya.com/2017/05/facecardspade.html', #Spade (carte illustrée)
'https://www.irasutoya.com/2010/05/numbercardheart.html', #Coeur (nombre)
'https://www.irasutoya.com/2017/05/facecardheart.html', #Coeur (carte illustrée)
'https://www.irasutoya.com/2010/05/numbercarddiamond.html', #Diamant (nombre)
'https://www.irasutoya.com/2017/05/facecarddiamond.html', #Diamant (carte illustrée)
'https://www.irasutoya.com/2010/05/numbercardclub.html', #Club (numéro)
'https://www.irasutoya.com/2017/05/facecardclub.html', #Club (carte illustrée)
'https://www.irasutoya.com/2017/05/cardjoker.html', #Joker
'https://www.irasutoya.com/2017/05/cardback.html', #Face arrière
]
dest_dir = '/Users/~~~/images' #Télécharger le répertoire de destination
def parse(self, response):
#Selon la page Web, vous devez réécrire le sélecteur CSS vers celui qui convient.
for image in response.css('div.separator img'):
#URL du fichier à télécharger
image_url = image.css('::attr(src)').extract_first().strip()
#Nom de fichier de l'image à télécharger
file_name = image_url[image_url.rfind('/') + 1:]
#Si la destination de téléchargement de l'image n'existe pas, créez-la
if not os.path.exists(self.dest_dir):
os.mkdir(self.dest_dir)
#Télécharger
urllib.request.urlretrieve(image_url, os.path.join(self.dest_dir, file_name))
time.sleep(1) #L'intervalle de téléchargement est de 1 seconde
Vous avez téléchargé toutes les images de Trump!
Recommended Posts