๊ตฌ๊ธ ๊ฒ์ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ํ์ด์ฌ์ผ๋ก ํฌ๋กค๋งํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.
Selenium
์ฐ์ ์นํฌ๋กค๋ง/์คํฌ๋ํ์ ํ๋ ๊ฒฝ์ฐ ์ฃผ๋ก Selenium์ด๋ผ๋ ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ธฐ์ ๊ฐ๋จํ ์์๋ณด๊ณ ์ง๋๊ฐ์.
Selenium์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๊ฑฐ๋ ์๋ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ด๋ค. ์ฃผ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์ํธ ์์ฉํ๋ฉฐ, ์น ํ์ด์ง๋ฅผ ์ ์ดํ๊ณ ํ ์คํธํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ๋ก, ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ง์๋๋ฉฐ, ์น ํ์ด์ง์ ์์๋ฅผ ์ฐพ๊ณ ์กฐ์ํ ์ ์์ด ์น ์คํฌ๋ํ ๋๋ ์น ์๋ํ์ ํ์ฉ๋๋ค.
<์์ ์ฝ๋>
from selenium import webdriver
# ์น ๋๋ผ์ด๋ฒ ์ค์
driver_path = "๊ฒฝ๋ก/chromedriver" # ๋ค์ด๋ก๋ํ ChromeDriver์ ๊ฒฝ๋ก
driver = webdriver.Chrome(executable_path=driver_path)
# ๊ตฌ๊ธ ๊ฒ์ ํ์ด์ง ์ด๊ธฐ
driver.get("https://www.google.com")
# ๊ฒ์์ด ์
๋ ฅ
search_box = driver.find_element_by_name("q")
search_box.send_keys("Selenium ์ฌ์ฉ๋ฒ")
# ๊ฒ์ ์คํ
search_box.submit()
# ๋ธ๋ผ์ฐ์ ๋ซ๊ธฐ
driver.quit()
๊ตฌ๊ธ ๊ฒ์ ์ด๋ฏธ์ง ํฌ๋กค๋ง ํ๊ธฐ
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import urllib.request
import time
import os
# ํ์ด์ง๋ฅผ ์๋๋ก ์คํฌ๋กคํ๋ ํจ์
def scroll_down():
while True:
time.sleep(3)
# ํ์ด์ง ๋งจ ์๋๋ก ์คํฌ๋กค
driver.find_element(By.XPATH, '//body').send_keys(Keys.END)
time.sleep(3)
try:
# '๋๋ณด๊ธฐ' ๋ฒํผ์ด ๋ณด์ด๋ฉด ํด๋ฆญ
load_more_button = driver.find_element(By.XPATH, '//*[@id="islmp"]/div/div/div/div/div[1]/div[2]/div[2]/input')
if load_more_button.is_displayed():
load_more_button.click()
except:
pass
time.sleep(3)
try:
# '๋ ์ด์ ํ์ํ ์ฝํ
์ธ ๊ฐ ์์ต๋๋ค.' ๋ฉ์์ง๊ฐ ๋ณด์ด๋ฉด ์ข
๋ฃ
no_more_content = driver.find_element(By.XPATH, '//div[@class="K25wae"]//*[text()="๋ ์ด์ ํ์ํ ์ฝํ
์ธ ๊ฐ ์์ต๋๋ค."]')
if no_more_content.is_displayed():
break
except:
pass
if __name__ == "__main__":
query = input("๊ฒ์์ด : ")
image_cnt = int(input("์์งํ ์ด๋ฏธ์ง ๊ฐ์ : "))
save_dir = "saved_image" # ์ ์ฅํ ๋๋ ํ ๋ฆฌ ์ด๋ฆ
os.makedirs(save_dir, exist_ok=True) # ๋๋ ํ ๋ฆฌ ์์ฑ (์ด๋ฏธ ์กด์ฌํ๋ฉด ๋ฌด์)
os.chdir(save_dir) # ์์
๋๋ ํ ๋ฆฌ ๋ณ๊ฒฝ
driver = webdriver.Chrome() # Chrome ์น ๋๋ผ์ด๋ฒ ์คํ
URL = 'https://www.google.com/search?tbm=isch&q='
driver.get(URL + query) # ๊ฒ์์ด๋ฅผ ํฌํจํ URL๋ก ์ด๋
scroll_down() # ํ์ด์ง ์คํฌ๋กค ํจ์ ํธ์ถ
# ์ด๋ฏธ์ง ์ ๋ณด ์ถ์ถ
soup = BeautifulSoup(driver.page_source, 'html.parser')
image_info_list = soup.find_all('img', class_='rg_i')
image_and_name_list = []
print('=== ์ด๋ฏธ์ง ์์ง ์์ ===')
downlaod_cnt = 0
for i in range(len(image_info_list)):
if i == image_cnt:
break
if 'data-src' in image_info_list[i].attrs:
save_image = image_info_list[i]['data-src']
image_path = os.path.join(query.replace(' ', '_') + '_' + str(downlaod_cnt) + '.jpg')
image_and_name_list.append((save_image, image_path))
downlaod_cnt += 1
# ์ด๋ฏธ์ง ๋ค์ด๋ก๋
for i in range(len(image_and_name_list)):
urllib.request.urlretrieve(image_and_name_list[i][0], image_and_name_list[i][1])
print('=== ์ด๋ฏธ์ง ์์ง ์ข
๋ฃ ===')
driver.close() # ๋ธ๋ผ์ฐ์ ๋ซ๊ธฐ
์ด ์ฝ๋๋ ๊ฒ์์ด์ ์ด๋ฏธ์ง ์์ง ๊ฐ์๋ฅผ ์ ๋ ฅ๋ฐ์์ ๊ตฌ๊ธ ์ด๋ฏธ์ง ๊ฒ์ ๊ฒฐ๊ณผ์์ ์ด๋ฏธ์ง๋ฅผ ์์งํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค. ์กฐ๊ธ๋ ๊ตฌ์ฒด์ ์ผ๋ก๋ ๊ฒ์์ด๋ก ๊ฒ์ ์ดํ ํ์ด์ง๋ฅผ ์๋๋ก ์คํฌ๋กคํ๋ฉด์ ์ด๋ฏธ์ง๋ฅผ ๋ ๊ฐ์ ธ์ค๊ณ , ๊ฒ์ ๊ฒฐ๊ณผ ํ์ด์ง์์ ์ด๋ฏธ์ง๋ฅผ ์ถ์ถํ์ฌ ๋ค์ด๋ก๋ํ๋ค.