728x90
네이버 크롤링이 카카오, 구글 크롤링보다 훨씬 어렵다...
내가 크롤링한 사이트는 네이버 플레이스이다.
스크롤 다운을 위해 여러 시도를 해보다가 알게 됐다.
핵심적인 사실
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 등 다른 요소들로 규칙을 만들어보자.
'Data handling' 카테고리의 다른 글
[인코딩 방식] 웹에서 얻은 데이터가 안열릴때 (0) | 2020.09.03 |
---|---|
[pandas] str으로 나타내진 datetime 을 mean 연산 가능한 형식으로 변환하기 (0) | 2020.06.26 |
[크롤링 관련] selenium stale 에러 (10) | 2020.06.24 |
[mac os & pycharm] 단축키 정리 (0) | 2020.06.23 |
스케일링/표준화/정규화 차이 (0) | 2019.02.12 |