[Python] Laden Sie das Originalbild von der Google Bildsuche herunter

Einführung

Früher habe ich geschrieben, wie man Samne-Bilder von der Google Bildsuche herunterlädt. Diesmal stellte sich heraus, dass der Link des Originalbilds in der Seitenquelle angezeigt wird, wenn Sie das Bild detailliert anzeigen (wenn Sie einmal auf das Suchergebnis klicken). Lassen Sie uns diese Spezifikation nutzen und das Originalbild herunterladen (Achten Sie darauf, es nicht zu überladen, da Google stark ist).

Programmablauf

** Google Bildersuche auf Selen   ↓ Drücken Sie nach dem Anzeigen der Details des ersten Bildes die rechte Cursortaste.   ↓ Holen Sie sich den Link des Originalbildes   ↓ herunterladen**

Implementierung

Wenn Sie "Selenium, Anfragen" nicht installiert haben, bitte. ChromeDriver ist im Ausführungspfad festgelegt, schreiben Sie es also entsprechend um (direkt unter der import-Anweisung). Ich habe es nicht überarbeitet, also ist es schmutzig, aber es tut mir leid.

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')
#↓ Es ist besser, es anzuzeigen, damit Sie es manuell handhaben können, wenn Sie nicht gut scrollen können
#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("Wie viele werden Sie herunterladen? (maximal)"))
    print("Searching...")
    search()
    print("Done.")
    print("Getting links...")
    getLinks()
    print("Done.")
    print("Now downloading...")
    download()
    print("Done.")

Es wird einige Zeit in Anspruch nehmen.

schließlich

Bitte verwenden Sie es mäßig.

Recommended Posts

[Python] Laden Sie das Originalbild von der Google Bildsuche herunter
Speichern Sie das Hundebild aus der Google-Bildsuche
Holen Sie sich Bilder der Google Bildsuche in Originalgröße
Speichern Sie automatisch Bilder Ihrer Lieblingsfiguren aus der Google Bildsuche mit Python
Laden Sie Bilder von der URL-Liste in Python herunter
CSV-Ausgabe der Google-Suche mit [Python]! 【Einfach】
Massen-Download-Bilder von einer bestimmten URL mit Python
Massen-Download-Bilder von einer bestimmten Site-URL mit Python
Sofort von Google-Bildern abkratzen!
Rufen Sie die Bing Image Search API v5 von Python auf, um Bilder zu sammeln
Laden Sie Bilder von "Irasutoya" mit Scrapy herunter
Laden Sie Google Drive-Dateien in Python herunter
Verwenden Sie zwangsweise Google Translate aus Python
Extrahieren Sie mit Python Text aus Bildern
Poste ein Bild von Python auf Tumblr
Bildverarbeitung | Vorhersage von Arten aus Bildern
Verwenden Sie die Google Analytics-API von Python
Batch-Download-Bilder von einer bestimmten URL mit Python Modified-Version
Laden Sie die Top-n-Google-Bildsuche herunter
Python-Skript, das mithilfe der Bing-Image-Suche automatisch typische Bilder sammelt
So aktualisieren Sie Google Sheets von Python
Holen Sie sich Bilder per Stichwortsuche von Twitter
Verwenden Sie die Google Cloud Vision-API von Python
Bildaufnahme von der Kamera mit Python + OpenCV
Laden Sie Python herunter
Bildersammlung mit der benutzerdefinierten Such-API von Google
Homebrew-Suche anhand des Python-Modulnamens (ShellScript)
Laden Sie Bilder mit Python auf Google Drive hoch
[Python] (Linie) Extrahieren Sie Werte aus Diagrammbildern
Suchen Sie die Position im Originalbild anhand der Koordinaten nach der affinen Konvertierung (Python + OpenCV).
Suchen und laden Sie YouTube-Videos automatisch mit Python herunter
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
Laden Sie Bilder aus einer Textdatei herunter, die die URL enthält
Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Laden Sie Profilbilder (Symbole) für alle von Slack herunter
Bildkratzen ②-Holen Sie sich Bilder von Bing, Yahoo, Flickr
Laden Sie Bilder von der URL mit Pillow in Python 3
Laden Sie Daten direkt von der Laufwerks-URL herunter (Google Colaboratory).
Python-Bildverarbeitung
[Selen] Wenn Sie die Google-Bildsuche nicht kratzen können, werde ich nur Samne-Bilder crawlen und sammeln.
Ich wollte viele Bilder sammeln, also habe ich versucht, "Google Image Download" zu verwenden.
SQL zu SQL
MeCab von Python
So kratzen Sie Bilddaten von Flickr mit Python
Erstellen Sie eine Kopie einer Google Drive-Datei aus Python
[Python] Geben Sie den Bereich des Bildes durch Ziehen der Maus an
Holen Sie sich das Bild von "Suzu Hirose" von Google Bildersuche.
Der Download von Google-Bildern hat nicht funktioniert, daher Unterstützung
Lesen Sie den QR-Code aus der Bilddatei mit Python (Mac).
So laden Sie Dateien von Selenium of Python in Chrome herunter
Suchen und speichern Sie das Bild von Tomono Kafu von Twitter
Erkennen Sie den verlorenen Suchstatus im Verlauf der Google Chrome-Suchanfrage
Python-Skript, das von der Google-Suche zum sofortigen Speichern der Suchergebnisseite führt