[Python] Téléchargez l'image d'origine à partir de la recherche d'images Google

introduction

Plus tôt, j'ai écrit comment télécharger des images Samne à partir de Google Image Search, Cette fois, il s'est avéré que si vous affichez l'image en détail (lorsque vous cliquez une fois sur le résultat de la recherche), le lien de l'image d'origine sera affiché sur la source de la page. Profitons de cette spécification et téléchargeons l'image originale (attention à ne pas la surcharger car Google est fort)

Flux de programme

** Recherche d'images Google sur Selenium   ↓ Après avoir affiché les détails de la première image, appuyez sur la touche curseur droite.   ↓ Obtenez le lien de l'image originale   ↓ Télécharger**

la mise en oeuvre

Si vous n'avez pas installé Selenium, requests, veuillez. ChromeDriver est défini dans le chemin d'exécution, alors réécrivez-le comme il convient (juste en dessous de l'instruction d'importation). Je ne l'ai pas remanié, donc c'est sale, mais je suis désolé.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
import requests
import re
import urllib.request
import os
from tqdm import tqdm
DRIVER_PATH = 'chromedriver.exe'

options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--disable-extensions')
options.add_argument('--proxy-server="direct://"')
options.add_argument('--proxy-bypass-list=*')
options.add_argument('--start-maximized')
#↓ Il est préférable de l'afficher pour pouvoir le gérer manuellement lorsque vous ne pouvez pas bien faire défiler
#options.add_argument('--headless')


def search():
    global driver, actions
    driver = webdriver.Chrome(executable_path=DRIVER_PATH,
                              chrome_options=options)
    actions = ActionChains(driver)
    url = "https://www.google.com/search?q=" + '+'.join(
        query.split()) + "&safe=off&hl=ja&source=lnms&tbm=isch&sa=X"
    driver.get(url)

    while not driver.find_elements_by_class_name("wXeWr.islib.nfEiy.mM5pbd"):
        time.sleep(.5)
    driver.find_element_by_class_name("wXeWr.islib.nfEiy.mM5pbd").click()


def getLinks():
    global srcs
    more = driver.find_element_by_class_name("mye4qd")
    end = driver.find_element_by_class_name("OuJzKb.Yu2Dnd")
    for i in range(100):
        actions.key_down(Keys.ARROW_RIGHT)
    cnt = 1
    while not (more.is_displayed() or end.is_displayed()):
        if cnt % 5 == 0:
            if len(
                    re.findall("imgurl=(.+?)&",
                               urllib.parse.unquote(
                                   driver.page_source))) > max_num + 5:
                break
        driver.execute_script(
            "window.scrollTo(0, document.body.scrollHeight);")
        actions.perform()
        time.sleep(1)
        cnt += 1

    if more.is_displayed(): more.click()
    while not end.is_displayed():
        if cnt % 5 == 0:
            if len(
                    re.findall("imgurl=(.+?)&",
                               urllib.parse.unquote(
                                   driver.page_source))) > max_num + 5:
                break
        driver.execute_script(
            "window.scrollTo(0, document.body.scrollHeight);")
        actions.perform()
        time.sleep(1)
        cnt += 1
    for _ in range(5):
        actions.perform()
        time.sleep(1)
    srcs = re.findall("imgurl=(.+?)&",
                      urllib.parse.unquote(driver.page_source))
    driver.close()


def download():
    filename = '_'.join(query.split())
    while True:
        if not os.path.exists(filename):
            os.mkdir(filename)
            break
        else:
            filename += "_"

    for i, src in enumerate(tqdm(srcs[:max_num])):
        ext = src[-4:] if src[-4:] in ('.jpg', '.png', '.gif') else '.png'
        with open(f"{filename}\\{filename}{i}{ext}", "wb") as f:
            try:
                f.write(requests.get(src).content)
            except:
                try:
                    with urllib.request.urlopen(src) as u:
                        f.write(u.read())
                except:
                    continue


if __name__ == "__main__":
    query = input("Search:  ")
    max_num = int(input("Combien allez-vous télécharger? (maximum)"))
    print("Searching...")
    search()
    print("Done.")
    print("Getting links...")
    getLinks()
    print("Done.")
    print("Now downloading...")
    download()
    print("Done.")

Cela prendra du temps.

enfin

Veuillez l'utiliser modérément.

Recommended Posts

[Python] Téléchargez l'image d'origine à partir de la recherche d'images Google
Enregistrer l'image du chien à partir de la recherche d'images Google
Obtenez des images Google Recherche d'images dans leur taille d'origine
Enregistrez automatiquement les images de vos personnages préférés à partir de la recherche d'images Google avec Python
Télécharger des images à partir de la liste d'URL en Python
Sortie CSV de la recherche Google avec [Python]! 【Facile】
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
Grattage immédiat des images google!
Appelez l'API Bing Image Search v5 depuis Python pour collecter des images
Télécharger des images de «Irasutoya» à l'aide de Scrapy
Téléchargez des fichiers Google Drive en Python
Utiliser de force Google Translate à partir de python
Extraire du texte d'images avec Python
Publier une image de Python sur Tumblr
Traitement d'image | prédire les espèces à partir d'images
Utiliser l'API Google Analytics de Python
Téléchargement par lots d'images à partir d'une URL spécifique avec la version modifiée de python
Téléchargez les n principales recherches d'images Google
Script Python qui collecte automatiquement des images typiques à l'aide de la recherche d'images Bing
Comment mettre à jour Google Sheets à partir de Python
Obtenez des images par recherche par mot-clé sur Twitter
Utiliser l'API Google Cloud Vision de Python
Acquisition d'images depuis une caméra avec Python + OpenCV
Télécharger Python
Collection d'images à l'aide de l'API Google Custom Search
Recherche homebrew à partir du nom du module python (ShellScript)
Télécharger des images sur Google Drive avec Python
[Python] (Line) Extraire les valeurs des images graphiques
Trouvez la position dans l'image d'origine à partir des coordonnées après conversion affine (Python + OpenCV)
Rechercher et télécharger automatiquement des vidéos YouTube avec Python
Traitement d'image à partir de zéro avec python (5) Transformation de Fourier
Télécharger des images à partir d'un fichier texte contenant l'URL
Traitement d'image à partir de zéro avec python (4) Extraction de contour
Téléchargez des images de profil (icônes) pour tout le monde depuis Slack
Grattage d'images ②-Obtenez des images de bing, yahoo, Flickr
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
Télécharger les données directement depuis l'URL de Drive (Google Colaboratory)
traitement d'image python
[Selenium] Si vous ne pouvez pas gratter la recherche d'images Google, je vais explorer et collecter uniquement les images Samne.
Je voulais collecter beaucoup d'images, j'ai donc essayé d'utiliser "google image download"
sql à sql
MeCab de Python
Comment récupérer des données d'image de Flickr avec Python
Faire une copie d'un fichier Google Drive à partir de Python
[Python] Spécifiez la plage de l'image en faisant glisser la souris
Obtenez l'image de "Suzu Hirose" par recherche d'images Google.
le téléchargement d'images google n'a pas fonctionné, donc l'assistance
Lire le code QR à partir du fichier image avec Python (Mac)
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Recherchez et enregistrez l'image de Tomono Kafu depuis Twitter
Détecter l'état de recherche perdu à partir de l'historique des requêtes de recherche Google Chrome
Script Python qui va de la recherche Google à l'enregistrement de la page de résultats de recherche à la fois