[PYTHON] Télécharger des images de «Irasutoya» à l'aide de Scrapy

introduction

・ 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.

1. Installez scrapy

$ pip install scrapy
...
..
.
$ scrapy version #Vérifier la version
Scrapy 1.8.0

2. Créez un projet

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

2-2. Définition de l'intervalle de transmission des demandes

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
.
..
...

2-3. Activez le cache.

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'

3. Téléchargez l'image

3-1. Créer une araignée

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

3-3. Modifier le fichier modèle créé

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! image.png

Recommended Posts

Télécharger des images de «Irasutoya» à l'aide de Scrapy
Télécharger des images à l'aide de demandes
Prédiction géolocalisée à partir d'images à l'aide de DNN
Utilisez boto pour télécharger le fichier depuis S3.
Télécharger des images à partir de la liste d'URL en Python
Téléchargez des images de profil (icônes) pour tout le monde depuis Slack
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
Télécharger en masse des images à partir d'une URL spécifique avec python
Télécharger en masse des images à partir d'une URL de site spécifique avec python
Extraire des caractères d'images à l'aide de l'API de reconnaissance de caractères de docomo
Collectez des images à l'aide d'icrawler
Rechercher des illustrations de cartes à partir d'images à l'aide de la correspondance des points caractéristiques
Compilez Tesseract pour Tess4J pour transcrire des images à l'aide de CentOS
Aplatir à l'aide du rendement Python de
Télécharger automatiquement des images avec grattage
Enregistrer des images à l'aide de requêtes python3
Grattage immédiat des images google!
Script lors de l'exécution de Scrapy à partir d'un script
Catégoriser les images de chats à l'aide de ChainerCV
Télécharger des vidéos de YouTube (youtube-dl)
Télécharger Excel en utilisant Spring MVC
Téléchargement par lots d'images à partir d'une URL spécifique avec la version modifiée de python