본문 바로가기
Python/Django(장고)

[Python/Django] 파이썬 주식 정보(뉴스) 페이지 만들기 - 2. 네이버 API를 이용하여 검색정보 받아오기

by 깐테 2021. 7. 8.

2021.07.07 - [Python/여러가지] - [Python] 파이썬 크롤링 - BeautifulSoup을 이용한 크롤링

 

[Python] 파이썬 크롤링 - BeautifulSoup을 이용한 크롤링

이번 포스트에서는 파이썬에서 자주 사용되는 BeautifulSoup을 이용한 크롤링을 해보려 한다. 1. 크롤링(Crawling) 무수히 많은 컴퓨터에 분산 저장되어 있는 문서를 수집하여 검색 대상의 색인으로 포

kante-kante.tistory.com

정보를 가져올때 크롤링을 이용하여 데이터를 추출하는 방법도 있지만

 

여러 웹사이트에서 제공하는 API를 이용하여 정보를 받아올 수 있다.

 

이번 포스트에서는 네이버 API를 이용하여 검색 정보를 받아오도록 하겠다.

 

 


1. 네이버 API 설정하기

 

https://developers.naver.com/main/

 

NAVER Developers

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

developers.naver.com

 

네이버 개발자센터. 해당 웹페이지에서 다양한 API를 제공한다.

 

파파고 번역 API, 검색 API, 클로바 등등 다양한 API를 제공하며

요즘 웹사이트들에서 많이 볼 수 있는 구글 로그인이라던지 하는 SNS 로그인들같은 서비스인 네이버 아이디로 로그인 서비스를 제공한다.

 

해당 웹사이트에서 상단의 Documents - 검색 API를 클릭하여 접속한다.

 

 

 

이후 오픈 API 이용 신청 버튼을 클릭하면

 

 

다음과 같은 페이지를 확인할 수 있다.

애플리케이션 이름에는 자신이 사용할 이름을 넣어주고, 사용 API에는 "검색"을 추가하여 등록해준다.

 

환경은 IOS, Android, WEB이 있는데 본인은 웹을 이용하여 진행할 것이므로 web을 눌러 추가해준다.

 

서비스 환경은 현재 로컬에서만 진행할것이므로 그냥 https://naver.com을 을 입력하여 추가하고 등록한다.

 

 

 

그럼 이렇게 클라이언트 ID 및 Secret Key를 받을 수 있다.

 

 

 

2. Django에서 설정하기

 

 

프로젝트 폴더 상단 루트폴더에 해당 폴더와 파일을 만들어준다.

 

다음과 같이 폴더와 json파일을 만들어 주는 이유는

API들같은 경우에는 하루에 사용 제한량이 있다. 네이버 API에도 사용 제한량이 있는데 특히 비용을 지불하고 사용하는 API의 경우에는 키가 외부로 유출될 경우 API 남용에 의해 생각지도 못한 비용이 청구될 수 있다.

 

이러한 남용을 방지하고자 다음과 같이 만들어준다.

 

 

 

 

그리고 아까 발급받은 ID, Secret Key를 넣어주고 저장한다.

 

#config/settings.py

from pathlib import Path
import sys,os

#add
import json
from django.core.exceptions import ImproperlyConfigured

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

#add
ROOT_DIR = os.path.dirname(BASE_DIR)
SECRET_DEBUG_FILE = os.path.join(ROOT_DIR, '.config_secret/settings_debug.json')

 

그리고 장고에서 settings.py를 다음과 같이 수정해준다.

 

 

네이버 검색 API 코드 예제

#views.py

def search(request):
    if request.method == 'GET':
        
        config_secret_debug = json.loads(open(settings.SECRET_DEBUG_FILE).read())
        client_id = config_secret_debug['NAVER']['CLIENT_ID']
        client_secret = config_secret_debug['NAVER']['CLIENT_SECRET']

        q = request.GET.get('q')
        encText = urllib.parse.quote("주가".format(q))
        url = "https://openapi.naver.com/v1/search/news?query=" + encText  # json 결과
        news_api_request = urllib.request.Request(url)
        news_api_request.add_header("X-Naver-Client-Id",client_id)
        news_api_request.add_header("X-Naver-Client-Secret",client_secret)
        response = urllib.request.urlopen(news_api_request)
        rescode = response.getcode()
        if (rescode == 200):
            response_body = response.read()
            result = json.loads(response_body.decode('utf-8'))
            items = result.get('items')

            context = {
                'items': items
            }
        return render(request, 'stock/search.html', context=context)

 

네이버 검색 API에 있던 코드를 약간 수정해주었다.

 

encText 내부에 검색할 단어를 적어주면 해당 단어와 관련된 기사들의 정보를 가져올 수 있다.

 

위 예제코드로 print문을 찍어보면

 

 

이렇게 잘 가지고 올 수 있다.

 

웹에서 실행시켜보면

 

 

이런 형태로 가지고 올 수 있다.

반응형