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

jaehyun_k님의 프로필 이미지
jaehyun_k

작성한 질문수

이미지 크롤링 중 data:image/gif;base64 로 표기되며 안되는 경우 문의드립니다!

작성

·

2.4K

1

이것이 진짜 크롤링이다 - 실전편

네이버 이미지 주소추출 수업을 듣고있다가 질문드려요!

 

이미지의 URL을 크롤링 하던 중 약 550개 이미지 URL 크롤링 중 350개 정도는 

아래와 같이 URL이 크롤링 되더라구요 .. 그러면서 이미지 다운도 안되구요.. 뭐가 문제일까요 .ㅠ 도와주세요!

data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

 

== 소스 코드==

from webbrowser import BackgroundBrowser
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])

url = "https://search.naver.com/search.naver?where=image&sm=tab_jum&query=%EB%A7%A5%EB%B6%81"
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)
    browser.find_element_by_css_selector("body").send_keys(Keys.END)

    # 스크롤 사이 페이지 로딩 시간
    time.sleep(3)

    # 스크롤 후 높이
    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("a.link_thumb._imageBox._infoBox>._image._listImage")

for i, img in enumerate (imgs,1) :
    img_src = img.get_attribute("src")
    print(i, img_src)

 

 

 

 

 

답변 2

0

LazyLoading 방식을 사용하는 웹사이트를 크롤링 할 때 발생할 수 있는 문제입니다.

모든 이미지가 미리 로딩되지 않고, 사용자의 스크롤에 따라 뷰포트 내로 들어왔을 때 로딩됩니다.

스크롤을 한번에 밑으로 내리지 말고 끊어서 내리는 방식을 사용해보세요.

0

저도 배우는 과정이라 잘은 모르겠지만 이 블로그 보고 해결했습니다.

> https://velog.io/@msjeong/naver-image-crawler

썸네일 가져오는 방식으로는 해결하지 못했고 밑에 클릭해서 원본 데이터를 가져오는 방식으로 하니 해결됐었습니다. (그래도 잘 모르겠네요 ㅋㅋ)

jaehyun_k님의 프로필 이미지
jaehyun_k

작성한 질문수

질문하기