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).
** 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**
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.
Bitte verwenden Sie es mäßig.
Recommended Posts