2021.07.07 - [Python/여러가지] - [Python] 파이썬 크롤링 - BeautifulSoup을 이용한 크롤링
정보를 가져올때 크롤링을 이용하여 데이터를 추출하는 방법도 있지만
여러 웹사이트에서 제공하는 API를 이용하여 정보를 받아올 수 있다.
이번 포스트에서는 네이버 API를 이용하여 검색 정보를 받아오도록 하겠다.
1. 네이버 API 설정하기
https://developers.naver.com/main/
네이버 개발자센터. 해당 웹페이지에서 다양한 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를 다음과 같이 수정해준다.
#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문을 찍어보면
이렇게 잘 가지고 올 수 있다.
웹에서 실행시켜보면
이런 형태로 가지고 올 수 있다.
'Python > Django(장고)' 카테고리의 다른 글
[Python/Django] 파이썬 주식 정보(뉴스) 페이지 만들기 - 4. 네이버 금융 홈페이지 크롤링 1 (0) | 2021.07.13 |
---|---|
[Python/Django] 파이썬 주식 정보(뉴스) 페이지 만들기 - 3. 부트스트랩 (0) | 2021.07.12 |
[Python/Django] 파이썬 주식 정보(뉴스) 페이지 만들기 - 1. 구조 만들기 (2) | 2021.07.06 |
[Python/Django] 파이썬 장고로 웹페이지 만들기 - 4. DB 연결 (0) | 2021.07.05 |
[Python/Django] 파이썬 장고로 웹페이지 만들기 - 3. 모델, 어드민, 템플릿 태그 (0) | 2021.07.02 |