본문 바로가기
Python/Python_Crawling

네이버 API : 파이썬 코딩

by Mr.DonyStark 2024. 1. 21.

 

위와 같이 네이버 API 와 postman으로 데이터를 요청하고 받을 수 있음.

이러한 방식과 같이 네이버 API와 파이썬으로 데이터를 요청하고 받고자함.

※ 준비사항

 ① naver application ID : X-Naver-Client-Id

 ② naver application PW : X-Naver-Client-Secret

 

□ 활용 라이브러리

  ○ requests : 해당 데이터를 특정서버에 요청하여 가져오는 라이브러리

  ○ pprint : 가시성 개선을 위한 출력을 위해 불러옴(json 형식으로 깔끔하게 출력해줌)

import requests # 해당 데이터를 특정서버에 요청하여 가져오는 라이브러리
import pprint #가시성 개선을 위한 출력을 위해 불러옴(json 형식으로 깔끔하게 출력해줌)

 

□ 변수 지정

  ○ X-Naver-Client-Id : 네이버 API application 등록시 제공 받은 ID

  ○ X-Naver-Client-Secret : 네이버 API application 등록시 제공 받은 pw(secrete code)

  ※ 위 2개는 보안에 유의하여 자기자신만 알도록 주의해야함 

  ○ 네이버 API 제공 주소(*json)

#변수값 지정 : 네이버 애플리케이션 등록시 발급받은 정보
personal_key = 'id' #X-Naver-Client-Id
personal_pw = 'pw' #X-Naver-Client-Secret

#get api 주소
target_api = 'https://openapi.naver.com/v1/search/news.json?query=검색값'

#헤더 변수값 : 딕셔너리형태
header_parames = {'X-Naver-Client-Id' : personal_key, 'X-Naver-Client-Secret' : personal_pw}

 

□ 네이버 API로 요청 데이터 보내기(위에 내용 이어서)

  ○ 아래 형태에 유의하여 지정할것

  ○ 변수명 = requests.get(api 주소가 담긴 변수, headers = X-Naver-Client id와 pw가 담긴 변수)

#정보 서버로 보내기 : .get 포스트맨에서 get과 동일한 기능
res_get = requests.get(target_api, headers = header_parames)

 

□ 데이터 변수 지정 / json 형태로 받는것이므로 .json() 으로 코딩

#데이터 변수지정 : json 형식으로 받으므로 .json() 으로 명시
get_data = res_get.json()

 

전체 코드 및 출력값

pprint.pprint 를 활용하여 json 형태를 가시성이 좋도록 출력

import requests # 해당 데이터를 특정서버에 요청하여 가져오는 라이브러리
import pprint #가시성 개선을 위한 출력을 위해 불러옴(json 형식으로 깔끔하게 출력해줌)

#변수값 지정 : 네이버 애플리케이션 등록시 발급받은 정보
personal_key = 'ID' #X-Naver-Client-Id
personal_pw = 'PW' #X-Naver-Client-Secret

#검색 키워드
target_word = input('검색기사 키워드 입력\t:\t')

#get api 주소
target_api = 'https://openapi.naver.com/v1/search/news.json?query='+target_word

#헤더 변수값 : 딕셔너리형태
header_parames = {'X-Naver-Client-Id' : personal_key, 'X-Naver-Client-Secret' : personal_pw}

#정보 서버로 보내기 : .get 포스트맨에서 get과 동일한 기능
res_get = requests.get(target_api, headers = header_parames)

#데이터 변수지정 : json 형식으로 받으므로 .json() 으로 명시
get_data = res_get.json()

#페이지 상태에 따른 기능동작처리
if res_get.status_code == 200:
    pprint.pprint(get_data) #pprint.pprint 를 활용하여 가시성 개선
    print('↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑순수 로우데이터↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑\n\n\n\n\n')
    print('↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓가공 데이터↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓')
    pprint.pprint(get_data['items'][0]['title'])  #키값이 items이며 0번째의 title을 출력
else:
    print(f'☆★☆★☆★☆★☆★오류발생\t:\t{res_get.status_code}')

 

 전체 코드 및 출력값(반복문 + enumerate 함수활용)

 

* enumerate 함수 및 index를 활용하여 출력내용별 index번호 표시

* 네이버 API에 요청하여 가져온 json 데이터 중 item 키에 속한 title과 link 데이터를 출력

import requests # 해당 데이터를 특정서버에 요청하여 가져오는 라이브러리
import pprint #가시성 개선을 위한 출력을 위해 불러옴(json 형식으로 깔끔하게 출력해줌)

#변수값 지정 : 네이버 애플리케이션 등록시 발급받은 정보
personal_key = 'ID' #X-Naver-Client-Id
personal_pw = 'PW' #X-Naver-Client-Secret

#검색 키워드
target_word = input('검색기사 키워드 입력\t:\t')

#get api 주소
target_api = 'https://openapi.naver.com/v1/search/news.json?query='+target_word

#헤더 변수값 : 딕셔너리형태
header_parames = {'X-Naver-Client-Id' : personal_key, 'X-Naver-Client-Secret' : personal_pw}

#정보 서버로 보내기 : .get 포스트맨에서 get과 동일한 기능
res_get = requests.get(target_api, headers = header_parames)

#데이터 변수지정 : json 형식으로 받으므로 .json() 으로 명시
get_data = res_get.json()

#페이지 상태에 따른 기능동작처리
if res_get.status_code == 200:
    #반복문을 활용하여 출력
    for index, v in enumerate(get_data['items']):  #데이터의 item 키를 범위로 반복문 실행 + enumerate 후 index로 출력값 앞에 번호를 맥임(range함수보다 개선된 함수)
        print(index+1, v['title'], v['link']) #item 키의 'title'와 'link' 값 출력
else:
    print(f'☆★☆★☆★☆★☆★오류발생\t:\t{res_get.status_code}')