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

itibeau님의 프로필 이미지
itibeau

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 기본편

-

셀레니움 csv 오류

작성

·

897

1

안녕하세요. 강의 잘 듣고 있습니다.
기본편 셀레니움 빨리 마치고 실전편으로 넘어가고 싶은데 오류로 넘어가질 못하고 있어요.
제 오류는 csv 를 막상 열어보면 한 줄 밖에 못 가지고 온다는 겁니다.
끝까지 스크롤 된게 보이는데 저장파일을 열면 한 줄 밖에 추출을 못했네요.
에러 문구는 아래와 같습니다.
C:\startcoding_crawling>[2548:20056:0320/181443.565:ERROR:gpu_init.cc(440)] Passthrough is not supported, GL is disabled, ANGLE is
 
정말 재미있게 배우고 있어요.
실전편 강의도 기대하고 있습니다.
감사합니다.

답변 2

1

itibeau님의 프로필 이미지
itibeau
질문자

답변 감사드려요. 그런데 제가 이미 강의 보고 기재한 거랑 동일해요.

해결하고 다음으로 넘어가고 싶은데 넘 답답하네요.

혹시 문제가 어딘지 봐주실 수 있으실까요?

Chrome 드라이버는 Chrome 설정정보인 99로 받았습니다.

혹시 이거에 따라 달리 적용해야 하는 부분이 있을까요?

바쁘실텐데 부탁드려요.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import csv

# 브라우저 생성
browser = webdriver.Chrome('c:/chromedriver.exe')

# 웹사이트 열기
browser.get('https://www.naver.com')
browser.implicitly_wait(10)  # 로딩이 끝날 때까지 10초까지는 기다려줌
# 쇼핑메뉴 클릭
browser.find_element_by_css_selector('a.nav.shop').click()
time.sleep(2) #셀레니움은 다소 올래걸림

# 검색창 클릭
search=browser.find_element_by_css_selector('input.co_srh_input._input')
search.click()

# 검색어 입력
search.send_keys('아이폰 13')
search.send_keys(Keys.ENTER)

# 스크롤 전 높이
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

    # 파일 생성
    f = open(r"C:\startcoding_crawling\03_네이버_쇼핑_크롤링\data.csv", 'w', encoding='CP949', newline='')
    csvwriter = csv.writer(f)
    # 상품 정보 div
    items = browser.find_elements_by_css_selector(".basicList_info_area__17Xyo")

    for item in items:
        name = item.find_element_by_css_selector(".basicList_title__3P9Q7").text
        try:
            price = item.find_element_by_css_selector(".price_num__2WUXn").text
        except:
            price = "판매중단"
        link = item.find_element_by_css_selector(".basicList_title__3P9Q7 > a").get_attribute('href')
    print(name, price, link)

    # 데이터 쓰기
    csvwriter.writerow([name, price, link])

    #파일 닫기
    f.close()
스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

잘 보시면, 

        print(name, price, link)



        # 데이터 쓰기

        csvwriter.writerow([name, price, link])

이 부분이 들여쓰기(indent)가 빠져 있습니다 ^^

Tab을 눌러서 들여쓰기를 만들어 주세요

itibeau님의 프로필 이미지
itibeau
질문자

강사님, 정말 최고세요~바쁘실텐데 오류 찾아주시고,,,감사합니다~^^

실전편도 열심히 들을게요~

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

안녕하세요.

코딩을 가장 쉽게 알려주는 크리에이터, 스타트코딩입니다.

 

우선, 해당 메시지는 에러가 아닙니다. 

아마도 작성하신 코드와 강의영상 코드가 달라서 한 줄 밖에 못가져오는 것 같네요.

 

아래 코드로 확인해 보시기 바랍니다 ^^

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import csv

url = "https://www.naver.com"
browser = webdriver.Chrome('C:/chromedriver.exe')
browser.get(url)
browser.implicitly_wait(10)

# 쇼핑 메뉴 클릭
browser.find_element_by_css_selector("a.nav.shop").click()
time.sleep(2)

# 검색창 클릭
search = browser.find_element_by_css_selector('input.co_srh_input._input')
search.click()

# 검색어 입력
search.send_keys("아이폰 13")
search.send_keys(Keys.ENTER)

# 스크롤 전 높이
before_h = browser.execute_script("return document.body.scrollHeight")

# 무한 스크롤
while True:
    # 맨 아래로 스크롤 내린다.
    browser.find_element_by_css_selector("body").send_keys(Keys.END)

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

    # 스크롤 후 높이
    after_h = browser.execute_script("return document.body.scrollHeight")
    if after_h == before_h:
        break
    before_h = after_h

# 파일 생성
f = open(r"C:\source\startcoding\startcoding_crawling\03_네이버_쇼핑_크롤링\data.csv", 'w', encoding='CP949', newline='')
csvWriter = csv.writer(f)

# 상품 정보 div
items = browser.find_elements_by_css_selector(".basicList_info_area__17Xyo")

for item in items:
    name = item.find_element_by_css_selector(".basicList_title__3P9Q7").text
    try:
        price = item.find_element_by_css_selector(".price_num__2WUXn").text
    except:
        price = "판매중단"
    link = item.find_element_by_css_selector(".basicList_title__3P9Q7 > a").get_attribute('href')
    print(name, price, link)
    csvWriter.writerow([name, price, link])

f.close()
itibeau님의 프로필 이미지
itibeau

작성한 질문수

질문하기