Un grattoir d'image Python n'est pas seulement un outil pour affiner vos compétences en programmation. Vous pouvez également l'utiliser pour sourcer des images pour un projet d'apprentissage automatique ou générer des vignettes de site. Bien qu'il puisse exister d'autres façons de faire des choses similaires, rien ne peut battre le contrôle que vous avez en utilisant des outils que vous construisez vous-même.

Apprenez à récupérer des images de n'importe quel site Web à l'aide de Python et de la bibliothèque BeautifulSoup.

Le grattage d'images est-il légal ?

Comme grattage Web plus généralisé, le grattage d'images est une méthode de téléchargement de contenu de site Web. Ce n'est pas illégal, mais il y a quelques règles et bonnes pratiques à suivre. Tout d'abord, vous devez éviter de gratter un site Web s'il indique explicitement qu'il ne le souhaite pas. Vous pouvez le découvrir en cherchant un /robots.txt fichier sur le site cible.

La plupart des sites Web autorisent l'exploration du Web car ils souhaitent que les moteurs de recherche indexent leur contenu. Vous pouvez gratter ces sites Web car leurs images sont accessibles au public.

instagram viewer

Cependant, ce n'est pas parce que vous pouvez télécharger une image que vous pouvez l'utiliser comme si c'était la vôtre. La plupart des sites Web accordent une licence à leurs images pour vous empêcher de les republier ou de les réutiliser d'une autre manière. Supposez toujours que vous ne pouvez pas réutiliser les images à moins qu'il n'y ait une exemption spécifique.

Configuration du paquet Python

Vous devrez installer quelques packages avant de commencer. Si Python n'est pas installé sur votre ordinateur, visitez le site officiel python.org site Web pour télécharger et installer la dernière version.

Ensuite, ouvrez votre terminal dans votre dossier de projet et activer un environnement virtuel Python pour isoler vos dépendances.

Enfin, installez le demandes et BelleSoupe paquets utilisant pip :

pip installer les requêtes bs4

Grattage d'images avec Python

Pour ce didacticiel de grattage d'images, vous utiliserez le demandes bibliothèque pour récupérer une page Web contenant les images cibles. Vous transmettrez ensuite la réponse de ce site Web à BelleSoupe pour récupérer toutes les adresses de liens d'image à partir de image Mots clés. Vous écrirez ensuite chaque fichier image dans un dossier pour télécharger les images.

Comment récupérer des URL d'image avec BeautifulSoup de Python

Maintenant, allez-y et créez un fichier Python dans le dossier racine de votre projet. Assurez-vous d'ajouter le .py extension au nom de fichier.

Chaque extrait de code de ce didacticiel est la suite du précédent.

Ouvrez le fichier Python avec tout bon éditeur de code et utilisez le code suivant pour demander une page Web :

importer demandes
URL = "URL du site d'images" # Remplacez ceci par l'URL du site Web
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
imprimer (getURL.status_code)

Si le programme ci-dessus génère un code de réponse 200, la requête a réussi. Sinon, vous voudrez peut-être vous assurer que votre connexion réseau est stable. Assurez-vous également que vous avez fourni une URL valide.

Utilisez maintenant BelleSoupe de lire le contenu de la page Web à l'aide du analyseur_html:

de bs4 importer BelleSoupe

soupe = BeautifulSoup (getURL.text, 'html.parser')

images = soupe.find_all('img')
impression (images)

Ce code crée une liste d'objets, chacun représentant une image de la page Web. Cependant, ce dont vous avez besoin à partir de ces données, c'est le texte de chaque image. src attribut.

Pour extraire la source de chaque image étiquette:

imageSources = []

pour image dans images:
imageSources.append (image.get('src'))

imprimer (imageSources)

Réexécutez votre code, et les adresses des images devraient maintenant apparaître dans une nouvelle liste (ImageSources). Vous avez extrait avec succès chaque source d'image de la page Web cible.

Comment enregistrer les images avec Python

Tout d'abord, créez un dossier de destination de téléchargement dans le répertoire racine de votre projet et nommez-le images.

Pour que Python télécharge avec succès les images, leurs chemins doivent être des URL absolues complètes. En d'autres termes, ils doivent inclure le " http://" ou " https://" préfixe, plus le domaine complet du site Web. Si la page Web fait référence à ses images à l'aide d'URL relatives, vous devrez les convertir en URL absolues.

Dans le cas le plus simple, lorsque l'URL est absolue, le lancement du téléchargement consiste simplement à demander chaque image à partir des sources extraites précédemment :

pour image dans Sources d'images :
webs = demandes.get (image)
ouvrir('images/' + image.split('/')[-1], 'wb').write (webs.contenu)

La image.split('/')[-1] Le mot-clé divise le lien de l'image à chaque barre oblique (/). Ensuite, il récupère le nom du fichier image (y compris toute extension) à partir du dernier élément.

Gardez à l'esprit que, dans de rares cas, les noms de fichiers d'image peuvent entrer en conflit, ce qui entraîne des écrasements de téléchargement. N'hésitez pas à explorer les solutions à ce problème en tant qu'extension de cet exemple.

Les URL absolues peuvent devenir assez compliquées, avec de nombreux cas extrêmes à couvrir. Heureusement, il existe une méthode utile dans le demandes.compat paquet appelé urljoin. Cette méthode renvoie une URL complète, à partir d'une URL de base et d'une URL qui peut être relative. Il vous permet de résoudre les valeurs que vous trouverez dans href et src les attributs.

Le code final ressemble à ceci :

de bs4 importer BelleSoupe
URL = "URL du site d'images" # Remplacez ceci par l'URL du site Web
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
soupe = BeautifulSoup (getURL.text, 'html.parser')

images = soupe.find_all('img')
URL résolues = []

pour image dans images:
src = image.get('src')
URL résolues.append (requests.compat.urljoin (URL, src))

pour image dans URL résolues :
webs = demandes.get (image)
ouvrir('images/' + image.split('/')[-1], 'wb').write (webs.contenu)

Ne manquez jamais de données d'image

De nombreux projets de reconnaissance d'images se heurtent à un mur de briques en raison d'une quantité insuffisante d'images pour former un modèle. Mais vous pouvez toujours récupérer des images de sites Web pour dynamiser votre référentiel de données. Et heureusement, Python est un puissant grattoir d'images que vous pouvez utiliser en continu sans craindre d'être hors de prix.

Si vous souhaitez récupérer d'autres types de données sur le Web, vous souhaiterez peut-être découvrir comment utiliser Python pour le grattage Web général.