네이버 실시간 검색어를 자동 추출하는 방법

 

ㅇ 네이버에서 제공하는 실시간 인기 검색어를 프로그램에서 자동으로 가져오는 방법에 대해서 설명합니다.
  - 여기서는 실시간 검색어 제공 페이지의 html을 간략히 분석하고,
  - python 언어를 이용해서 검색어를 추출하는 방법을 설명합니다.
 
ㅇ 우선, 네이버에서 제공하는 실시간 인기검색어 URL과 웹브라우저에서 보이는 내용을 캡쳐해 보았습니다.
  -  이 URL에서 실시간으로 검색어 순위를 제공합니다.
  - 제공되는 형태는 아래와 같습니다만, 여기서는 일부분만 화면 캡쳐했기 때문에
  - 실제로는 훨씬 더 많은 내용이 보여집니다.
 

 
ㅇ 주의할 점은
  - 네이버 페이지 개편 작업 등을 하면 URL이 바뀔 수도 있고,
  - URL은 맞아도, 내용이나 포맷이 변경될 수도 있습니다.
  - 그 경우에는 여기서 설명하는 내용이 맞지 않을 수도 있습니다.
  - 하지만, 여기서 설명하는 방법을 이해하면,
  - 그러한 변경에 맞춰 추출하는 방법을 수정할 수 있습니다.
 
HTML 분석: 추출하는 방법을 설명하기 전에, 
  - 실시간 검색어 순위 페이지의 HTML 코드를 볼 줄 알아야합니다.
  - 아래에는 검색어 순위에 해당하는 부분의 코드만 캡쳐해 놓았습니다.
  - ul tag 들 중에서, class attribute가 'rank_list'를 가진 것이 실시간 검색어를 가지고 있습니다. 
  - 일단 이 ul tag를 찾기만 하면, 
  - 그 안에 span tag들이 여러 개 들어있는데, 이 tag의 값들이 모두 검색어에 해당합니다.
  - span tag들은 모두 20개 있고,
  - 이것은 실시간 상위 검색어 20에 해당합니다.
 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 
ㅇ Beautiful Soup
  - python에서는 HTML 문서 파싱을 아주 쉽게 할 수 있는 beautiful soup 모듈을 제공합니다.
  - 이 모듈은 html 문서를 tree구조로 만들에서,
  - 손쉽게 원하는 영역을 찾고, 특정 값을 추출할 수 있도록 합니다.
  - 이 프로그램도 beautifulsoup을 이용할 것입니다.
 
ㅇ 프로그램 구조
  - 아주 간단합니다.
  - 네이버 실시간 검색어 페이지를 다운로드 받고,
  - 결과를 파싱해서, 실시간 검색어 20개를 찾아내어 출력합니다.
 
ㅇ 실시간 검색어 페이지 다운로드
  - Python에서 제공하는 requests 모듈을 이용하면 1줄로 짤 수 있습니다.
  - 아래 코드의 line 30에 해당하는 부분입니다.
 
ㅇ HTML 파싱
  - 이제 Beautifulsoup이 등장할 순서입니다.
  - 다운로드 받은 웹페이지를 파싱하는데, 
  - 이것도 1줄이면 됩니다.
  - 아래 코드의 line 32에 해당합니다.
 
ㅇ 검색어 부분 추출
  - 이것도 간단하게 생각하면 됩니다.
  - 앞서 HTML 구조에서 설명했듯이, ul tag 들 중에서 class attribute가 'rank_list'인 것만 찾으면 된다.
  - 이 과정은 line 37 ~ 48에 해당합니다.
   
ㅇ 검색어만 출력하기
  - ul tag 안에 들어있는
  - span tag 들을 모두 찾으면,
  - 그 tag의 contents가 바로 실시간 검색어입니다.
  - span tag는 모두 20개이고, 상위 20개 인기 검색어에 해당합니다.
  - 이 과정은 line 50 ~ 55에 해당합니다.
 
ㅇ 파싱과정에서 다소 지저분한 디테일들과 한글처리 관련 주의사항이 있는데,
  - 아래 코드의 comment에 설명해 놓았습니다.
  - 코드는 바로 붙여넣기 한 후에 실행할 수 있습니다.
  - 다만, Beautifulsoup이 없다면, 먼저 설치해야 합니다.
    . 설치 방법에 대해서는 인터넷을 검색하면 됩니다. 
 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# -*- coding: utf-8 -*-

# 네이버 실시간 검색어 크롤링 
# 
# 네이버에서 제공하는 실시간 인기 검색어 상위 20개를
# 자동추출하는 프로그램 
#
# 크롤이 대상 웹페이지: 아래 주소에서 실시간 검색어 정보를 얻을 수 있다.
# URL: http://datalab.naver.com/keyword/realtimeList.naver?where=main
# 
# 찾는 방법: 읽어 온 문서를 파싱해서 검색어를 찾는 과정은 다음과 같다.
# ul tag를 모두 찾고,
# class attribute가 rank_list인 것을 찾고,
# span tag안에 들어있는 실시간 검색어를 추출
#
#
# 사용모듈
# requests: HTTP request와 response, 네트워크를 통해웹페이지 접속
# BeautifulSoup: 웹페이지를 파싱 
#
# 주의사항: 
# Beautiful soup이 반환하는 값은 배열 안에 들어가 있음
# index[0]이 맨 앞에 들어 있는 값임.
#
#
import requests
from bs4 import BeautifulSoup

# 실시간 검색어를 제공하는 웹이지를 읽음
response = requests.get('http://datalab.naver.com/keyword/realtimeList.naver?where=main')
# 웹페이즈를 파싱
dom = BeautifulSoup(response.text, 'html.parser')

#print(response.text)  # for debugging

# ul tag를 모두 찾음
result = dom.find_all('ul')

#print result # for debugging

for res in result:
    
    #print(str(res['class']))  # for debugging
    #print "-------------------------\n"  # for debugging

    # 실시간 검색어를 출력한다.
    # class attribute의 값이 rank_list인 경우에,
    if res['class'][0] == 'rank_list':
        # 검색어가 들어있는 span tag를 모두 찾아서,
        keywords = res.find_all('span')
        # span tag의 contents 중 첫번째 [0] 요소를 출력하면 된다.
        # 한글을 올바르게 출력하기 위해서는 
        # 이 파일의 맨 위에 utf-8 coding임을 코멘트로 명시
        for key in keywords:  # 상위 20개의 실시간 검색어가 들어있다.
            print key.contents[0]
        break
 
 
ㅇ 위의 Python 코드를 실행한 결과입니다.
  - 20개의 실시간 인기 검색어가 나온 것을 볼 수 있습니다.

 
 

naver4.py

출처: http://swprog.tistory.com/entry/네이버-실시간-검색어를-자동-추출하는-방법 [소프트웨어 개구리]

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
» 네이버 실시간 검색어를 자동 추출하는 방법 file 졸리운_곰 2017.11.14 631
196 공공 데이터 csv 파일로 저장하기 [3] 졸리운_곰 2017.10.10 663
195 공공 데이터 csv 파일로 저장하기 [2] 졸리운_곰 2017.10.10 559
194 공공 데이터 csv 파일로 저장하기 [1] 졸리운_곰 2017.10.10 517
193 The Ultimate Flask Front-End - Part 2 file 졸리운_곰 2017.10.06 841
192 The Ultimate Flask Front-End file 졸리운_곰 2017.10.06 464
191 Python - Way to recursively find and replace string in text files 졸리운_곰 2017.08.30 478
190 A Flask API for serving scikit-learn models file 졸리운_곰 2017.08.22 380
189 Create a scikit-learn based prediction webapp using Flask and Heroku file 졸리운_곰 2017.08.22 454
188 웹서버 중에서 Django를 선택한 이유 졸리운_곰 2017.08.22 1306
187 파이선 애드온을 이용한 블랜더 2.6 : Creating a Blender 2.6 Python add-on file 졸리운_곰 2017.08.15 483
186 blender import/export script 졸리운_곰 2017.08.13 1594
185 blender python 퀵스타드 매뉴얼 : blender python quick start 졸리운_곰 2017.08.13 1394
184 블랜더 파이썬 애드온 개발 : blender python addon dev file 졸리운_곰 2017.08.13 3386
183 Python Scripting for the Blender Game Engine file 졸리운_곰 2017.08.13 736
182 Cinema 3 - (Extremely Simplified) Example of Microservices in Python file 졸리운_곰 2017.08.03 395
181 python Collada dae file Reading : 파이썬으로 콜라다 dae 파일 분석 file 졸리운_곰 2017.08.01 1064
180 How to deploy python-flask in wampserver file 졸리운_곰 2017.07.22 529
179 Welcome to Flask-MySQLdb’s documentation! 졸리운_곰 2017.07.22 352
178 Flask에서 SQLAlchemy 사용하기 졸리운_곰 2017.07.22 502
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED