inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

네이버 지도 맛집 자료 수집하기 오류

1952

최정수

작성한 질문수 3

1

안녕하세요 네이버 맛집 Data 수집 크롤링 오류 문의 드립니다.

크롬이 실행되고, 이후 마우스 스크롤까지는 잘 되지만 이후 부터는 지연이되다가

나중에는 오류를 출력하고 있는데... 한번 확인부탁드립니다.ㅠ 정말 잘 진도 나가다 오류로 여려 구글링 해도 잘 안되네요!

■ 실행코드

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

url = "https://map.naver.com/v5/"
browser = webdriver.Chrome("C:\startcoding\chromedriver_win32333333333333\chromedriver.exe")
browser.implicitly_wait(10)
browser.maximize_window()
browser.get(url)

#검색창 입력
search = browser.find_element_by_css_selector("input.input_search")
search.click()
time.sleep(1)
search.send_keys("강남역 맛집")
time.sleep(1)
search.send_keys(Keys.ENTER)
time.sleep(2)

# iframe인 경우 그 안으로 들어가야 한다
browser.switch_to.frame("searchIframe")

# browser.switch_to.default_content() frame 밖으로 나오기

# ifram 안쪽을 한번 클릭하기
browser.find_element_by_css_selector("#_pcmap_list_scroll_container").click()

# 로딩된 데이터 갯수 확인
lis = browser.find_elements_by_css_selector("li._1EKsQ")  # elements 여서 리스트 형태로 [] 로 출력된다
before_len = len(lis)

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

    # 스크롤 사이 시간
    time.sleep(1)

    # 스크롤 후 로딩 된 리스트 갯수 확인
    lis = browser.find_elements_by_css_selector("li._1EKsQ")
    after_len = len(lis)

    # 로딩된  데이터 개수가 같다면 반복을 멈춤
    if before_len == after_len:
        break
    after_len = before_len

# 데이터 기다리는 시간을 0으로만들어 준다(데이터가 없더라도 빨리 넘아검)
browser.implicitly_wait(0)

for li in lis:
    # 별점이 있는 것만
    if len(li.find_elements_by_css_selector("span._2FqTn._1mRAM > em")) >0:  # elements 이므로 리스트 형태를 감안해서 찾는다 있으면 [em] 1로 없으면 [0] 0임
        # 가게명
        name = li.find_element_by_css_selector("span.OXiLu").text
        # 별점
        star = li.find_element_by_css_selector("span._2FqTn._1mRAM > em").text
       
        print(name, star)
        # 영업시간이 있다면
        if len(li.find_elements_by_css_selector("span._2FqTn._4DbfT")) > 0:  # 영업시간이 있는 것으므로 리스트가 1개가 있다
            # 방문자수
            visit_review = li.find_element_by_css_selector("span._2FqTn:nth-child(3)").text
            # 블로그 리슈
            blog_review = li.find_element_by_css_selector("span._2FqTn:nth-child(4)").text
        # 영업시간이 없다면
        else :
            # 방문자수
            visit_review = li.find_element_by_css_selector("span._2FqTn:nth-child(2)").text
            # 블로그 리슈
            blog_review = li.find_element_by_css_selector("span._2FqTn:nth-child(3)").text

            print(name, star, visit_review, blog_review)

 

■ 오류코드

크롬 버전과 드라이버 버전도 맞춰서 하는데... 계속 스크롤 이후 멈추고 아래와 같은 오류가 생깁니다ㅠ

[2612:14204:0411/103851.435:ERROR:util.cc(126)] Can't create base directory: C:\Program Files\Google\GoogleUpdater

[18704:15884:0411/103951.246:ERROR:gpu_init.cc(446)] Passthrough is not supported, GL is disabled, ANGLE is 

Traceback (most recent call last):

  File "c:\startcoding\네이버지도크롤링\03.데이터수집.py", line 41, in <module>

    lis = browser.find_elements_by_css_selector("li._1EKsQ")

  File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 832, in find_elements_by_css_selector

    return self.find_elements(by=By.CSS_SELECTOR, value=css_selector)

  File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1283, in 

find_elements

    return self.execute(Command.FIND_ELEMENTS, {

  File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 425, in execute

    self.error_handler.check_response(response)

  File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response

    raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.WebDriverException: Message: chrome not reachable

  (Session info: chrome=100.0.4896.75)

Stacktrace:

Backtrace:

        Ordinal0 [0x01058BD3+2395091]

        Ordinal0 [0x00FEACA1+1944737]

        Ordinal0 [0x00EDCED0+839376]

        Ordinal0 [0x00ED1052+790610]

        Ordinal0 [0x00ED1888+792712]

        Ordinal0 [0x00ED3122+799010]

        Ordinal0 [0x00ECCA79+772729]

        Ordinal0 [0x00EDE380+844672]

        Ordinal0 [0x00F34542+1197378]

        Ordinal0 [0x00F249D6+1133014]

        Ordinal0 [0x00EFEF76+978806]

        Ordinal0 [0x00EFFE86+982662]

        GetHandleVerifier [0x0120C912+1719138]

        GetHandleVerifier [0x012BB2CD+2434333]

        GetHandleVerifier [0x010F4001+569937]

        GetHandleVerifier [0x010F3066+565942]

        Ordinal0 [0x00FF265B+1975899]

        Ordinal0 [0x00FF72A8+1995432]

        Ordinal0 [0x00FF7395+1995669]

        Ordinal0 [0x010002F1+2032369]

        BaseThreadInitThunk [0x7572FA29+25]

        RtlGetAppContainerNamedObjectPath [0x775C7A9E+286]

        RtlGetAppContainerNamedObjectPath [0x775C7A6E+238]

 

 

 

 

python 웹-크롤링

답변 2

0

스타트코딩

제가 클래스명 수정했을 때는 잘 되는데,

제 코드로 돌려 보시겠어요??

 

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

browser = webdriver.Chrome("c:/chromedriver.exe")
browser.get("https://map.naver.com/v5/")
browser.implicitly_wait(10)
browser.maximize_window()

# 검색창 입력
search = browser.find_element_by_css_selector("input.input_search")
search.click()
time.sleep(1)
search.send_keys("강남역 맛집")
time.sleep(1)
search.send_keys(Keys.ENTER)
time.sleep(2)

# iframe 안으로 들어가기
browser.switch_to.frame("searchIframe")

# browser.switch_to_default_content() iframe 밖으로 나오기

# iframe 안쪽을 한번 클릭하기
browser.find_element_by_css_selector("#_pcmap_list_scroll_container").click()

# 로딩된 데이터 개수 확인
lis = browser.find_elements_by_css_selector("li._1EKsQ")
before_len = len(lis)

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

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

    # 스크롤 후 로딩된 데이터 개수 확인
    lis = browser.find_elements_by_css_selector("li._1EKsQ")
    after_len = len(lis)

    # 로딩된 데이터 개수가 같다면 반복 멈춤
    if before_len == after_len:
        break
    before_len = after_len

# 데이터 기다리는 시간을 0으로 만들어 줘요. (데이터가 없더라도 빠르게 넘어감)
browser.implicitly_wait(0)

for li in lis:
    # 별점이 있는 것만
    if len(li.find_elements_by_css_selector("span._2FqTn._1mRAM > em")) > 0:
        # 가게명
        name = li.find_element_by_css_selector("span.OXiLu").text
        # 별점
        star = li.find_element_by_css_selector("span._2FqTn._1mRAM > em").text

        # 영업 시간이 있다면
        if len(li.find_elements_by_css_selector("span._2FqTn._4DbfT")) > 0:
            # 방문자 리뷰수
            try:
                visit_review = li.find_element_by_css_selector("span._2FqTn:nth-child(3)").text
            except:
                visit_review = "0"
            # 블로그 리뷰수
            try:
                blog_review = li.find_element_by_css_selector("span._2FqTn:nth-child(4)").text
            except:
                blog_review = "0"
        # 영업 시간이 없다면
        else:
            # 방문자 리뷰수
            try:
                visit_review = li.find_element_by_css_selector("span._2FqTn:nth-child(2)").text
            except:
                visit_review = "0"
            # 블로그 리뷰수
            try:
                blog_review = li.find_element_by_css_selector("span._2FqTn:nth-child(3)").text
            except:
                blog_review = "0"

        print(name, star, visit_review, blog_review)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome("c:/chromedriver.exe")
browser.get("https://map.naver.com/v5/")
browser.implicitly_wait(10)
browser.maximize_window()

# 검색창 입력
search = browser.find_element_by_css_selector("input.input_search")
search.click()
time.sleep(1)
search.send_keys("강남역 맛집")
time.sleep(1)
search.send_keys(Keys.ENTER)
time.sleep(2)

# iframe 안으로 들어가기
browser.switch_to.frame("searchIframe")

# browser.switch_to_default_content() iframe 밖으로 나오기

# iframe 안쪽을 한번 클릭하기
browser.find_element_by_css_selector("#_pcmap_list_scroll_container").click()

# 로딩된 데이터 개수 확인
lis = browser.find_elements_by_css_selector("li._1EKsQ")
before_len = len(lis)

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

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

    # 스크롤 후 로딩된 데이터 개수 확인
    lis = browser.find_elements_by_css_selector("li._1EKsQ")
    after_len = len(lis)

    # 로딩된 데이터 개수가 같다면 반복 멈춤
    if before_len == after_len:
        break
    before_len = after_len

# 데이터 기다리는 시간을 0으로 만들어 줘요. (데이터가 없더라도 빠르게 넘어감)
browser.implicitly_wait(0)

for li in lis:
    # 별점이 있는 것만
    if len(li.find_elements_by_css_selector("span._2FqTn._1mRAM > em")) > 0:
        # 가게명
        name = li.find_element_by_css_selector("span.OXiLu").text
        # 별점
        star = li.find_element_by_css_selector("span._2FqTn._1mRAM > em").text

        # 영업 시간이 있다면
        if len(li.find_elements_by_css_selector("span._2FqTn._4DbfT")) > 0:
            # 방문자 리뷰수
            try:
                visit_review = li.find_element_by_css_selector("span._2FqTn:nth-child(3)").text
            except:
                visit_review = "0"
            # 블로그 리뷰수
            try:
                blog_review = li.find_element_by_css_selector("span._2FqTn:nth-child(4)").text
            except:
                blog_review = "0"
        # 영업 시간이 없다면
        else:
            # 방문자 리뷰수
            try:
                visit_review = li.find_element_by_css_selector("span._2FqTn:nth-child(2)").text
            except:
                visit_review = "0"
            # 블로그 리뷰수
            try:
                blog_review = li.find_element_by_css_selector("span._2FqTn:nth-child(3)").text
            except:
                blog_review = "0"

        print(name, star, visit_review, blog_review)

0

스타트코딩

음.. 제가 이건 조금 더 깊게 봐야 겠네요.

지금 책 집필 마감일이라.. 시간이 부족합니다. 

조금만 기다려 주세요.

 

우선, 셀레니움 4버전으로 맞춰서 한번 코드를 변경해 보시겠어요? 

제가 영상 올려 놨습니다.

셀레니움 환경설정 오류

0

80

2

네이버 로그인 관련

0

370

2

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

0

104

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

83

2

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

1

72

2

수료증은 어떻게 받나요?

0

129

2

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

0

67

2

드라이버가 안 열려요

0

90

2

이거 해결방법 아시는 분?

0

124

2

네이버 지식인 크롤링..

0

217

2