끄적거림

[API] Naver 뉴스 API로 데이터 받아오기 in python 본문

Python/Crawling

[API] Naver 뉴스 API로 데이터 받아오기 in python

Signing 2020. 11. 27. 17:29
728x90
반응형

[API]네이버데이터랩 api로 데이터 가져오기 in Python

[API]네이버데이터랩 api로 데이터 가져오기2 in Python


오랜만에 네이버 API 관련한 업무를 하다가 새로운 API 하게 되어 글을 쓰게 되었다.

 

먼저, 네이버의 API로 데이터를 받아오기 전 알아야할 주의사항이 있다.

  1. 검색 API를 사용
  2. 검색 결과로부터 최대 1000개까지의 결과만 가져옴
  3. 뉴스기사의 본문을 전부 가져오지는 못함. 대략 초입 3줄 정도?
  4. 일 최대 25,000번의 호출 가능
  5. 한 번 API 호출시 최대 100개의 결과값 수집 가능
  6. 최대로 수집해봤자 일부 중복되는 결과 발생

위의 주의사항을 먼저 알고 데이터를 수집하면 목적에 맞게 활용할 수 있을 것으로 생각한다.

 

1. API 신청하기

가장 먼저 할 것은 API를 신청하는 일이다.

이 작업은 기존의 포스팅에서도 다뤘기에 넘어가도록 한다.

 

 

2. Coding

import requests
import pandas as pd
import collections as co

client_id = "~~~" # 발급받은 ID
client_secret = "~~~~"  # 발급받은 비번

keyword = '빅데이터'
respond_type = 'json' # json, xml
Ndisplay = 100        # 한 번 호출할 때 가져오는 뉴스 수
sort_type = 'sim'     # 시간순 정렬:date, 관련도순 정렬: sim
start = 1

headers = {
	'X-Naver-Client-Id' : client_id,
    'X-Naver-Client-Secret':client_secret
}

우선 필요한 자원들을 설정한다.

 

search_word = re.sub('[^0-9a-zA-Zㄱ-힗]', ' ', keyword)
url = f"https://openapi.naver.com/v1/search/news.{encode_type}?query={search_word}&display={str(int(max_display))}&start={str(int(start))}&sort={sort}"

그리고나서, 어떤 단어에 대해 검색을 진행할지를 정한다.

 

이때, 검색어에 특수문자가 없는편이 검색할 때 오류날 가능성이 적기 때문에 위와 같은 전처리를 진행한다.

(참고: [문자열 다루기] 문자(한글, 영문)와 숫자만 남기고 특수문자 제거하기 in python)

 

후에 요청할 url을 위와 같이 설정해주면 준비는 끝난다.

 

r = requests.get(url, headers=headers)

if r.status_code == 200:
  if len(res) == 0:
    res = pd.DataFrame({
      'title': [None],
      'originallink': [None],
      'link': [None],
      'description': [None],
      'pubDate': [None]
    })
  else:
  	res = pd.DataFrame(r.json()['items'])
else:
	print('error with errorCode:' + r.status_code)

마지막으로, request를 날려서 결과물을 받아온다.

이때, API를 잘 활용하여 결과물을 잘 받아왔다면, 성공 코드로 200이 뜰 것이고,

무언가 에러가 나면 다른 코드가 뜰 것이다.

에러 코드는 아래와 같다

(에러코드 참고: developers.naver.com/docs/common/openapiguide/errorcode.md)

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments