[Stockping #1] 파이썬 네이버 뉴스 데이터 수집하기
my code archive
article thumbnail
반응형

진행 중인 파이썬 프로젝트에서 내가 맡은 파트는 경제 뉴스 기능이다.

네이버 API 중 검색/뉴스 API를 활용하여 주식 관련 뉴스를 수집하고 화면에 보여줄 것이다.

 

네이버 검색>뉴스 API 관련 내용

https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4

 

검색 > 뉴스 - Search API

검색 > 뉴스 뉴스 검색 개요 개요 검색 API와 뉴스 검색 개요 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 쇼핑, 영화, 웹 문서, 전문정보, 지식iN, 책, 카페글 등 분야별로 볼 수 있는 API

developers.naver.com

요청 URL

요청 파라미터

검색어에 해당하는 'query' 파라미터만 필수이고 나머지는 선택이다.


1. 검색 API 신청, client ID, client Secret 발급

 

2. API 관련 비밀번호는 노출되면 안 되니까 config.json 파일에 작성하여 관리하고 .gitignore에 추가한다.

이런 식으로 작성하고

{
    "NAVERAPI": {
        "CLIENT_ID": "네이버 클라이언트 ID",
        "CLIENT_SECRET": "네이버 클라이언트 Secret"
    },
    "DB": {
        "username": "오라클 username",
        "password": "오라클 password",
        "dsn": "stockping_high"
    }
}

불러올 때에는 파이썬 코드에 아래와 같이 불러오면 된다.

with open('config.json 경로', 'r') as f:	//r : 읽어오겠다.
    config = json.load(f)
db_info = config['DB']

3. 코드 작성

네이버 검색 API 사용 시에는 무조건!! request.add_header를 사용해서 client ID, client Secret을 담아서 요청해야 한다.

def get_request_url(url):
    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id",api_info['client_id'])
    request.add_header("X-Naver-Client-Secret",api_info['client_secret'])
    try:
        response = urllib.request.urlopen(request) # 정보 추출
        if response.getcode() == 200:              # OK(성공)
            print("[%s] Url Response Success" % datetime.datetime.now())
            response_body = response.read()
            news_list = response_body.decode('utf-8')   # 추출한 정보가 담겨져 있음
            print(news_list)
            return news_list
    except Exception as e:
        print(e)
        print("[%s] Error for URL : %s" % (datetime.datetime.now(), url))
        return None

검색어는 '주식', json 형식으로 리턴하겠다.

def getNaverSearchResult(sNode, search_text, page_start, display):
    base = "https://openapi.naver.com/v1/search"
    node = "/%s.json" % sNode

    parameters = "?query=%s&start=%s&display=%s" % (urllib.parse.quote(search_text), page_start, display)

    url = base + node + parameters

    retData = get_request_url(url)

    if(retData == None):
        return None
    else:
        # print(retData)
        return json.loads(str(retData)) # JSON 형식으로 리턴
        
   ....
   sNode = 'news'
   search_text = '주식'
   display_count = 100

 

실행하면 아래와 같이 JSON 형식으로 불러오기 성공!

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형