[PYTHON] Holen Sie sich Bilder der Google Bildsuche in Originalgröße

Es gibt bereits mehrere Artikel zum Kratzen von Bildern bei der Bildsuche, aber es gab nur wenige Artikel, die so verwendet werden konnten, wie sie waren, wahrscheinlich weil geringfügige Änderungen an den Spezifikationen häufig waren. Deshalb habe ich einen Artikel geschrieben, in dem auch die Möglichkeit von Änderungen besteht. Ich werde. Wenn Sie nicht funktionieren, müssen Sie möglicherweise nur die Entwicklertools Ihres Browsers verwenden, um herauszufinden, welche Klassen- und ID-Namen Sie benötigen. Dies ist jedoch für diejenigen offensichtlich, die es wissen, aber wenn Sie nicht wissen, was falsch ist Es braucht eine lange Zeit.

Ausführungsumgebung

macOS Mojave 10.14.5 Python 3.7.2 Chrome 80.0 date 2020-04-01

Vorbereitung der zum Schaben erforderlichen Module

pip install selenium

Überprüfen Sie, ob der Webdriver verwendet werden kann

Start → Google-Suche → versuchen zu beenden

from selenium import webdriver

#Geben Sie den Pfad des heruntergeladenen Webtreibers an
DRIVER_PATH = '/User/hoge/1bin/chromedriver'
#Starten Sie den Webbrowser
wd = webdriver.Chrome(executable_path=DRIVER_PATH)
#Greifen Sie auf Google zu
wd.get('https://google.com')
#Wählen Sie ein Suchfeld.Es gibt mehrere Möglichkeiten zur Auswahl
search_box = wd.find_element_by_name('q') 
# search_box = wd.find_element_by_css_selector('input.gLFyf')
# search_box = wd.find_element_by_class_name('gLFyf')

#Suche nach Qiita
search_box.send_keys('Qiita')
search_box.submit() 
time.sleep(5) 
#Beenden Sie den Webbrowser
wd.quit()

Suchen Sie nach Bildern und erhalten Sie die URL des Bildes

Rufen Sie die URL des Miniaturbilds ab

Rufen Sie zunächst die URL der Miniaturansicht des Suchergebnisses ab.

#Wartezeit nach dem Vorgang, z. B. Klicken(Sekunden)
sleep_between_interactions = 2
#Anzahl der Downloads
download_num = 3
#Suchbegriff
query = "cat"
#URL für die Bildsuche
search_url = "https://www.google.com/search?safe=off&site=&tbm=isch&source=hp&q={q}&oq={q}&gs_l=img"

wd = webdriver.Chrome(executable_path=DRIVER_PATH)
wd.get(search_url.format(q=query))
#Holen Sie sich den Link des Miniaturbilds(Wenn es hier Moos ist, überprüfen Sie tatsächlich den Selektor und ändern Sie ihn)
thumbnail_results = wd.find_elements_by_css_selector("img.rg_i")

Klicken Sie auf das Miniaturbild, um die URL des Originalbilds abzurufen

Klicken Sie mit dem Web-Treiber auf die URL der erfassten Miniaturansicht, um das Bild anzuzeigen und die URL des Originalbilds abzurufen. Da sich der beim Abrufen der ursprünglichen Bild-URL angegebene Klassenname ändern kann, verwenden Sie die entsprechenden Entwicklertools, um ihn zu überprüfen und zu ändern.

image_urls = set()
for img in thumbnail_results[:download_num]:
    try:
        img.click()
        time.sleep(sleep_between_interactions)
    except Exception:
        continue
    #Da Sie die URL nicht auf einmal erhalten können, sollten Sie sie nach der Erstellung von Kandidaten eingrenzen(Bitte sag mir, ob es einen Weg gibt)
    # 'n3VNCb'Änderungen vorbehalten. Sehen Sie sich also das Element des angeklickten Bildes an und ändern Sie es entsprechend.
    url_candidates = wd.find_elements_by_class_name('n3VNCb')
    for candidate in url_candidates:
        url = candidate.get_attribute('src')
        if url and 'https' in url:
            image_urls.add(url)
#Wenn Sie eine Weile nicht warten, endet es nicht normal. Fügen Sie also 3 Sekunden hinzu
time.sleep(sleep_between_interactions+3)
wd.quit()

Holen Sie sich ein Bild von einer Bild-URL

Sie müssen lediglich das Bild von der URL herunterladen und benötigen keinen Webtreiber.

import os
from PIL import Image
import hashlib

image_save_folder_path = 'data'
for url in image_urls:
    try:
        image_content = requests.get(url).content
    except Exception as e:
        print(f"ERROR - Could not download {url} - {e}")

    try:
        image_file = io.BytesIO(image_content)
        image = Image.open(image_file).convert('RGB')
        file_path = os.path.join(image_save_folder_path,hashlib.sha1(image_content).hexdigest()[:10] + '.jpg')
        with open(file_path, 'wb') as f:
            image.save(f, "JPEG", quality=90)
        print(f"SUCCESS - saved {url} - as {file_path}")
    except Exception as e:
        print(f"ERROR - Could not save {url} - {e}")

So finden Sie ein Element, wenn Sie einen Bildlink erhalten

Für das Google-Suchfenster ist `search_box = wd.find_element_by_name ('q')` ` Für das Originalbild des Bildsuchergebnisses wd.find_elements_by_class_name ('n3VNCb') ` Diese können mit den Entwicklertools des Browsers bestätigt werden.

Browser "..." -> Andere Tools-> Entwicklertools Verknüpfungen sind `` Strg-Umschalttaste J (unter Windows) oder cmd + Option + J (unter Mac) `

Wenn Sie ein Bild angeben möchten, klicken Sie mit der rechten Maustaste auf das Bild und wählen Sie "Überprüfen", um die dem Bild entsprechenden Elemente anzuzeigen. Wenn es sich um eine Miniaturansicht für die Bildsuche handelt, lauten die Elemente wie folgt. Elemente können kopiert werden, indem Sie auf das '...' klicken, das im ausgewählten Status angezeigt wird.

<img alt="Dogs | The Humane Society of the United States" class="n3VNCb" src="https://www.humanesociety.org/sites/default/files/styles/1240x698/public/2019/02/dog-451643.jpg?h=bf654dbc&amp;itok=MQGvBmuo" data-noaft="1" jsname="HiaYvf" jsaction="load:XAeZkd;" style="width: 450px; height: 253.306px; margin: 0px;">

Da steht class = "n3VNCb" Sie können es mit wd.find_elements_by_class_name ('n3VNCb') auswählen.

Codeübersicht

Zum Kopieren

import os
import time
from selenium import webdriver
from PIL import Image
import io
import requests
import hashlib

#Wartezeit nach dem Vorgang, z. B. Klicken(Sekunden)
sleep_between_interactions = 2
#Anzahl der Downloads
download_num = 3
#Suchbegriff
query = "cat"
#URL für die Bildsuche
search_url = "https://www.google.com/search?safe=off&site=&tbm=isch&source=hp&q={q}&oq={q}&gs_l=img"

#URL des Miniaturbilds abrufen
wd = webdriver.Chrome(executable_path=DRIVER_PATH)
wd.get(search_url.format(q=query))
#Holen Sie sich den Link des Miniaturbilds(Wenn es hier Moos ist, überprüfen Sie tatsächlich den Selektor und ändern Sie ihn)
thumbnail_results = wd.find_elements_by_css_selector("img.rg_i")

#Klicken Sie auf die Miniaturansicht, um die einzelnen Bild-URLs abzurufen
image_urls = set()
for img in thumbnail_results[:download_num]:
    try:
        img.click()
        time.sleep(sleep_between_interactions)
    except Exception:
        continue
    #Da Sie die URL nicht auf einmal erhalten können, sollten Sie sie nach der Erstellung von Kandidaten eingrenzen(Bitte sag mir, ob es einen Weg gibt)
    # 'n3VNCb'Änderungen vorbehalten. Sehen Sie sich also das Element des angeklickten Bildes an und ändern Sie es entsprechend.
    url_candidates = wd.find_elements_by_class_name('n3VNCb')
    for candidate in url_candidates:
        url = candidate.get_attribute('src')
        if url and 'https' in url:
            image_urls.add(url)
#Wenn Sie eine Weile nicht warten, endet es nicht normal. Fügen Sie also 3 Sekunden hinzu
time.sleep(sleep_between_interactions+3)
wd.quit()

#Bild herunterladen
image_save_folder_path = 'data'
for url in image_urls:
    try:
        image_content = requests.get(url).content
    except Exception as e:
        print(f"ERROR - Could not download {url} - {e}")

    try:
        image_file = io.BytesIO(image_content)
        image = Image.open(image_file).convert('RGB')
        file_path = os.path.join(image_save_folder_path,hashlib.sha1(image_content).hexdigest()[:10] + '.jpg')
        with open(file_path, 'wb') as f:
            image.save(f, "JPEG", quality=90)
        print(f"SUCCESS - saved {url} - as {file_path}")
    except Exception as e:
        print(f"ERROR - Could not save {url} - {e}")

Artikel, auf die verwiesen wird

Recommended Posts

Holen Sie sich Bilder der Google Bildsuche in Originalgröße
[Python] Laden Sie das Originalbild von der Google Bildsuche herunter
Speichern Sie das Hundebild aus der Google-Bildsuche
Holen Sie sich ein Panoramabild in Google Street View
Holen Sie sich das Bild von "Suzu Hirose" von Google Bildersuche.
Holen Sie sich die Terminalgröße in Python
[Bildverkettung] Ordnen Sie Bilder in Kacheln an
Holen Sie sich Bilder per Stichwortsuche von Twitter
Holen Sie sich Google Fit API-Daten in Python
Bildersammlung mit der benutzerdefinierten Such-API von Google
Entfernen Sie DICOM-Bilder in Python
Speichern Sie automatisch Bilder Ihrer Lieblingsfiguren aus der Google Bildsuche mit Python
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
Abrufen der Google Cloud Storage-Objektliste in Java
Bildkratzen ②-Holen Sie sich Bilder von Bing, Yahoo, Flickr
Was tun, um eine Google-Tabelle in Python zu erhalten?
[Selen] Wenn Sie die Google-Bildsuche nicht kratzen können, werde ich nur Samne-Bilder crawlen und sammeln.
[Python] Holen Sie sich die Zahlen im Diagramm mit OCR
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python