따릉이 이용 데이터를 이용한 연관 키워드 분석 (2)_이용자 후기 크롤링 편
Project Process 별 자료 (총 4편)
따릉이 이용 데이터를 이용한 연관 키워드 분석 결과_요약
따릉이 이용 데이터를 이용한 연관 키워드 분석 (1)_Data 전처리 및 지도 시각화 편
따릉이 이용 데이터를 이용한 연관 키워드 분석 (2)_이용자 후기 크롤링 편
따릉이 이용 데이터를 이용한 연관 키워드 분석 (3)_키워드 정리 및 시각화
다룰내용
- YouTube, Naver, Google, 브런치에 있는 이용자 후기에 대한 자료 크롤링을 진행
각 사이트 별 크롤링 진행 기준 및 특징
- 각 사이트 별 검색어가 약간의 차이가 있음
[사이트 특성(영상, 글 등등..)의 영향으로 키워드 별 검색 결과에 차이가 있는 것으로 추정됨] - YouTube
- 검색어 : ‘따릉이 브이로그’
- YouTube 영상 제목에 대해 크롤링 진행
- 결과 값이 한번에 출력되는 것이 아니라 스크롤을 내려야 진행이 가능하여 해당 코드 추가
- Naver
- 검색어 : ‘따릉이+후기’
- Naver View 내 모든 해시태그 정보 불러오는 작업 진행
- 결과 값이 한번에 출력되는 것이 아니라 스크롤을 내려야 진행이 가능하여 해당 코드 추가
- 주의 사항 : 많은 자료 크롤링 진행 시 IP 차단되어 중간에 크롤링이 멈추는 경우가 발생함
- Google
- 검색어 : “따릉이코스”
- Google 검색 결과에 대한 제목 크롤링 진행
- 상위 10page 항목을에 대해서만 크롤링 진행
- 브런치
- 검색어 : “따릉이후기”
- 타 사이트와는 다르게 검색어가 URL 내 아스키 코드로 변환되어 들어감
- 결과 값이 한번에 출력되는 것이 아니라 스크롤을 내려야 진행이 가능하여 해당 코드 추가
코드 특이사항
- 자동 스크롤 내리는 코드
-
1안
-[x] 현재 페이지의 전체 길이를 확인 -> 스크롤 다운 -> 추가 자료 불러오는동안 페이지 3초 대기 -> 반복
-[x] Selenium 라이브러리 사용from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys url = "https://search.naver.com/search.naver?where=view&query=" + query + "&sm=tab_opt&nso=so%3Ar%2Cp%3Afrom" + startdate + "to" + finishdate driver = webdriver.Chrome(executable_path='(driver) chromedriver.exe') driver.get(url) # 현재 페이지 스크롤의 크기를 확인 last_height = driver.execute_script("return document.body.scrollHeight") while True: # 스크롤을 맨 아래로 내림 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 3초 대기 time.sleep(3) # 다시한번 스크롤의 크기를 확인 new_height = driver.execute_script("return document.body.scrollHeight") # 프린트를 통하여 길이 확인 및 코드 정상 작동여부 확인 print(new_height) print(last_height) # 처음에 확인한 스크롤의 크기와 맨 아래로 내린 후 확인한 스크롤의 크기를 비교하여 동일하면 종료 if new_height == last_height: break last_height = new_height
-
2안
-[x] PageDown 횟수를 정해놓고 한번씩 차감하여 진행하는 방법
-[x] Selenium 라이브러리 사용driver = webdriver.Chrome(executable_path='(driver) chromedriver.exe') driver.implicitly_wait(1) driver.get(url) # tag name이 body인 항목을 찾아 내려감 body = driver.find_element_by_tag_name('body') num_of_pagedowns = 100 while num_of_pagedowns: body.send_keys(Keys.PAGE_DOWN) time.sleep(2) num_of_pagedowns -= 1 soup = BeautifulSoup(driver.page_source, 'html.parser') youtube_title = soup.select('#video-title > yt-formatted-string') driver.close() driver.quit()
-