본문 바로가기

API

[네이버 개발자센터 API] 뉴스 검색어의 날짜별 건수 가져오기(파이썬)

반응형

검색어로 검색된 뉴스의 결과를 날짜별로 집계하는 방법을 알아보겠습니다.

 

1. 네이버 개발자센터 API이용신청

2. client_id, client_secret 확인

3. 예제 코드 실행 및 결과확인

4. 응용 : 뉴스 검색어 날짜별 건수 집계

 

1. 네이버 개발자센터 API이용신청

네이버 API를 이용하기 위해서는 가입 및 이용신청이 되어 있어야 합니다.

https://yenpa.tistory.com/2

 

[네이버 개발자센터 API] API 이용신청 및 Application 등록방법

네이버 개발자센터에서 API 이용신청 및 Application을 등록하는 방법을 알아보겠습니다. 1. 사이트접속 2. 로그인 3. API 이용신청 및 Application 등록 4. 등록정보확인 1. 사이트 접속 아래의 네이버 개

yenpa.tistory.com

 

2. client_id, client_secret 확인

아래의 방법으로 확인이 가능하며 미리 알고 있다면 스킵하시면 됩니다.

https://yenpa.tistory.com/5

 

[네이버 개발자센터 API] client_id, client_secret확인

네이버 개발자센터 사이트내에서 나의 client_id, client_secret을 확인해보겠습니다. 1. client_id, client_secret확인 사이트 내에서 Products > 검색을 클릭합니다. 하단의 오픈 API 이용 신청으로 이동합니다..

yenpa.tistory.com

 

3. 예제 코드 실행 및 결과확인

사이트 내에서 Products > 검색을 클릭합니다.

 

 

좌측메뉴의 뉴스를 클릭합니다.

아래의 코드로 기본 뉴스의 데이터 수집이 가능합니다.

client_id, client_secret은 본인의 데이터 입력, query에는 검색할 단어를 입력하시면 됩니다.

import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
query='검색할 단어'
encText = urllib.parse.quote(query)
url = "https://openapi.naver.com/v1/search/news?query=" + encText # JSON 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

 

4. 응용 : 뉴스 검색어 날짜별 건수 집계

목표 : 검색하는 단어의 뉴스 결과 300개를 날짜순으로 수집. 

           수집된 300개의 데이터를 날짜별 뉴스 건수로 집계.

 

필요한 라이브러리를 import합니다.

import os
import sys
import urllib.request
import json
import pandas as pd

뉴스 API 결과를 수집하는 함수를 작성하겠습니다.

뉴스 결과중 response['item'] 의 결과만 DataFrame으로 변환 후에 return합니다.

def getresult(client_id,client_secret,query,display=10,start=1,sort='sim'):
    encText = urllib.parse.quote(query)
    url = "https://openapi.naver.com/v1/search/news?query=" + encText + \
    "&display=" + str(display) + "&start=" + str(start) + "&sort=" + sort

    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id",client_id)
    request.add_header("X-Naver-Client-Secret",client_secret)
    response = urllib.request.urlopen(request)
    rescode = response.getcode()
    if(rescode==200):
        response_body = response.read()
        response_json = json.loads(response_body)
    else:
        print("Error Code:" + rescode)

    return pd.DataFrame(response_json['items'])

client_id, client_secret은 본인의 데이터 입력이 필요합니다.

검색어는 '제주도 여행'으로 해보겠습니다.

client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
query = '제주도 여행'
display=100
start=1
#sort='sim'
sort='date'

result_all=pd.DataFrame()
for i in range(0,3):
    start= 1 + 100*i
    result= getresult(client_id,client_secret,query,display,start,sort)
    
    result_all=pd.concat([result_all,result])

 

result_all의 DataFrame의 Index를 초기화 하고,

날짜별 집계를 위해 pubDate타입을 datetime으로 변경후 'YYYYmmdd' Column을 생성합니다.

result_all=result_all.reset_index() # index가 100단위로 중복되는것을 초기화
result_all=result_all.drop('index',axis=1) # reset_index후 생기는 이전 index의 column을 삭제
result_all['pubDate']=result_all['pubDate'].astype('datetime64[ns]') # pubDate의 타입을 object에서 datetime으로 변경
result_all['Date'] = result_all['pubDate'].dt.strftime('%Y%m%d')#날짜별 집계를 위해 'YYYYmmdd' 타입의 column을 생성

신규로 생성한 'YYYYmmdd' Type인 Date Column으로 groupby를 해줍니다.

result_gr=result_all[['Date','title']].groupby(['Date']).count()
result_gr

제가 실행한 2022/10/04일의 결과입니다.

'제주도 여행' 이라는 검색어로 검색된 뉴스가 9/28은 83회 10/2은 18회가 검색이 되는것을 알수 있습니다.

마지막으로 그래프로 확인해보겠습니다.

import matplotlib.pyplot as plt

plt.bar(result_gr.index,result_gr['title'])
plt.xticks(rotation=90)
plt.show()

 

이상으로 검색어로 검색된 뉴스의 결과를 날짜별로 집계하는 방법을 알아보았습니다.

반응형