본문 바로가기

Data handling

[크롤링 삽질] selenium 스크롤 다운 안될때 꿀팁

반응형

 

네이버 크롤링이 카카오, 구글 크롤링보다 훨씬 어렵다...

내가 크롤링한 사이트는 네이버 플레이스이다.

 

스크롤 다운을 위해 여러 시도를 해보다가 알게 됐다.

 

핵심적인 사실

1. body를 클릭해야 스크롤 다운이 가능하다 

2. body를 클릭했을때, 다른 링크로 넘어갈 경우도 있고 안 넘어갈 경우도 있다.

    • 이에 대한 예외사항을 처리해 주어야 한다.

3. 굳이 스크롤 다운을 하지 않아도 바로 볼 수 있는 메뉴가 있다면 그걸 이용한다

4. x_path가 만능이 아니다. 오히려 driver.find_element_by_class_name이 더 유용할 때가 있다. class_name이 고정돼 있을 경우 좀 더 안정적으로 크롤링 할 수 있다는 경험이 생겼다.

 

2번에 대한 예외사항을 처리한 스크롤 다운 기능을 구현했다.

def click_nolink_for_scrollDown(driver, scrollDown_num=100):
    url = driver.current_url
    while True:
        try:
            body = driver.find_element_by_css_selector('body')
        except:
            driver.refresh()
            sleep(1)
        body.click()
        sleep(0.1)
        if url == driver.current_url:
            break
        else:
            driver.execute_script("window.history.go(-1)")
    sleep(0.1)
    for i in range(scrollDown_num):
        sleep(0.1)
        body.send_keys(Keys.PAGE_DOWN)

 

  • body를 click하고 스크롤 다운을 해야하는데, 만약 body.click()으로 다른 url로 넘어갈 경우, 다시 뒤 돌아가기를 해서 link가 클릭이 안될때까지 반복하는 함수이다.
  • 여튼,,, x_path가 예외가 있다고 여겨지면, class_name, tag_name 등 다른 요소들로 규칙을 만들어보자.

 

반응형