본문 바로가기

Programming/Project

네이버 검색 API를 이용한 코로나, 부동산 뉴스 검색 - with Python

네이버에서는 검색 API를 제공하여 일 25,000건 한도로 검색엔진에 등록된 다음 데이터를 조회 할 수 있다.

 

네이버 검색 결과 컨텐츠

웹 서비스 또는 모바일 앱에 네이버 웹문서/블로그/뉴스/책/영화/카페글/지식iN/쇼핑/이미지/백과사전/전문자료 분야에 대한 검색 결과

 

지역 검색

‘OO역 맛집’, ‘OO동 술집’과 같은 검색 결과를 보여주고 싶을 때 사용하며, 네이버 지역 서비스에 등록된 각 지역별 업체 및 상호 검색 결과

 

검색 부가 기능

검색 부가 기능으로 특정 검색어에 대해 성인검색어 여부를 알려주는 기능과 검색창에 입력된 오타를 바로 잡아주는 오타변환 기능 제공

 

위에서 지원하는 기능 중 검색 결과 컨텐츠의 뉴스 검색 기능을 사용하여 파이썬으로 코로나, 부동산 관련 뉴스를 검색해주는 프로그램을 만들었다. 날짜순으로 최근 10건의 기사제목과 요약내용, 링크를 출력해 주도록 하며, 조정 가능하다.

 

검색 대상 세팅 : 검색어와 정렬기준 등의 정보를 세팅하고 메인함수를 호출하는 코드

def Set_Search():
    json_result = []
    req_query = ["코로나", "부동산"]
    req_display = '10'
    req_sort = 'date'
    req_target = ['news']  # 네이버 뉴스

    Search_main(req_target, req_query, req_display, req_sort, json_result)

 

검색 기능 MAIN : 전달받은 검색어와 세팅값을 기준으로 검색 결과를 받아오고 출력하는 코드

def Search_main(req_target, req_query, req_display, req_sort, json_result):

    for target_url in req_target:  # 검색섹션을 정한다
        json_result.clear()

        for target_query in req_query:  # 검색 키워드를 정한다
            target_query = target_query.rstrip('\n')
            print("\nKeyword is " + target_url + "_" + target_query + ".......")
            json_search = Set_Search_Option(target_url, target_query, 1, req_display, req_sort)
            if (json_search == None):
                json_result.append({'Keyword': "", 'Title': "", 'Description': "", 'Link': "", 'Date': ""})
                continue

            for post_data in json_search['items']:
                print("Title : " + post_data['title'])
                print("Summary : " + post_data['description'])
                print("Link : " + post_data['link']

 

검색 요청 URL 옵션 세팅 : MAIN에서 받아온 정보로 요청 URL을 만들어 주고 json 형식으로 리턴해주는 코드

def Set_Search_Option(target_url, search_keyword, page_start, display, sort):
    sleep(0.1)
    url = furl('https://openapi.naver.com/v1/search/' + target_url)
    url.args['query'] = search_keyword
    url.args['display'] = display
    url.args['sort'] = sort
    url.args['start'] = page_start

    print(url)
    ret_data = Get_Search_Result(url)

    if (ret_data == None):
        return None
    else:
        return json.loads(ret_data)

 

검색 Request : 위에서 최종적으로 세팅된 모든 결과를 취합하여 Request를 보내는 코드

def Get_Search_Result(req_url):
    request = urllib.request.Request(req_url)
    request.add_header("X-Naver-Client-Id", client_id)
    request.add_header("X-Naver-Client-Secret", client_secret)
    try:
        response = urllib.request.urlopen(request)
        rescode = response.getcode()

        if (rescode == 200):
            return response.read().decode('utf-8')
    except Exception as e:
        print(e)
        print("Error Code:" + str(req_url))
        return None

 

전체 코드와 실행 결과는 아래와 같다. 사용 방법이나 환경에 따라 검색어를 별도의 파일에서 읽어오게 바꿀수 있다.

결과를 저장해야 한다면 Response 값을 Dataframe으로 변환하여 DB나 엑셀 등으로 저장할 수 있다.

 

[검색 Code 본문]

# Naver API 이용 기본 import
import os
import urllib.request
from furl import furl
import json
import math
from time import sleep

import datetime
from datetime import datetime

# Naver API KEY
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"

# MAIN
def Set_Search():
    json_result = []
    req_query = ["코로나", "부동산"] # 검색어 설정
    req_display = '10' # 10개의 결과만 출력
    req_sort = 'date' # 날짜순으로 정렬
    req_target = ['news']  # 네이버 뉴스

    Search_main(req_target, req_query, req_display, req_sort, json_result)

def Search_main(req_target, req_query, req_display, req_sort, json_result):
	
    for target_url in req_target:  # 검색섹션을 정한다
        json_result.clear()

        for target_query in req_query:  # 검색 키워드를 정한다
            target_query = target_query.rstrip('\n')
            print("\nKeyword is " + target_url + "_" + target_query + ".......")
            json_search = Set_Search_Option(target_url, target_query, 1, req_display, req_sort)
            if (json_search == None):
                json_result.append({'Keyword': "", 'Title': "", 'Description': "", 'Link': "", 'Date': ""})
                continue

            for post_data in json_search['items']: # 검색 결과를 화면으로 출력
                print("Title : " + post_data['title'])
                print("Summary : " + post_data['description'])
                print("Link : " + post_data['link'])

# 검색 결과를 얻어옴
def Set_Search_Option(target_url, search_keyword, page_start, display, sort):
    sleep(0.1)
    url = furl('https://openapi.naver.com/v1/search/' + target_url)
    url.args['query'] = search_keyword
    url.args['display'] = display
    url.args['sort'] = sort
    url.args['start'] = page_start

    print(url)
    ret_data = Get_Search_Result(url)

    if (ret_data == None):
        return None
    else:
        return json.loads(ret_data)

# 검색 요청 보냄
def Get_Search_Result(req_url):
    request = urllib.request.Request(req_url)
    request.add_header("X-Naver-Client-Id", client_id)
    request.add_header("X-Naver-Client-Secret", client_secret)
    try:
        response = urllib.request.urlopen(request)
        rescode = response.getcode()

        if (rescode == 200):
            return response.read().decode('utf-8')
    except Exception as e:
        print(e)
        print("Error Code:" + str(req_url))
        return None

Set_Search()

 

[결과]

Keyword is news_코로나.......
https://openapi.naver.com/v1/search/news?query=%EC%BD%94%EB%A1%9C%EB%82%98&display=10&sort=date&start=1
Title : 남산케이블카, 한달간 발달장애인 위해 ‘파란빛’ 점등, <b>코로나</b>19 극복 기부...
Summary : 특별히 올해는 <b>코로나</b>19로 인해 어려움을 겪고 있는 발달장애인 및 소외계층을 지원하기로 해 그 취지와... 기쁘다”며, “<b>코로나</b>19로 힘든 시기를 보내고 있을 분들에게 실질적인 도움과 위로가 될 수 있기를 바란다”고... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=103&oid=025&aid=0002990096
Title : 부산시, 입국자 모두 3일 이내 전수검사
Summary : 부산시가 <b>코로나</b>19에 감염된 줄 모르고 입국하는 사람을 조기에 찾아내기 위해 입국자 모두를 대상으로... 안에 <b>코로나</b>19 검사를 주소지 보건소에서 받도록 하겠다”고 밝혔다. 부산시는 지금까지 질병관리본부의... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=028&aid=0002492167
Title : 정부, 긴급재난지원금 지원 대상 3월 건보료 기준
Summary : 윤종인 행정안전부 차관이 3일 오전 세종시 정부세종청사에서 <b>코로나</b>19 사태에 따른 긴급재난지원금 지급과 관련한 관계부처 합동 태스크포스(TF) 결과를 발표하고 있다. 연합뉴스 정부가 <b>코로나</b>19 위기 대응을 위해... 
Link : http://www.jejunews.com/news/articleView.html?idxno=2160903
Title : 이해찬 &quot;민주당·더시민에 힘 모아달라&quot;
Summary : 그는 &quot;민주당은 지금 <b>코로나</b>19 극복 전쟁과 경제 위기, 총선이라는 3가지 전쟁을 동시에 치루고 있다&quot;며 &quot;<b>코로나</b>19에 승리하고 경제 위기를 극복하려면 국민의 힘을 결집할 국정 안정이 절실하다&quot;고 강조했다. 이어... 
Link : http://www.newstomato.com/ReadNews.aspx?no=964057
Title : 한신 타이거즈 후지나미 신타로, <b>코로나</b>19 확진 전 여성 20명 포함된 파티 참...
Summary : 일본 프로야구(NPB) 한신 타이거즈 소속 투수 후지나미 신타로가 <b>코로나</b>19 확진 판정을 받은 가운데, 그가... 파티에서 <b>코로나</b>19 감염자가 발생했다고 보도했다. 보도에 따르면 지난달 14일 오사카 시내서 열린 파티에는... 
Link : http://www.topstarnews.net/news/articleView.html?idxno=755156
Title : 권노갑·정대철 등 동교동계 원로, 민주당 복귀 “이낙연 지원할 것”
Summary : 권 전 의원 등은 “우리가 겪어보지 못한 신종 <b>코로나</b>바이러스감염증(<b>코로나</b>19) 사태로 인한 국가적 위기 상황을 지켜보며 지금이야말로 민주당에 힘을 보태야 할 때라고 생각했다”고 입당 배경을 설명했다. 이들은... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=100&oid=025&aid=0002990095
Title : 교육부, 한전공대 법인설립 허가
Summary : 교육부는 지금까지 세차례나 심사위원회를 연기하다 이날 <b>코로나</b>19 관계로 화상회의를 열어 심사를... 한전은 총장 인선을 위해 당초 지난 2월 말에 인선위원회를 열 예정이었지만, <b>코로나</b>19로 연기했다. 한전은 이달 안에... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=079&aid=0003344768
Title : 제주 <b>코로나</b>19 7번째 확진자 3일 퇴원
Summary : 제주지역 <b>코로나</b>19 7번째 확진자가 3일 퇴원했다. 제주도는 도내 7번 확진자 A씨(26.여)가 3일 오후 퇴원함에... A씨는 지난달 24일 유럽 유학 중 귀국해 이 날 밤 10시쯤 제주에 들어왔는데 다음날인 25일 밤 <b>코로나</b>19... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=079&aid=0003344769
Title : 의정부성모병원, 75세 환자보다 발병 빠른 4명 확인
Summary : 방역 당국이 의정부성모병원 내 신종 <b>코로나</b>바이러스 감염증(<b>코로나</b>19) 집단감염과 관련해 처음 확진 판정을 받은 환자보다 발병일이 빠른 사례를 4명 확인했다고 밝혔다. 정은경 중앙방역대책본부장은 3일... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=005&aid=0001307632
Title : 초신성 윤학➝에버글로우 스태프, <b>코로나</b>19 확진..연예계 또 비상[종합]
Summary : 연예계에 다시 한 번 ‘<b>코로나</b>19’ 주의보가 내려졌다. 그룹 초신성 출신 가수 겸 연기자 윤학이 신종 <b>코로나</b>바이러스 감염증(<b>코로나</b>19) 확진 판정을 받아 연예계가 긴장에 휩싸였다. 걸그룹 에버글로우의 스태프 중 한 명... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=109&aid=0004187795

Keyword is news_부동산.......
https://openapi.naver.com/v1/search/news?query=%EB%B6%80%EB%8F%99%EC%82%B0&display=10&sort=date&start=1
Title : 블록체인 기반 혁신금융 서비스 뭐가 있나... 상반기 속속 출시
Summary : 프롭테크 스타트업 카사코리아는 <b>부동산</b> 신탁 수익증권을 기반으로 전자증권(DABS)을 발행하고 투자자가 이를 소액으로 거래할 수 있는 플랫폼을 구축해 운영하는 사업을 준비하고 있다. KB국민은행, KEB하나은행... 
Link : http://www.digitaltoday.co.kr/news/articleView.html?idxno=229233
Title : '구해줘!홈즈' 채정안 &quot;미모 비결? 체질에 맞는 독주 마신다&quot;
Summary : 또 채정안은 과거 방송을 통해 화제를 모았던 세련된 싱글 하우스에 대해 평소 집과 인테리어에 관심이 많아 <b>부동산</b>을 거의 매일 드나들다시피 했다고 한다. 관심사가 비슷한 사람들과 정보를 공유하면서 지금의 집에... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=112&aid=0003284922
Title : 종부세 완화 카드 '만지작'…<b>부동산</b> 정책 기류 바뀌나
Summary : 1가구 1주택자의 종합<b>부동산</b>세 경감이 필요하다는 목소리가 최근 여당에서도 잇달아 나오고 있습니다.... 규제 일변도였던 정부의 <b>부동산</b> 정책 궤도가 수정될지 주목됩니다. 문성필 기자의 보도입니다. &lt;기자&gt; 이낙연... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=215&aid=0000861604
Title : ‘구해줘 홈즈’ 채정안X노홍철, 싱글녀 약사 5억대 전셋집 찾기
Summary : 또 채정안은 과거 방송을 통해 화제를 모았던 세련된 싱글 하우스에 대해 평소 집과 인테리어에 관심이 많아 <b>부동산</b>을 거의 매일 드나들다시피 했다고 한다. 관심사가 비슷한 사람들과 정보를 공유하면서 지금의 집에... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=382&aid=0000810552
Title : 공모리츠 열올리던 증권사, 코로나19 여파에 '곤혹'
Summary : 국내외를 가리지 않고 상업용 <b>부동산</b> 시장 위축되면서 공모리츠 흥행 전망이 불투명해졌기 때문이다. 특히 증권사들은 기관투자가에 재매각(셀다운)하지 못했던 해외<b>부동산</b> 물량을 공모리츠를 통해 일반투자자들에게... 
Link : http://www.sisajournal-e.com/news/articleView.html?idxno=216513
Title : '구해줘!홈즈' 채정안X노홍철, 도심 속 싱글라이프를 위한 전셋집 찾기
Summary : 또 채정안은 과거 방송을 통해 화제를 모았던 세련된 싱글 하우스에 대해 평소 집과 인테리어에 관심이 많아 <b>부동산</b>을 거의 매일 드나들다시피 했다고 한다. 관심사가 비슷한 사람들과 정보를 공유하면서 지금의 집에... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=076&aid=0003550426
Title : 진주 민사전문변호사, “사해행위 취소소송, 입장에 맞는 대응전략 세워야”
Summary : 일상생활에서 <b>부동산</b> 거래가 빈번하게 이뤄지고 있는 만큼 그에 수반하는 문제도 꾸준히 발생하고 있다. <b>부동산</b> 거래 후 제삼자에 의해 계약이 취소될 수 있는 대표적인 사례이면서도 일반인들에게 생소한 것 중 하나가... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=277&aid=0004655453
Title : 사모펀드 먹잇감 된 푸르덴셜생명, '먹튀' 우려 잇따라
Summary : 아울러 “보험회사의 자산은 초장기 자산으로 <b>부동산</b>, 채권 등 정확한 평가가 이루어지지 않은 자산들이 많아 이를 재평가해 얼마든지 분식회계가 가능하다”며 “기존의 형성된 자산을 부풀릴 수 있는 여지는... 
Link : http://www.ceoscoredaily.com/news/article.html?no=68106
Title : 월급 적어도 제외 가능성…'긴급재난지원금' 누가 받나?
Summary : -김성완 시사평론가 &quot;중앙정부는 보편적 지원…지자체는 각 특성 따라 지원해야&quot; -장성철 공감과논쟁 정책센터 소장 &quot;선택적 지원 잘했으나 건보료 기준 모순 있어&quot; -성회용 SBS 논설위원 &quot;월급 적어도 <b>부동산</b>... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=055&aid=0000805466
Title : 민주당 박광온 후보 &quot;국정농단세력 퇴장해야&quot;
Summary : 국가예산이 투입되는 사업 전후로는 관련 <b>부동산</b>을 신규매입하지 못하도록 함으로써 직무수행과 관련한 사적 이익 추구를 원천 금지토록 할 계획이다. 이와 함께 국회윤리특별위원회를 강화하겠다고 밝혔다. 국회의원에... 
Link : https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=003&aid=0009794983

 

네이버 검색 API에 대한 보다 자세한 정보는 아래 사이트에서 확인 할 수 있다.

 

검색 API 뉴스 검색 개발가이드

NAVER Developers - 검색 API 뉴스 검색 개발가이드

developers.naver.com