네이버 오픈 API 이용하기

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음성인식, 음성합성 등이 있습니다.

developers.naver.com

네이버 오픈 API에서는 다양한 서비서 API를 제공한다. 통합 검색어 트렌드 및 쇼핑인사이트를 위한 데이터랩API, 검색API, 단축URL, 지도 뿐만아니라 파파고 번역, Clova얼굴인식 기능도 사용할 수 있다. 우리는 이 중 특정 단어가 들어가 있는 뉴스를 검색하기 위해 '검색 API를 사용하여 네이버 뉴스를 긁어올 것이다.

 

 

먼저 네이버 검색 API를 사용하기 위해 API이용 신청을 해준다.

 

 

오픈 API 이용 신청을 클릭하면 아래와 같은 창이 뜬다.

애플리케이션 이름에는 아무 애플리케이션 이름을 써도 된다. 검색 API를 통해 오픈 API를 신청하려고하니 사용 API에는 검색이 자동으로 선택되어져 있으며, 이외에도 다른 API를 이용하고 싶으면 추가적으로 선택할 수 있다. 비로그인 오픈 API서비스 환경에는 Android, iOS, WEB환경이 있는데 사용 목적에 맞게 선택해주면 된다.

 

이때 WEB 설정을 선택하게 되면, 오픈 API를 사용할 URL을 입력하라고 한다. localhost에서 사용하고 싶으면, http://localhost 를 입력한 후 추가하면 된다.

 

 

이렇게 최종적으로 등록하게 되면, 애플리케이션 정보로 Client ID와 Client Secret를 발급받을 수 있다.

 

 

 

네이버 기사 크롤링하기

이렇게 네이버 검색 API이용을 위한 client id와 sectret를 발급 받으면, 네이버 뉴스 검색 결과를 출력해주는 REST API를 통해 활용할 수 있다. 하단의 링크를 통해 들어가면, Java, PHP, Node.js, Python, C# 으로 활용할 수 있는 가이드라인이 제시되어 있다.

 

검색 API 블로그 검색 개발가이드

NAVER Developers - 검색 API 블로그 검색 개발가이드

developers.naver.com

import os 
import sys 
import urllib.request 
import requestsclient_id = " " 
client_secret = " " 
encText = urllib.parse.quote(" ")

우선 필요한 모듈을 import해주고, API신청을 통해 발급받은 client id와 client secret를 각각 집어넣어준다. 그리고 검색할 키워드를 encText의 인자로 입력해준다.

 

url = "https://openapi.naver.com/v1/search/news?query=" + encText

이렇게 검색 키워드를 입력하면, 입력받은 키워드를 바탕으로 url 주소를 구성한다.

 

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): 
    result = requests.get(response.geturl(), headers = {"X-Naver-Client-Id":client_id, "X-Naver-Client-Secret":client_secret}) 
    news_data.append(result.json())

이후 url에 접속하여 respond를 받아오면, 정상적으로 실행되었을 시에 뉴스 데이터를 가져온다. 그렇게 해서 가져온 데이터는 json의 형태를 띈다. 아래 출력한 데이터를 잘 보면, 단어를 검색했을 때 한 페이지 당 뉴스를 10개씩 가져오는 것을 알 수 있다. 그리고 뉴스의 기사제목과, 링크, 날짜, 요약한 내용을 볼 수 있다. 

우리는 naver 뉴스를 통해 기사를 크롤링 한 것이 아니라 검색 API, 즉 네이버 검색을 통해 기사를 불러왔으므로 네이버 뉴스가 아닌 다른 포털사이트의 뉴스가 섞여 있을 수도 있다. 이를 구별하기 위해 link에 naver가 있는지 확인함으로써 네이버 뉴스인지 구별할 수 있다.

 

naver_news_link = [] 
for item in news_data[0]['items']: 
    link = item['link']
    if "naver" in link: 
        naver_news_link.append(link)

news_data는 리스트 형태, 그 안의 데이터는 json (python에서 dict형태)임을 인지한다. link는 items의 속성 안에 들어가있으므로 for문을 통해 news_data의 첫번째 요소에서 items에서 link를 하나씩 가져온다. link속에 naver라는 단어가 들어가있으면 네이버 뉴스의 링크이므로 이를 새로운 리스트에 할당한다.

웹을 통해서가 아닌 Android나 iOS를 통해서 기사를 가져올때는, 많은 기사들이 네이버 뉴스의 형태를 사용하므로 일일이 기사에 맞춰 새롭게 코드를 짤 필요없이 네이버 뉴스의 규격에 맞춰 코드를 짜면 쉽게 다양한 뉴스를 받아올 수 있다.

이 외에도 페이지 범위를 늘려 좀 더 많은 기사를 불러오거나, 더 많은 키워드로 검색해 특정한 뉴스만을 가져올 수도 있다.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기