인프런 커뮤니티 질문&답변
구글 이미지 링크 추출 오류!
작성
·
472
1
늘 좋은 강의 잘 듣고 있습니다!! 이해 할때까지 반복 연습중인데.. 에러 가 자꾸나서 확인 부탁드립니다
실행 코드
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
import os
import urllib.request
if not os.path.exists('인프런유료chapter05/고양이'):
os.mkdir('인프런유료chapter05/고양이')
url = f"https://www.google.com/search?q=%EA%B3%A0%EC%96%91%EC%9D%B4&hl=en&sxsrf=APq-WBtpNohfQWx-Rbg-cQ9NS2_CSdScmQ:1649047497463&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiggrfSzPn2AhXPD94KHdkUDcUQ_AUoAXoECAIQAw&biw=1291&bih=934&dpr=1"
browser = webdriver.Chrome("C:\startcoding\chromedriver.exe")
browser.implicitly_wait(10)
browser.maximize_window()
browser.get(url)
# 무한스크롤 구문
# 스크롤 전 높이
before_h = browser.execute_script("return window.scrollY")
# 무한 스크롤
while True :
# 맨 아래로 스크롤을 내린다
browser.find_element_by_css_selector("body").send_keys(Keys.END)
# 스크롤 사이 페이지 로딩 시간
time.sleep(1)
# 스크롤 후 높이
after_h = browser.execute_script("return window.scrollY")
if after_h == before_h:
break
before_h = after_h
#이미지 추출
imgs = browser.find_elements_by_css_selector(".rg_i.Q4LuWd") # class가 띄어 쓰기 있는 경우 .으로 대체하고 맨 앞에서 .붙인다
for i, img in enumerate(imgs,1):
# 이미지를 클릭해서 큰 사이즈를 찾아줘라
img.click()
time.sleep(1)
# 큰이미지 추출
target = browser.find_element_by_css_selector("img.n3VNCb")
img_src = target.get_attribute('src')
# 이미지 다운로드
# 크롤링 하다보면 HTTP Error 403: Forbidden 에러가 납니다
opener = urllib.request.build_opener()
opener.addheaders = (['User-Agent','Mozila/5.0'])
urllib.request.install_opener(opener)
#url 이미지 저장하기
urllib.request.urlretrieve(img_src, f'인프런유료chapter05/고양이/{i}.jpg')
오류
C:\startcoding>C:/Users/hellonature/AppData/Local/Programs/Python/Python310/python.exe c:/startcoding/인프런유료chapter05/08.구글이미지주소추 출.py c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:13: DeprecationWarning: executable_path has been deprecated, please pass in a Service object browser = webdriver.Chrome("C:\startcoding\chromedriver.exe") DevTools listening on ws://127.0.0.1:54093/devtools/browser/39af353b-7fc6-4b96-a4e0-1e656c87d831 c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:25: DeprecationWarning: find_element_by_css_selector is deprecated. Please use find_element(by=By.CSS_SELECTOR, value=css_selector) instead browser.find_element_by_css_selector("body").send_keys(Keys.END) c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:38: DeprecationWarning: find_elements_by_css_selector is deprecated. Please use find_elements(by=By.CSS_SELECTOR, value=css_selector) instead imgs = browser.find_elements_by_css_selector(".rg_i.Q4LuWd") # class가 띄어 쓰기 있는 경우 .으로 대체하고 맨 앞에서 .붙인다 c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:46: DeprecationWarning: find_element_by_css_selector is deprecated. Please use find_element(by=By.CSS_SELECTOR, value=css_selector) instead target = browser.find_element_by_css_selector("img.n3VNCb") Traceback (most recent call last): File "c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py", line 57, in <module> urllib.request.urlretrieve(img_src, f'인프런유료chapter05/고양이/{i}.jpg') File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 241, in urlretrieve with contextlib.closing(urlopen(url, data)) as fp: File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 216, in urlopen return opener.open(url, data, timeout) File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 516, in open req = meth(req) File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 1300, in do_request_ for name, value in self.parent.addheaders: ValueError: too many values to unpack (expected 2) C:\startcoding>[20968:20972:0404/150023.007:ERROR:device_event_log_impl.cc(214)] [15:00:23.007] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: 시스템에 부착된 장치가 작동하지 않습니다. (0x1F) [20968:20972:0404/150023.007:ERROR:device_event_log_impl.cc(214)] [15:00:23.008] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: 시스템에 부착된 장치가 작동하지 않습니다. (0x1F) C:\startcoding>[21456:16916:0404/150208.726:ERROR:gpu_init.cc(440)] Passthrough is not supported, GL is disabled, ANGLE is
답변 1
0
스타트코딩
지식공유자
안녕하세요.
코딩을 가장 쉽게 알려주는 크리에이터, 스타트코딩입니다.
아무래도 오타가 있는 것 같습니다.
browser = webdriver.Chrome("C:/startcoding/chromedriver.exe")
위와 같이 \ 대신 / 로 바꿔 보세요.
그리고 또 오류가 난다면 아래 코드와 비교해 보시기 바랍니다 ^^
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import os
import urllib.request
if not os.path.exists('06_구글_이미지_크롤링/고양이'):
os.mkdir('06_구글_이미지_크롤링/고양이')
url = "https://www.google.com/search?q=%EA%B3%A0%EC%96%91%EC%9D%B4&sxsrf=AOaemvI2NDPIoi8qjYXhjD5n4rL-F_OR5w:1637314593997&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjrxoqWkKT0AhXkKqYKHQdbDsIQ_AUoAXoECAEQAw&biw=1707&bih=817&dpr=1.5"
browser = webdriver.Chrome("C:/chromedriver.exe")
browser.implicitly_wait(10)
browser.maximize_window()
browser.get(url)
# 무한 스크롤 처리
# 스크롤 전 높이
before_h = browser.execute_script("return window.scrollY")
# 무한 스크롤
while True:
# 맨 아래로 스크롤을 내린다.
browser.find_element_by_css_selector("body").send_keys(Keys.END)
# 스크롤 사이 페이지 로딩 시간
time.sleep(1)
# 스크롤 후 높이
after_h = browser.execute_script("return window.scrollY")
if after_h == before_h:
break
before_h = after_h
# 썸네일 이미지 태그 추출
imgs = browser.find_elements_by_css_selector(".rg_i.Q4LuWd")
for i, img in enumerate(imgs, 1):
# 이미지를 클릭해서 큰 사이즈를 찾아요
img.click()
time.sleep(1)
# 큰 이미지 주소 추출
if i == 1:
target = browser.find_elements_by_css_selector("img.n3VNCb")[0]
else:
target = browser.find_elements_by_css_selector("img.n3VNCb")[1]
img_src = target.get_attribute('src')
# 이미지 다운로드
# 크롤링 하다보면 HTTP Error 403: Forbidden 에러가 납니다.
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Mozila/5.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(img_src, f'06_구글_이미지_크롤링/고양이/{i}.jpg')





