Plus tôt, j'ai écrit comment télécharger des images Samne à partir de Google Image Search, Cette fois, il s'est avéré que si vous affichez l'image en détail (lorsque vous cliquez une fois sur le résultat de la recherche), le lien de l'image d'origine sera affiché sur la source de la page. Profitons de cette spécification et téléchargeons l'image originale (attention à ne pas la surcharger car Google est fort)
** Recherche d'images Google sur Selenium ↓ Après avoir affiché les détails de la première image, appuyez sur la touche curseur droite. ↓ Obtenez le lien de l'image originale ↓ Télécharger**
Si vous n'avez pas installé Selenium, requests
, veuillez.
ChromeDriver
est défini dans le chemin d'exécution, alors réécrivez-le comme il convient (juste en dessous de l'instruction d'importation).
Je ne l'ai pas remanié, donc c'est sale, mais je suis désolé.
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')
#↓ Il est préférable de l'afficher pour pouvoir le gérer manuellement lorsque vous ne pouvez pas bien faire défiler
#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("Combien allez-vous télécharger? (maximum)"))
print("Searching...")
search()
print("Done.")
print("Getting links...")
getLinks()
print("Done.")
print("Now downloading...")
download()
print("Done.")
Cela prendra du temps.
Veuillez l'utiliser modérément.
Recommended Posts