검색어로 검색된 뉴스의 결과를 날짜별로 집계하는 방법을 알아보겠습니다.
1. 네이버 개발자센터 API이용신청
2. client_id, client_secret 확인
3. 예제 코드 실행 및 결과확인
4. 응용 : 뉴스 검색어 날짜별 건수 집계
1. 네이버 개발자센터 API이용신청
네이버 API를 이용하기 위해서는 가입 및 이용신청이 되어 있어야 합니다.
2. client_id, client_secret 확인
아래의 방법으로 확인이 가능하며 미리 알고 있다면 스킵하시면 됩니다.
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()
이상으로 검색어로 검색된 뉴스의 결과를 날짜별로 집계하는 방법을 알아보았습니다.
'API' 카테고리의 다른 글
[네이버 개발자센터 API] 키워드로 블로그 순위에 들어갈 비율을 추정 (9) | 2022.10.06 |
---|---|
[네이버 개발자센터 API] 영화 검색어의 국가별 Top3 영화 및 평점 가져오기 (6) | 2022.10.05 |
[네이버 개발자센터 API] client_id, client_secret확인 (4) | 2022.10.04 |
[네이버 개발자센터 API] 블로그 API를 이용해서 나의 포스팅 순위 검색(파이썬) (19) | 2022.10.03 |
[네이버 개발자센터 API] 검색 블로그 데이터 가져오기(파이썬) (4) | 2022.10.03 |