[PYTHON] Holen Sie sich das Bild von "Suzu Hirose" von Google Bildersuche.

Einführung

Dieses Mal habe ich versucht, das Bild von "Suzu Hirose" mithilfe der Bildsuchfunktion von Google zu kratzen. Ich denke, dass Sie einige Bilddaten benötigen, wenn Sie die Bildverarbeitung selbst durchführen. Ich hoffe, Sie werden diesen Artikel als eines der Mittel zum Erfassen von Bildern bezeichnen.

Implementierung

Als ich diesmal ein Bild aus der Bildsuche von Google erhielt, musste ich scrollen, um es zu erhalten. Verwenden Sie Selen zum Scrollen, da dies mit Beautiful Soup nicht möglich ist.

Importieren Sie zunächst alles.


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

Bei Verwendung von Selen ist ein Chromtreiber erforderlich. Holen Sie es sich mit ChromeDriver --WebDriver für Chrome .


#Öffnen Sie jetzt Google
driver = webdriver.Chrome("C:\\Users\\chromedriver")#Geben Sie den Pfad an, in dem sich der Treiber befindet.
driver.get("https://www.google.com/")
sleep(2)

Gibt den Speicherort der Suchleiste an. Verwenden Sie zu diesem Zeitpunkt die in Selen geöffnete Überprüfungsfunktion von Chrome, um den Standort zu identifizieren. Ich habe mit Chrome überprüft, dass ich es ursprünglich heruntergeladen habe, und es ist ein Fehler aufgetreten, weil ich es basierend darauf ausgeführt habe. Infolgedessen dauerte es ungefähr eine Stunde, um die Fehlerursache herauszufinden. .. .. .. .. ..

search_bar = driver.find_element_by_name("q")
#Geben Sie Schlüsselwörter in die Suchleiste ein
search_bar.send_keys("Hirose Dose")
search_bar.submit()
sleep(2)

Wenn es gut geht, können Sie suchen, indem Sie Hirose Tin in die Suchleiste eingeben. 2020-11-03.png

Gehen Sie dann zur Bildliste.


#Zum Bildbildschirm wechseln
img_btn = driver.find_element_by_xpath('//a[@class="q qs"]')
img_btn.click()

Ich werde zur Bildliste unten wechseln, daher möchte ich die Bilder hier erhalten. 2020-11-03 (1).png

Holen Sie sich zuerst die URL des Bildes. Dieses Mal, wenn ich die URL des Bildes erhalte, benutze ich BeautifulSoup, um das img-Tag zu finden und es von dort abzurufen. Die meisten Bild-URLs werden in der Daten-src des img-Tags gespeichert, aber manchmal gibt es einige, die keine Daten-src haben, also komme ich zu diesem Zeitpunkt von src.

#Scrollen Sie durch den Bildschirm.
try:
    #Die Bild-URL wird dabei dupliziert.
    all_images = []
    #Scrolle 5 mal
    for i in range(5):
        #Ich scrolle hier auf dem Bildschirm.
        driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
        #Ich lade es hier in Beautiful Soup.
        soup = BeautifulSoup(driver.page_source , "html.parser")
        
        #all_Bild-URL an Bilder anhängen
        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("Beim Abrufen der Bild-URL ist ein Fehler aufgetreten.")
                print()
        
        sleep(2)           

except Exception:
    print("Beim Scrollen des Bildschirms ist ein Fehler aufgetreten.")
    error_flag = True

Und wie im Code kommentiert, wird die Bild-URL in all_images gespeichert, aber die URL wird hier dupliziert. Daher werden wir Duplikate entfernen, um sie eindeutig zu machen.

all_images = list(dict.fromkeys(all_images))

Bei einigen dieser URLs wurden die Daten zusätzlich zur https-URL in das base64-Format geändert. Daher müssen zum Herunterladen zwei Muster verwendet werden. (1) Download von HTTP (2) Download von base64. Dieses Mal habe ich eine Funktion erstellt, die jedem Muster entspricht.

#Speichern Sie das von http url übergebene Bild.
def img_url_download(url , file_path):
    response = requests.get(url , stream = True)
    
    #Speichern unter,
    with open(file_path , 'wb') as file:
        shutil.copyfileobj(response.raw , file)


#Funktion zum Speichern von base64
#In URL"data:image/jpeg;base64,"Setzen Sie den mit dem entfernten ein.
def base64_download(url , file_path):
    img = base64.b64decode(url.encode())
    with open(file_path , "wb") as f:
        f.write(img)

Speichern Sie das Bild nach dem Definieren der Funktion am Ende im Ordner.

#Legen Sie die Bilddaten in die Datei! !!

#Dateipfad
path = r"C:\Users\suzu_img_files"#Bitte geben Sie den Pfad des Ordners an, um das Bild zu speichern

#base64 ist der erste"data:image/jpeg;base64,"Es gibt, also versuchen Sie es zu entfernen.
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)
    
    #Die if-Anweisung verzweigt sich je nachdem, ob es sich um base64 handelt oder nicht.
    if len(re.findall(base64_string , image_url)) > 0:
        url = url.replace(base64_string , "")#Das Präfix wurde aus der URL entfernt.
        base64_download(url , file_path)
    
    else:
        img_url_download(image_url , file_path)

Wenn alles gut geht, wird das Bild wie unten gezeigt gespeichert. 2020-11-03 (3).png

Zusammenfassung

Wie war das? Ist es nicht möglich, den Bereich des Schabens mit Selen zu erweitern? Diesmal war es Herr Suzu Hirose, aber ich denke, es ist gut, mit Menschen, Tieren, Gebäuden usw. zu kratzen, die Sie mögen! Dieses Mal habe ich es auch über den Google-Suchbildschirm implementiert, weil ich auch Selen geübt habe. Wenn Sie jedoch nur ein Bild erhalten möchten, ist es schneller, es mit der ersten URL als URL der Bildliste von Herrn Hirose zu implementieren. nicht wahr,,,


Referenzmaterial
[Einführung in Python] Das Bild von Kanna Hashimoto kratzen. Beispiele für die Funktionen von Python: Laden Sie Bilder herunter. Übungen nach Progate | Datenanalyse mit Python. Schöne Suppe ChromeDriver - WebDriver for Chrome Python-basiertes Web-Scraping (BeautifulSoup, Selenium, Requests) >

Recommended Posts

Holen Sie sich das Bild von "Suzu Hirose" von Google Bildersuche.
Holen Sie sich Bilder der Google Bildsuche in Originalgröße
Suchen Sie nach dem Wert der Instanz in der Liste
Spielen Sie Musik, indem Sie auf die inoffizielle API von Google Play Music klicken
Holen Sie sich die Anzahl der Ziffern
Beurteilung des Sieges oder der Niederlage von Shadova anhand der Bilderkennung
Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes
Ermitteln Sie den Durchmesser des Diagramms anhand der Suche nach Breitenpriorität (Python-Speicher).
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Holen Sie sich die Anzahl der Ansichten von Qiita
So erhalten Sie den Pixelwert des Punkts aus dem Satellitenbild, indem Sie den Breiten- und Längengrad angeben
Ruft die Attribute eines Objekts ab
Holen Sie sich das erste Element von Queryset
Holen Sie sich die Anzahl der Youtube-Abonnenten
[Python] Untersuchen Sie die Eigenschaften der Titel der Top-Websites in den Google-Suchergebnissen
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Der API-Client für die Sitemap in der Google-Suchkonsole befindet sich in Webmastern anstelle der Suchkonsole
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
Bestimmen Sie die Authentizität von veröffentlichten Artikeln durch maschinelles Lernen (Google Prediction API).
Holen Sie sich die Spaltenliste und Datenliste von CASTable
Holen Sie sich Bilder per Stichwortsuche von Twitter
Erhalten Sie Parlamentsprotokolle über API
Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-
Speichern Sie das Hundebild aus der Google-Bildsuche
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Ermitteln Sie den Wert der mittleren Schicht von NN
Analyse des Röntgenmikrotomographiebildes durch Python
Holen Sie sich Urlaub mit der Google Kalender-API
Auf der Suche nach dem schnellsten FizzBuzz in Python
Bildersammlung mit der benutzerdefinierten Such-API von Google
Holen Sie sich den letzten Tag des angegebenen Monats
[Python] Ruft den Zeichencode der Datei ab
Holen Sie sich den Dateinamen des Verzeichnisses (glob)
[PowerShell] Lesen Sie die Zeichenfolge
Holen Sie sich die Größe einer Bilddatei im Web (Python3, keine zusätzliche Bibliothek erforderlich)
Speichern Sie automatisch Bilder Ihrer Lieblingsfiguren aus der Google Bildsuche mit Python
Abrufen der Unix-Zeit der von JST angegebenen Zeit unabhängig von der Zeitzone des Servers mit Python
Holen Sie sich das letzte Element des Arrays, indem Sie Zeichenfolgen in Python und PHP aufteilen
[Python] Laden Sie das Originalbild von der Google Bildsuche herunter
Holen Sie sich den Inhalt von Git Diff aus Python
Überprüfen Sie den Betrieb von OpenCV3, das von Anaconda installiert wurde
Extrahieren Sie die dominante Bildfarbe durch k-Mittel-Clustering
[Python] Ruft die Skalenbezeichnung der Figur ab / bearbeitet sie
Ich habe versucht, durch Schaben ein Bild zu bekommen
[Python] Holen Sie sich die Hauptthemen von Yahoo News
Holen Sie sich den Aufrufer einer Funktion in Python
Sortieren Sie die Elemente eines Arrays, indem Sie Bedingungen angeben
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Holen Sie sich ein Panoramabild in Google Street View
Bildverarbeitung? Die Geschichte, Python für zu starten
[Python] Ruft das Datum der letzten Aktualisierung der Website ab
Richter Yosakoi Naruko nach Bildklassifikation von Tensorflow.
Super (kurze) Zusammenfassung der Bildklassifizierung durch ArcFace
[Bei Coder] Lösen Sie das Problem der Dichotomie
Minimieren Sie die Anzahl der Polierungen, indem Sie die Kombination optimieren