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.
macOS Mojave 10.14.5 Python 3.7.2 Chrome 80.0 date 2020-04-01
pip install selenium
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()
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 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()
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}")
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&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.
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}")
Recommended Posts