inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

482

최정수

작성한 질문수 3

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

 

 
 

python 웹-크롤링

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

 

셀레니움 환경설정 오류

0

80

2

네이버 로그인 관련

0

370

2

안녕하세요 셀레니움에 대해서 질문

0

105

1

크롤링 연습사이트 문의

0

122

2

선택자 질문

0

89

2

'특정 요소가 나타날 때까지 스크롤' 부분 에러

0

91

2

자동 로그인 질문

0

107

2

44강 제목, 링크

0

115

1

원하는 값이 없을 때

0

106

2

크롤링한 링크가 엑셀로 들어가면 작동이 안되요

0

252

2

셀레니움 PDF자료는 받을 수 있나요

0

108

2

글목록 추출하기

0

111

2

메일 자동화 로그인 중복방지문자해결 오류 및 명시적 대기 질문

0

100

2

강의 노트가 어디에 있는건가요?

0

82

2

강의 커리큘럼 질문

0

112

1

조건문 else 사용하지 않는 이유

0

84

2

셀레니움으로 접근할 수 없는 경우

0

109

2

웹페이지 변경

0

84

2

자바스크립트로 태그 선택 시 질문입니다.

1

72

2

수료증은 어떻게 받나요?

0

129

2

class명을 활용하여 선택자를 만들지 않는 경우..?

0

67

2

드라이버가 안 열려요

0

90

2

이거 해결방법 아시는 분?

0

124

2

네이버 지식인 크롤링..

0

217

2