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

코딩초보님의 프로필 이미지

작성한 질문수

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

-

해결이 안되네요

작성

·

580

1

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 자동 업데이트
from selenium.webdriver.common.keys import Keys

import time
import pyautogui
import pyperclip

# 브라우져 꺼짐 방비
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

# 불필요한 에러 메시지 없애기
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"] )

service = Service(executable_path=ChromeDriverManager().install()) 
driver = webdriver.Chrome(service=service, options=chrome_options)

# 웹페이지 주소로 이동
driver.implicitly_wait(5) # 웹 페이지가 로딩될 때까지 5초 기다림
# driver.maximize_window() # 브라우저크기 최대화
driver.get("https://map.naver.com/v5")

search = driver.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(1)


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

# iframe 나올 때
# driver.switch_to_default_content()

# 무한스크롤 하기
## iframe 안쪽을 한번 클릭하기
driver.find_element(By.CSS_SELECTOR,"#_pcmap_list_scroll_container").click()

## 로딩된 데이터 갯수 확인
lis = driver.find_elements(By.CSS_SELECTOR,"li.Fh8nG.D5NxL")
before_len = len(lis)

while True :
    # 맨 아래로 스크롤을 내린다.
    driver.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END)
    # 페이지 로딩 시간을 준다
    time.sleep(1.5)
    # 스크롤 후 로딩된 데이터 개수 확인
    lis = driver.find_elements(By.CSS_SELECTOR,"li.Fh8nG.D5NxL")
    after_len = len(lis)
    
    # 로딩된 데이터 개수가 같다면 반복 멈춤
    if before_len == after_len:
        break
    before_len = after_len
    
# 데이터 수집
## lis에 모든 가계의 정보가 담겨있음
   
for li in lis:
    # 별점 있는 것만 선택
    stars = driver.find_elements(By.CSS_SELECTOR,"span.XGoTG.cN3MU> em")
   
    if len(stars)>0:
        # 가계이름
        store_name = li.find_element(By.CSS_SELECTOR,"span.place_bluelink.moQ_p").text 
        star_point = li.find_element(By.CSS_SELECTOR,"span.XGoTG.cN3MU> em")

위에서 store_name까지는 출력이 잘 되는데...star_point를 추가하고 출력하면 아래와 같은 에러가 발생합니다. 아무리 해봐도 해결이 안되네요..

답변 2

0

코딩초보님의 프로필 이미지
코딩초보
질문자

넵...해보겠습니다...잘되야할텐데..

0

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

별점이 없는 경우도 있습니다.

이런 경우 if문이나 try - except로 예외 처리를 해주셔야 합니다.