강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

최정수님의 프로필 이미지
최정수

작성한 질문수

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

구글 이미지 링크 추출 오류!

작성

·

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')

 

최정수님의 프로필 이미지
최정수

작성한 질문수

질문하기