[PYTHON] Obtenez l'image de "Suzu Hirose" par recherche d'images Google.

introduction

Cette fois, j'ai essayé de gratter l'image de "Suzu Hirose" en utilisant la fonction de recherche d'images de Google. Je pense que vous aurez besoin de certaines données d'image lorsque vous effectuez vous-même le traitement d'image. J'espère que vous vous référerez à cet article comme l'un des moyens d'acquérir des images.

la mise en oeuvre

Cette fois, quand j'ai eu une image de la recherche d'images de Google, j'ai dû faire défiler pour l'obtenir. Utilisez du sélénium pour faire défiler car cela ne peut pas être fait avec Beautiful Soup.

Tout d'abord, importez tout.


from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
import requests
import base64
import os
import re
import shutil

Un pilote chrome est requis lors de l'utilisation du sélénium. Obtenez-le avec ChromeDriver --WebDriver pour Chrome .


#Maintenant, ouvrez Google
driver = webdriver.Chrome("C:\\Users\\chromedriver")#Spécifiez le chemin où se trouve le pilote.
driver.get("https://www.google.com/")
sleep(2)

Spécifie l'emplacement de la barre de recherche. À ce stade, utilisez la fonction de vérification de Chrome ouvert dans le sélénium pour identifier l'emplacement. Je l'ai vérifié avec Chrome que j'avais téléchargé à l'origine, et j'ai eu une erreur parce que je le faisais sur cette base. En conséquence, il a fallu environ une heure pour découvrir la cause de l'erreur. .. .. .. .. ..

search_bar = driver.find_element_by_name("q")
#Saisissez des mots clés dans la barre de recherche
search_bar.send_keys("Étain Hirose")
search_bar.submit()
sleep(2)

Si cela se passe bien, vous pouvez effectuer une recherche en tapant Hirose Tin dans la barre de recherche. 2020-11-03.png

Passez ensuite à la liste d'images.


#Passer à l'écran d'image
img_btn = driver.find_element_by_xpath('//a[@class="q qs"]')
img_btn.click()

Je vais passer à la liste d'images ci-dessous, donc j'aimerais obtenir les images ici. 2020-11-03 (1).png

Tout d'abord, récupérez l'URL de l'image. Cette fois, lorsque j'obtiens l'URL de l'image, j'utilise BeautifulSoup pour trouver la balise img et l'obtenir à partir de là. La plupart des URL d'image sont stockées dans le data-src de la balise img, mais parfois il y en a qui n'ont pas de data-src, donc à ce moment-là je reçois de src.

#Faites défiler l'écran.
try:
    #L'URL de l'image y est dupliquée.
    all_images = []
    #Faites défiler 5 fois
    for i in range(5):
        #Je fais défiler l'écran ici.
        driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
        #Je le charge dans Beautiful Soup ici.
        soup = BeautifulSoup(driver.page_source , "html.parser")
        
        #all_Ajouter l'URL de l'image aux images
        for image in soup.find_all("img"):
            try:
                url = image.get("data-src")

                if url is None:
                    url = image.get("src")

                if url is not None:
                    all_images.append(url)
            except:
                print("Une erreur s'est produite lors de l'obtention de l'URL de l'image.")
                print()
        
        sleep(2)           

except Exception:
    print("Une erreur s'est produite lors du défilement de l'écran.")
    error_flag = True

Et comme indiqué dans le code, l'URL de l'image est stockée dans all_images, mais l'URL est dupliquée ici. Par conséquent, nous supprimerons les doublons pour les rendre uniques.

all_images = list(dict.fromkeys(all_images))

Certaines de ces URL ont vu leurs données modifiées au format base64 en plus de l'URL https. Par conséquent, il est nécessaire d'utiliser deux modèles pour télécharger. (1) Téléchargement depuis HTTP (2) Téléchargement depuis base64. Cette fois, j'ai créé une fonction pour correspondre à chaque motif.

#Enregistrez l'image transmise par URL http.
def img_url_download(url , file_path):
    response = requests.get(url , stream = True)
    
    #Enregistrer dans un fichier,
    with open(file_path , 'wb') as file:
        shutil.copyfileobj(response.raw , file)


#Fonction pour enregistrer base64
#Dans l'url"data:image/jpeg;base64,"Mettez dans celui avec le retiré.
def base64_download(url , file_path):
    img = base64.b64decode(url.encode())
    with open(file_path , "wb") as f:
        f.write(img)

Après avoir défini la fonction, enregistrez l'image dans le dossier à la fin.

#Mettez les données d'image dans le fichier! !!

#Chemin du fichier
path = r"C:\Users\suzu_img_files"#Veuillez spécifier le chemin du dossier pour enregistrer l'image

#base64 est le premier"data:image/jpeg;base64,"Il y en a, alors essayez de le supprimer.
base64_string = "data:image/jpeg;base64,"

for index , image_url in enumerate(all_images):
    filename = "suzu_" + str(index) + ".jpg "
    file_path = os.path.join(path , filename)
    
    #L'instruction if se branche selon qu'elle est en base64 ou non.
    if len(re.findall(base64_string , image_url)) > 0:
        url = url.replace(base64_string , "")#Suppression du préfixe de l'url.
        base64_download(url , file_path)
    
    else:
        img_url_download(image_url , file_path)

Si tout se passe bien, l'image sera enregistrée comme indiqué ci-dessous. 2020-11-03 (3).png

Sommaire

Comment était-ce? N'est-il pas possible d'élargir la gamme de grattage en utilisant du sélénium? Cette fois, c'était M. Suzu Hirose, mais je pense que c'est bien de gratter avec les gens, les animaux, les bâtiments, etc. que vous aimez! De plus, cette fois, je l'ai implémenté à partir de l'écran de recherche de Google car j'ai aussi pratiqué le sélénium, mais si vous voulez juste obtenir une image, il est plus rapide de l'implémenter avec la première URL comme URL de la liste d'images de M. Hirose. n'est-ce pas,,,


Matériel de référence
[Introduction à Python] Grattage de l'image de Kanna Hashimoto. Exemples de ce que Python peut faire: Télécharger des images. Exercices après Progate | Analyse des données avec Python. Belle soupe ChromeDriver - WebDriver for Chrome Scrapage Web basé sur Python (BeautifulSoup, Selenium, Requests) >

Recommended Posts

Obtenez l'image de "Suzu Hirose" par recherche d'images Google.
Obtenez des images Google Recherche d'images dans leur taille d'origine
Rechercher par la valeur de l'instance dans la liste
Écoutez de la musique en accédant à l'API non officielle de Google Play Music
Obtenez le nombre de chiffres
Juger la victoire ou la défaite de Shadova par reconnaissance d'image
Traitement linguistique 100 knocks-29: Obtenez l'URL de l'image du drapeau
Trouver le diamètre du graphique par recherche de priorité de largeur (mémoire Python)
Google recherche la chaîne sur la dernière ligne du fichier en Python
Obtenez le nombre de vues de Qiita
Comment obtenir la valeur en pixels du point à partir de l'image satellite en spécifiant la latitude et la longitude
Obtenir les attributs d'un objet
Obtenez le premier élément du jeu de requêtes
Obtenez le nombre d'abonnés Youtube
[Python] Explorez les caractéristiques des titres des meilleurs sites dans les résultats de recherche Google
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
Le client API pour le plan du site dans la console de recherche Google est dans les webmasters au lieu de searchconsole
Lisez l'image du graphique avec OpenCV et obtenez les coordonnées du point final du graphique
Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).
Obtenez la liste des colonnes et la liste des données de CASTable
Obtenez des images par recherche par mot-clé sur Twitter
Obtenez les débats parlementaires via l'API
Échelle de gris par matrice-Reinventor of Python image processing-
Enregistrer l'image du chien à partir de la recherche d'images Google
Pandas du débutant, par le débutant, pour le débutant [Python]
Obtenez la valeur de la couche intermédiaire de NN
Analyse d'image de microtomographie à rayons X par Python
Obtenez des vacances avec l'API Google Agenda
À la recherche du FizzBuzz le plus rapide en Python
Collection d'images à l'aide de l'API Google Custom Search
Obtenez le dernier jour du mois spécifié
[Python] Récupère le code de caractère du fichier
Obtenez le nom de fichier du répertoire (glob)
[PowerShell] Obtenez la lecture de la chaîne de caractères
Obtenez la taille d'un fichier image sur le Web (Python3, aucune bibliothèque supplémentaire requise)
Enregistrez automatiquement les images de vos personnages préférés à partir de la recherche d'images Google avec Python
Obtenir l'heure Unix de l'heure spécifiée par JST quel que soit le fuseau horaire du serveur avec Python
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
[Python] Téléchargez l'image d'origine à partir de la recherche d'images Google
Récupérer le contenu de git diff depuis python
Vérifiez le fonctionnement d'OpenCV3 installé par Anaconda
Extraire la couleur dominante de l'image par clustering k-means
[Python] Obtenir / modifier l'étiquette d'échelle de la figure
J'ai essayé d'obtenir une image en grattant
[Python] Obtenez les principaux sujets de Yahoo News
Récupérer l'appelant d'une fonction en Python
Trier les éléments d'un tableau en spécifiant des conditions
J'ai essayé de corriger la forme trapézoïdale de l'image
Obtenez une image panoramique sur Google Street View
Traitement d'image? L'histoire du démarrage de Python pour
[Python] Obtenez la dernière date de mise à jour du site Web
Juge Yosakoi Naruko par classification d'image de Tensorflow.
Résumé super (concis) de la classification des images par ArcFace
[Chez Coder] Résoudre le problème de la dichotomie
Minimisez le nombre de polissages en optimisant la combinaison