1 minute read

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()