[제로베이스] 네이버 API 기초

한결·2024년 1월 16일
0
post-thumbnail

네이버API 링크


시작하기

# 네이버 검색 API 예제 - 블로그 검색
import os
import sys
import urllib.request
client_id = "ZU17aTKzYOA3OF24Ju6j"
client_secret = "w_B7W5KFAr"
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/book?query=" + encText # JSON 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # XML 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)
{
	"lastBuildDate":"Tue, 16 Jan 2024 09:29:58 +0900",
	"total":960,
	"start":1,
	"display":10,
	"items":[
		{
			"title":"Do it! 점프 투 파이썬 (중학생도 첫날부터 실습하는 초고속 입문서)",
			"link":"https:\/\/search.shopping.naver.com\/book\/catalog\/40354085633",
			"image":"https:\/\/shopping-phinf.pstatic.net\/main_4035408\/40354085633.20230927071024.jpg",
			"author":"박응용",
			"discount":"18414",
			"publisher":"이지스퍼블리싱",
			"pubdate":"20230615",
			"isbn":"9791163034735",
			"description":"프로그래밍 분야 8년 연속 베스트셀러!\n《Do it! 점프 투 파이썬》 전면 개정 2판 출시!\n\n중고등학생도, 비전공자도, 직장인도 프로그래밍에 눈뜨게 만든 바로 그 책이 전면 개정 2판으로 새롭게 태어났다! 챗GPT를 시작으로 펼쳐진 생성 AI 시대에 맞춰 설명과 예제를 다듬고, 최신 경향과 심화 내용을 보충했다. 또한 이번 개정 2판도 50만 코딩 유튜버인 조코딩과 협업을 통해 유튜브 동영상을 제공해 파이썬을 더 쉽게 공부할 수 있다.\n\n8년 연속 베스트셀러! 위키독스 누적 방문 300만! 독자의 입에서 입으로 전해진 추천과 수많은 대학 및 학원의 교재 채택을 통해 검증은 이미 끝났다. 코딩을 처음 배우는 중고등학생부터 코딩 소양을 기르려는 비전공자, 자기계발에 진심인 직장인까지! 이 책과 함께 파이썬 프로그래밍의 세계로 ‘점프’해 보자!"
		},
		{
			"title":"파이썬 머신러닝 완벽 가이드 (다양한 캐글 예제와 함께 기초 알고리즘부터 최신 기법까지 배우는)",
			"link":"https:\/\/search.shopping.naver.com\/book\/catalog\/32485894885",
			"image":"https:\/\/shopping-phinf.pstatic.net\/main_3248589\/32485894885.20230620101232.jpg",
			"author":"권철민",
			"discount":"33480",
			"publisher":"위키북스",
			"pubdate":"20220421",
...
			"description":"코딩 실력을 키우는 지름길은 실습이다.\n\n2008년 즈음에 검인정 중학교 교과서 정보1, 정보2, 정보3을 공저로 저술하였습니다. 그 당시에 8종류의 교과서가 검인정에 합격하였는데, 파이썬을 기반으로 하는 교과서가 2종류, C언어를 기반으로 하는 교과서가 2종류, 베이직을 기반으로 하는 교과서가 2종류, 스크래치를 기반으로 하는 교과서가 2종류였습니다.\n\n교육용 언어로 시작한 파이썬이 중학교 학생들이 비교적 쉽게 학습할 수 있는 프로그래밍 언어라고 생각했는데 10여년의 세월이 흐른 지금 파이썬이 활용되는 분야가 가히 폭발적으로 증가하였습니다. \n\n파이썬에 관한 쉽고 좋은 교재를 저술하기 위해서 인터넷에서 30,000페이지 이상의 자료를 찾아서 검토하였습니다. 어쩌면 파이썬이 첫 프로그래밍 언어일 본 교재의 독자들이 두려움 없이 파이썬을 기초부터 쉽게 공부하다가, 교재를 다 읽고 나면 “어느새 중급 수준에 도달했구나”라는 생각이 들도록  완성도 높은 교재를 목표로 하였습니다. \n\n입문자를 대상으로 하는 교재일수록 집필하는데 훨씬 더 많은 정성과 노력이 필요하다는 것을 잘 알고 있습니다. 개인적으로는 데이터베이스 전공교재를 저술할 때보다 몇 배 더 힘들었고, 공을 많이 들였습니다. \n\n원고를 버전 9까지 작성하는 동안 셀 수 없이 원고를 읽어보면서 꼭 필요하지 않은 문장은 삭제하고, 필요한 문장은 반드시 넣었습니다. 고등학교 검인정 교과서 1권, 중학교 검인정 교과서 3권, 데이터베이스 전공 교재 2권, 엑셀 교재 1권, 번역서 2권을 집필하면서 나름대로 한글을 정확하고 간결하게 표현하는데 자신이 있습니다."
		}
	]
}

response, response.getcode(), response.code, response.status
(<http.client.HTTPResponse at 0x109a9d2b0>, 200, 200, 200)

print(response_body.decode("utf-8"))
{
	"lastBuildDate":"Tue, 16 Jan 2024 09:29:58 +0900",
	"total":960,
	"start":1,
	"display":10,
	"items":[
		{
			"title":"Do it! 점프 투 파이썬 (중학생도 첫날부터 실습하는 초고속 입문서)",
			"link":"https:\/\/search.shopping.naver.com\/book\/catalog\/40354085633",
			"image":"https:\/\/shopping-phinf.pstatic.net\/main_4035408\/40354085633.20230927071024.jpg",
			"author":"박응용",
			"discount":"18414",
			"publisher":"이지스퍼블리싱",
			"pubdate":"20230615",
			"isbn":"9791163034735",
			"description":"프로그래밍 분야 8년 연속 베스트셀러!\n《Do it! 점프 투 파이썬》 전면 개정 2판 출시!\n\n중고등학생도, 비전공자도, 직장인도 프로그래밍에 눈뜨게 만든 바로 그 책이 전면 개정 2판으로 새롭게 태어났다! 챗GPT를 시작으로 펼쳐진 생성 AI 시대에 맞춰 설명과 예제를 다듬고, 최신 경향과 심화 내용을 보충했다. 또한 이번 개정 2판도 50만 코딩 유튜버인 조코딩과 협업을 통해 유튜브 동영상을 제공해 파이썬을 더 쉽게 공부할 수 있다.\n\n8년 연속 베스트셀러! 위키독스 누적 방문 300만! 독자의 입에서 입으로 전해진 추천과 수많은 대학 및 학원의 교재 채택을 통해 검증은 이미 끝났다. 코딩을 처음 배우는 중고등학생부터 코딩 소양을 기르려는 비전공자, 자기계발에 진심인 직장인까지! 이 책과 함께 파이썬 프로그래밍의 세계로 ‘점프’해 보자!"
		},
		{
			"title":"파이썬 머신러닝 완벽 가이드 (다양한 캐글 예제와 함께 기초 알고리즘부터 최신 기법까지 배우는)",
			"link":"https:\/\/search.shopping.naver.com\/book\/catalog\/32485894885",
			"image":"https:\/\/shopping-phinf.pstatic.net\/main_3248589\/32485894885.20230620101232.jpg",
			"author":"권철민",
			"discount":"33480",
			"publisher":"위키북스",
			"pubdate":"20220421",
...
			"description":"코딩 실력을 키우는 지름길은 실습이다.\n\n2008년 즈음에 검인정 중학교 교과서 정보1, 정보2, 정보3을 공저로 저술하였습니다. 그 당시에 8종류의 교과서가 검인정에 합격하였는데, 파이썬을 기반으로 하는 교과서가 2종류, C언어를 기반으로 하는 교과서가 2종류, 베이직을 기반으로 하는 교과서가 2종류, 스크래치를 기반으로 하는 교과서가 2종류였습니다.\n\n교육용 언어로 시작한 파이썬이 중학교 학생들이 비교적 쉽게 학습할 수 있는 프로그래밍 언어라고 생각했는데 10여년의 세월이 흐른 지금 파이썬이 활용되는 분야가 가히 폭발적으로 증가하였습니다. \n\n파이썬에 관한 쉽고 좋은 교재를 저술하기 위해서 인터넷에서 30,000페이지 이상의 자료를 찾아서 검토하였습니다. 어쩌면 파이썬이 첫 프로그래밍 언어일 본 교재의 독자들이 두려움 없이 파이썬을 기초부터 쉽게 공부하다가, 교재를 다 읽고 나면 “어느새 중급 수준에 도달했구나”라는 생각이 들도록  완성도 높은 교재를 목표로 하였습니다. \n\n입문자를 대상으로 하는 교재일수록 집필하는데 훨씬 더 많은 정성과 노력이 필요하다는 것을 잘 알고 있습니다. 개인적으로는 데이터베이스 전공교재를 저술할 때보다 몇 배 더 힘들었고, 공을 많이 들였습니다. \n\n원고를 버전 9까지 작성하는 동안 셀 수 없이 원고를 읽어보면서 꼭 필요하지 않은 문장은 삭제하고, 필요한 문장은 반드시 넣었습니다. 고등학교 검인정 교과서 1권, 중학교 검인정 교과서 3권, 데이터베이스 전공 교재 2권, 엑셀 교재 1권, 번역서 2권을 집필하면서 나름대로 한글을 정확하고 간결하게 표현하는데 자신이 있습니다."
		}
	]
}

URL 생성

# generate search url
def gen_search_url(api_node, search_text, start_num, disp_num):
    base = "https://openapi.naver.com/v1/search"
    node = "/" + api_node + ".json"
    param_query = "?query=" + urllib.parse.quote(search_text)
    param_start = "&start=" + str(start_num)
    param_disp = "&display=" + str(disp_num)

    return base + node + param_query + param_start + param_disp

gen_search_url("shop", "Test", 10, 3)
'https://openapi.naver.com/v1/search/shop.json?query=Test&start=10&display=3'

페이지에서 데이터 얻기

# Get data on one page
import json
import datetime

def get_result_onpage(url):
    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id", client_id)
    request.add_header("X-Naver-Client-Secret", client_secret)
    response = urllib.request.urlopen(request)
    print("[%s Url Request Success]" % datetime.datetime.now())
    return json.loads(response.read().decode("utf-8"))
client_id = "ZU17aTKzYOA3OF24Ju6j"
client_secret = "w_B7W5KFAr"

url = gen_search_url("shop", "몰스킨", 1, 5)
one_result = get_result_onpage(url)
[2024-01-16 09:44:32.074020 Url Request Success]

one_result
{'lastBuildDate': 'Tue, 16 Jan 2024 09:44:32 +0900',
 'total': 51959,
 'start': 1,
 'display': 5,
 'items': [{'title': '<b>몰스킨</b> 2024 다이어리 클래식 하드커버 위클리 라지 2024년 24년',
   'link': 'https://search.shopping.naver.com/gate.nhn?id=86678091959',
   'image': 'https://shopping-phinf.pstatic.net/main_8667809/86678091959.3.jpg',
   'lprice': '31080',
   'hprice': '',
   'mallName': '베스트펜',
   'productId': '86678091959',
   'productType': '2',
   'brand': '몰스킨',
   'maker': '몰스킨',
   'category1': '생활/건강',
   'category2': '문구/사무용품',
   'category3': '다이어리/플래너',
   'category4': '다이어리'},
  {'title': '[<b>몰스킨</b>] 2024년 클래식 다이어리 (12개월) (데일리, 위클리, 먼슬리)',
   'link': 'https://search.shopping.naver.com/gate.nhn?id=42344941884',
   'image': 'https://shopping-phinf.pstatic.net/main_4234494/42344941884.jpg',
   'lprice': '22680',
   'hprice': '',
   'mallName': '몰스킨공식온라인스토어',
   'productId': '42344941884',
...
   'maker': '몰스킨',
   'category1': '생활/건강',
   'category2': '문구/사무용품',
   'category3': '다이어리/플래너',
   'category4': '다이어리'}]}

데이터 프레임화

# Convert pandas data frame
one_result["items"][0]["title"]
import pandas as pd

#<b> 없애는 함수
def delete_tag(input_str):
    input_str = input_str.replace("<b>", "")
    input_str = input_str.replace("</b>","")
    return input_str

def get_fields(json_data):
    title = [delete_tag(each["title"]) for each in json_data['items']]
    link = [each["link"] for each in json_data['items']]
    lprice = [each["lprice"] for each in json_data['items']]
    mall_name = [each["mallName"] for each in json_data['items']]

    result_pd = pd.DataFrame({
        "title" : title,
        "lprice" : lprice,
        "link" : link,
        "mall" : mall_name,
    }, columns = ["title", "lprice", "link", "mall"])
    return result_pd
get_fields(one_result)


모든 데이터 수집

#All Data Gathering
result_mol=[]

for n in range(1, 1000, 100):
    url = gen_search_url("shop", "몰스킨", n, 100)
    json_result = get_result_onpage(url)
    pd_result = get_fields(json_result)

    result_mol.append(pd_result)

result_mol = pd.concat(result_mol)
[2024-01-16 10:14:02.705287 Url Request Success]
[2024-01-16 10:14:03.027512 Url Request Success]
[2024-01-16 10:14:03.312448 Url Request Success]
[2024-01-16 10:14:03.584808 Url Request Success]
[2024-01-16 10:14:03.857164 Url Request Success]
[2024-01-16 10:14:04.151237 Url Request Success]
[2024-01-16 10:14:04.446321 Url Request Success]
[2024-01-16 10:14:04.839311 Url Request Success]
[2024-01-16 10:14:05.152430 Url Request Success]
[2024-01-16 10:14:05.428669 Url Request Success]
result_mol.reset_index(drop=True, inplace=True)
result_mol.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   title   1000 non-null   object
 1   lprice  1000 non-null   object
 2   link    1000 non-null   object
 3   mall    1000 non-null   object
dtypes: object(4)
memory usage: 31.4+ KB
result_mol.head()

# 가격 float화
result_mol["lprice"] = result_mol["lprice"].astype("float")

# 엑셀로 저장하기
writer = pd.ExcelWriter("data/06_molskin_diary_in_naver_shop.xlsx", engine = "xlsxwriter")
result_mol.to_excel(writer, sheet_name="Shee1")

workbook = writer.book
worksheet = writer.sheets["Shee1"]
worksheet.set_column("A:A", 4)
worksheet.set_column("B:B", 60)
worksheet.set_column("C:C", 10)
worksheet.set_column("D:D", 10)
worksheet.set_column("E:E", 50)
worksheet.set_column("F:F", 10)

worksheet.conditional_format("C2:C1001", {"type":"3_color_scale"})
writer.close()

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from matplotlib import rc
rc('font', family='Arial Unicode MS')
plt.figure(figsize=(15,6))
sns.countplot(
    data=result_mol,
    x= "mall",
    palette="RdYlGn",
    order = result_mol["mall"].value_counts().index
)
plt.xticks(rotation=90)
plt.show()

profile
낭만젊음사랑

0개의 댓글