반응형
https://smart-factory-lee-joon-ho.tistory.com/238
예전에 조코딩을 보고 작성했던 글인데
이제 셀레니움 문법이 좀 달라져서
해당 문법을 기반으로 새로 작성해보았습니다.
<바뀐 코드>
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_element(By.XPATH, '//button')
driver.find_element(By.ID, 'loginForm')
driver.find_element(By.LINK_TEXT, 'Continue')
driver.find_element(By.PARTIAL_LINK_TEXT, 'Conti')
driver.find_element(By.NAME, 'username')
driver.find_element(By.TAG_NAME, 'h1')
driver.find_element(By.CLASS_NAME, 'content')
driver.find_element(By.CSS_SELECTOR, 'p.content’)
driver.find_elements(By.ID, 'loginForm')
driver.find_elements(By.CLASS_NAME, 'content')
<전체 코드>
# 다음 통해서 진행
import os
import urllib.request
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 저장 경로
current_path = os.getcwd()
# 원하는 검색어 및 이미지 개수
inserturl = input("검색어를 입력하세요 : ").strip()
img_num = input("원하는 이미지 개수 입력하세요 : ").strip()
driver = webdriver.Chrome('chromedriver')
driver.implicitly_wait(3)
driver.get(f'https://search.daum.net/search?w=img&q={inserturl}')
driver.maximize_window()
time.sleep(3)
# 현재 브라우저의 높이
last_height = driver.execute_script(
"return document.body.scrollHeight") # 브라우져 높이를 확인 가능(자바스크립트)
# 검색 화면에서 스크롤을 끝까지 내려 관련 이미지 전부를 가져옵니다.
while True:
# Scroll down to bottom
# 브라우져 끝까지 스크롤을 내리겠다.
driver.execute_script(
"window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
print(new_height)
if new_height == last_height:
try:
# 화면 맨 아래 펼쳐보기 버튼 클릭
search_more = driver.find_element(
By.CSS_SELECTOR, ".expender.open")
search_more.click()
time.sleep(2)
except:
print("error")
break
last_height = new_height
# 복수 이미지 정보를 가져옵니다 list 형 * find_elements 를 사용합니다.
images = driver.find_elements(By.CSS_SELECTOR, ".thumb_img")
# 폴더 명도 검색어랑 동일하게 세팅 !
folder_name = inserturl
# 폴더 있는지 없는지 확인 후 생성
if not os.path.isdir(folder_name):
os.mkdir(folder_name)
# 원하는 개수의 이미지만 다운로드 !
img_count = 1
for image in images:
if img_count > int(img_num):
break
else:
try:
# 이미지 다운에 중요한 src 값 가져오기
img_url = image.get_attribute('src')
time.sleep(1)
# urllib.request— URL 열기를 위한 확장 가능한 라이브러리 검색해서 사용법 숙지
urllib.request.urlretrieve(
img_url, folder_name + "/" + inserturl + "." + str(img_count) + ".jpg")
img_count += 1
except:
print("error")
pass
driver.close()
<검색 방식>
# 저장 경로
current_path = os.getcwd()
# 원하는 검색어 및 이미지 개수
inserturl = input("검색어를 입력하세요 : ").strip()
img_num = input("원하는 이미지 개수 입력하세요 : ").strip()
원하는 검색어 입력과 원하는 이미지 개수 입력
img_num은 str 으로 밑에서 형변환 예정
<브라우저>
driver = webdriver.Chrome('chromedriver')
driver.implicitly_wait(3)
driver.get(f'https://search.daum.net/search?w=img&q={inserturl}')
driver.maximize_window()
입력한 검색 값이 바로 세팅 url 의 str 값으로 추가 되어 들어갑니다.
<화면 bottom 스크롤>
# 현재 브라우저의 높이
last_height = driver.execute_script(
"return document.body.scrollHeight") # 브라우져 높이를 확인 가능(자바스크립트)
# 검색 화면에서 스크롤을 끝까지 내려 관련 이미지 전부를 가져옵니다.
while True:
# Scroll down to bottom
# 브라우져 끝까지 스크롤을 내리겠다.
driver.execute_script(
"window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
print(new_height)
if new_height == last_height:
try:
# 화면 맨 아래 펼쳐보기 버튼 클릭
search_more = driver.find_element(
By.CSS_SELECTOR, ".expender.open")
search_more.click()
time.sleep(2)
except:
print("error")
break
last_height = new_height
더 많은 량의 이미지 검색을 원할 때 해당 페이지 끝까지 스크롤 하는 코드 입니다.
소량의 이미지 다운시에는 시간을 잡아 먹을 수 있습니다.
<이미지 복수 정보 >
# 복수 이미지 정보를 가져옵니다 list 형 * find_elements 를 사용합니다.
images = driver.find_elements(By.CSS_SELECTOR, ".thumb_img")
복수 이미지 정보를 가져옵니다 list 형 변수이 * find_elements 를 사용합니다.
<다운받을 폴더 명 세팅 >
# 폴더 명도 검색어랑 동일하게 세팅 !
folder_name = inserturl
# 폴더 있는지 없는지 확인 후 생성
if not os.path.isdir(folder_name):
os.mkdir(folder_name)
<이미지 url 추출 및 다운>
# 원하는 개수의 이미지만 다운로드 !
img_count = 1
for image in images:
if img_count > int(img_num):
break
else:
try:
# 이미지 다운에 중요한 src 값 가져오기
img_url = image.get_attribute('src')
time.sleep(1)
# urllib.request— URL 열기를 위한 확장 가능한 라이브러리 검색해서 사용법 숙지
urllib.request.urlretrieve(
img_url, folder_name + "/" + inserturl + "." + str(img_count) + ".jpg")
img_count += 1
except:
print("error")
pass
원하는 개수의 이미지만 다운하고
이미지 src 값을 가져와서 폴더에 다운로드
반응형
'Python' 카테고리의 다른 글
파이썬 셀레늄 selenium 사용하여 이미지 한번에 크롤링 하는 방법 요기 ! + 여러 검색어 한 번에 크롤링 추가 코딩 (2) | 2024.05.21 |
---|---|
파이썬 gradio 사용 방법 (2) | 2023.11.07 |
Mac에서 PyQt , Anaconda 설치 하는 방법 상세히 알려드립니다 ! (0) | 2023.10.12 |
Python PyQt5로 계산기 만드는 방법을 알려드립니다 + 중요한 예외처리 알고리즘 포함 !! (4) | 2023.09.21 |
PYTHON 파이썬으로 중복되지 않는 Random 랜덤 수 만들기 (0) | 2023.09.21 |
pip : 'pip' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. (0) | 2023.09.19 |