import os
import sys
import urllib.request
client_id = "PZrVD40NyyLDiMYRkpA5"
client_secret = "seDyKO_3af"
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/blog?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":"Wed, 13 Mar 2024 14:40:08 +0900",
"total":457061,
"start":1,
"display":10,
"items":[
{
"title":"<b>파이썬<\/b>자격증 종류 및 체계적인 학습절차",
"link":"https:\/\/blog.naver.com\/iclick62\/223376341162",
"description":"#<b>파이썬<\/b>자격증 취업을 하기 위해서는 다양한 능력을 가지고 있어야 했습니다. 이론적인 지식은... 마지막으로 <b>파이썬<\/b>자격증에 도전하여 취득한 후 입사지원을 해 볼 생각이었습니다. 단기간에 취득할 수 있어야... ",
"bloggername":"연리지(連理枝)",
"bloggerlink":"blog.naver.com\/iclick62",
"postdate":"20240307"
},
{
"title":"<b>파이썬<\/b> 자격증 취득을 희망한다면",
"link":"https:\/\/blog.naver.com\/sow723\/223373911489",
"description":"빅데이터를 전문적으로 학습하기 전에 기초적인 <b>파이썬<\/b>을 배워야 했고 수강할만한 곳을 찾고 있었어요! <b>파이썬<\/b>이란 데이터 처리를 위한 프로그래밍 언어이기 때문에 기초적인 부분부터 실무에 도움이 될만한... ",
"bloggername":"Onelog",
"bloggerlink":"blog.naver.com\/sow723",
"postdate":"20240305"
},
{
"title":"<b>파이썬<\/b>자격증 종류 취득과정 및 수업방법",
"link":"https:\/\/blog.naver.com\/ppong_2\/223348347109",
"description":"빅데이터를 배우기 위해선 가장 기초적인 <b>파이썬<\/b>을 배워야 했습니다. 그래서 가장 먼저 <b>파이썬<\/b>자격증을 취득하게 되었어요. 개발자 수업을 듣기 위해 학원을 알아보았습니다. 생각보다 많은 곳이 있어서 가장... ",
"bloggername":"diary",
"bloggerlink":"blog.naver.com\/ppong_2",
"postdate":"20240208"
},
{
"title":"강남프로그래밍학원 체계적인 <b>파이썬<\/b> 수업 과정",
"link":"https:\/\/blog.naver.com\/aengpark\/223353556159",
"description":"그 중에서 AI 개발자가 필수적으로 배워둬야 한다는 <b>파이썬<\/b> 과목을 등록하기 위해 방문을 했어요.... 첫 수업에서는 <b>파이썬<\/b>에 대해 먼저 간략하게 소개를 해 주셨어요. 이건 문법이 다른 언어에 비해서 비교적... ",
"bloggername":"aeng’s",
"bloggerlink":"blog.naver.com\/aengpark",
"postdate":"20240214"
},
{
"title":"강남코딩학원 <b>파이썬<\/b> 기초부터 배운 수업과정",
"link":"https:\/\/blog.naver.com\/dmsdud0395\/223381229364",
"description":"처음에는 <b>파이썬<\/b> 준비, 연산자, 함수와 같은 이론을 배울 때라 화면을 보고 배우고, 따라하는 방식으로... 태어나 처음으로 <b>파이썬<\/b>을 접했기 때문에 이렇게 아주 기본적인 것부터 디테일하게 알려주는 수업... ",
"bloggername":"그럼에도 불구하고..",
"bloggerlink":"blog.naver.com\/dmsdud0395",
"postdate":"20240313"
},
{
"title":"코딩이 대세니까 엄마도 배운다 Do it! 첫 코딩 with <b>파이썬<\/b>",
"link":"https:\/\/blog.naver.com\/sweetten\/223368318203",
"description":"첫 코딩 with <b>파이썬<\/b> Do it! 첫 코딩 with <b>파이썬<\/b> 저자 정동균 출판 이지스퍼블리싱 발매 2021.01.15. 제가 코딩을 처음 학습하기 앞서 이 책을 고른 이유 바로 책 겉표지에 쓰여있는 세가지 장점이예요. 비유와... ",
"bloggername":"즐거운 봄하늘의 19호실",
"bloggerlink":"blog.naver.com\/sweetten",
"postdate":"20240228"
},
{
"title":"코딩 없이 챗GPT 대화만으로 <b>파이썬<\/b> 게임 개발하기 (f. 온라인... ",
"link":"https:\/\/blog.naver.com\/gptfrontier\/223335002844",
"description":"대화하며 <b>파이썬<\/b>으로 만든 벽돌깨기 게임입니다. 거의 오류 없이 코드를 만들어줘서 만드는데 한시간이 채 안 걸린 것 같습니다. 같이 한 번 보시죠~ 오늘은 자바 코딩엔 익숙하지만 <b>파이썬<\/b>은 잘 모르는... ",
"bloggername":"구름나무의 GPTier",
"bloggerlink":"blog.naver.com\/gptfrontier",
"postdate":"20240126"
},
{
"title":"(23.12.)2023년 KAIST 카이스트 사이버영재교육 <b>파이썬<\/b> 레벨... ",
"link":"https:\/\/blog.naver.com\/lwooh35\/223378758876",
"description":"작년에 SW코딩 한창 빠져있던 아들래미가 블록코딩 왠만한거 다 해보고 텍스트 코딩 해보고 싶다해서 먼저 <b>파이썬<\/b> 수업으로 사이버영재교육 2학기 수강을 했었어요. 보통 <b>파이썬<\/b>하고 C언어, 자바 순으로... ",
"bloggername":"초등 남아 형제와 휴양림 여행 즐기기",
"bloggerlink":"blog.naver.com\/lwooh35",
"postdate":"20240310"
},
{
"title":"초등고학년 수준에 맞춘 와이즈코딩 <b>파이썬<\/b>과정",
"link":"https:\/\/blog.naver.com\/nadash7\/223365755005",
"description":"와이즈코딩 <b>파이썬<\/b>과정은 시작합니다. 텍스트 코딩은 코드의 의미를 알아야 하며, 어느 부분에서 어떤... 그래서 와이즈코딩은 <b>파이썬<\/b>을 선택했습니다. <b>파이썬<\/b>은 입문용으로 적합한 텍스트 코딩-기초... ",
"bloggername":"와이즈코딩러닝센터",
"bloggerlink":"blog.naver.com\/nadash7",
"postdate":"20240226"
},
{
"title":"의정부코딩학원 자바 vs <b>파이썬<\/b> 어느 걸 배워야 할까?",
"link":"https:\/\/blog.naver.com\/xorbs6169\/223264584778",
"description":"자바 ( JAVA ) 와 <b>파이썬<\/b> ( PYTHON ) 에 대해서 알아보고 비교해보는 포스팅해볼게요 ! ✅ 언어의 종류 ✅ 자바 ( JAVA ) ✔️ 객체 지향 언어에요 ! ✔️ JVM에서 실행돼요 ! <b>파이썬<\/b> ( Python ) ✔️ 인터프리터... ",
"bloggername":"그건내과자야",
"bloggerlink":"blog.naver.com\/xorbs6169",
"postdate":"20231114"
}
]
}
import os
import sys
import urllib.request
client_id = "PZrVD40NyyLDiMYRkpA5"
client_secret = "seDyKO_3af"
encText = urllib.parse.quote("몰스킨")
url = "https://openapi.naver.com/v1/search/shop?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":"Thu, 04 Jan 2024 08:54:02 +0900",
"total":53806,
"start":1,
"display":10,
"items":[
{
"title":"스타벅스 2024년 <b>몰스킨<\/b> 다이어리 데일리 플래너 일기장 노트 스벅 카페 윈터 e프리퀀시",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=86963344737",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_8696334\/86963344737.41.jpg",
"lprice":"34000",
"hprice":"",
"mallName":"유니스스토어",
"productId":"86963344737",
"productType":"2",
"brand":"스타벅스",
"maker":"몰스킨",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"title":"<b>몰스킨<\/b> 2024 다이어리 클래식 소프트커버 데일리 포켓 2024년 24년",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=86678199160",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_8667819\/86678199160.3.jpg",
"lprice":"25200",
"hprice":"",
"mallName":"베스트펜",
"productId":"86678199160",
"productType":"2",
"brand":"몰스킨",
"maker":"몰스킨",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"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.1.jpg",
"lprice":"22680",
"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",
"productType":"2",
"brand":"몰스킨",
"maker":"",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"title":"<b>몰스킨<\/b> 2024 데일리 다이어리-하드 머틀그린 라지 각인 케이스포장 병행수입 아님",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=43052849828",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_4305284\/43052849828.20231006183518.jpg",
"lprice":"32760",
"hprice":"",
"mallName":"네이버",
"productId":"43052849828",
"productType":"1",
"brand":"몰스킨",
"maker":"몰스킨",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"title":"<b>몰스킨<\/b> 2024 위클리 다이어리 포켓 상품선택",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=44547674101",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_4454767\/44547674101.20231210142944.jpg",
"lprice":"32300",
"hprice":"",
"mallName":"네이버",
"productId":"44547674101",
"productType":"1",
"brand":"몰스킨",
"maker":"몰스킨",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"title":"<b>몰스킨<\/b> 2024 데일리 다이어리 포켓 상품선택",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=42473541158",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_4247354\/42473541158.20230907073601.jpg",
"lprice":"36000",
"hprice":"",
"mallName":"네이버",
"productId":"42473541158",
"productType":"1",
"brand":"몰스킨",
"maker":"몰스킨",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"title":"2024 스타벅스 다이어리 프리퀀시 플래너 <b>몰스킨<\/b> 노트",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=86999511116",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_8699951\/86999511116.5.jpg",
"lprice":"27400",
"hprice":"",
"mallName":"파이영",
"productId":"86999511116",
"productType":"2",
"brand":"",
"maker":"",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"title":"스타벅스 2024년 다이어리 언데이티드 위클리 플래너 블랙 <b>몰스킨<\/b> 노트 스벅 카페 프리퀀시",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=86969511712",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_8696951\/86969511712.19.jpg",
"lprice":"34000",
"hprice":"",
"mallName":"유니스스토어",
"productId":"86969511712",
"productType":"2",
"brand":"스타벅스",
"maker":"몰스킨",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
},
{
"title":"2024 스타벅스 다이어리 카멜 플래너 프리퀀시",
"link":"https:\/\/search.shopping.naver.com\/gate.nhn?id=87038988515",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_8703898\/87038988515.jpg",
"lprice":"30900",
"hprice":"",
"mallName":"한정판매니아",
"productId":"87038988515",
"productType":"2",
"brand":"스타벅스",
"maker":"몰스킨",
"category1":"생활\/건강",
"category2":"문구\/사무용품",
"category3":"다이어리\/플래너",
"category4":"다이어리"
}
]
}

# encText = urllib.parse.quote("몰스킨")
# url = "https://openapi.naver.com/v1/search/shop?query=" + encText # json 결과
def gen_search_url(api_node, search_text, start_num, disp_num):
# 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)

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()) # %는 문자열 formated
return json.loads(response.read().decode("utf-8"))
datetime.datetime.now()
url = gen_search_url("shop", "몰스킨", 1, 5)
one_result = get_result_onpage(url)

{'lastBuildDate': 'Thu, 04 Jan 2024 08:58:56 +0900',
'total': 53794,
'start': 1,
'display': 5,
'items': [{'title': '스타벅스 2024년 <b>몰스킨</b> 다이어리 데일리 플래너 일기장 노트 스벅 카페 윈터 e프리퀀시',
'link': 'https://search.shopping.naver.com/gate.nhn?id=86963344737',
'image': 'https://shopping-phinf.pstatic.net/main_8696334/86963344737.41.jpg',
'lprice': '34000',
'hprice': '',
'mallName': '유니스스토어',
'productId': '86963344737',
'productType': '2',
'brand': '스타벅스',
'maker': '몰스킨',
'category1': '생활/건강',
'category2': '문구/사무용품',
'category3': '다이어리/플래너',
'category4': '다이어리'},
{'title': '<b>몰스킨</b> 2024 다이어리 클래식 소프트커버 데일리 포켓 2024년 24년',
'link': 'https://search.shopping.naver.com/gate.nhn?id=86678199160',
'image': 'https://shopping-phinf.pstatic.net/main_8667819/86678199160.3.jpg',
'lprice': '25200',
'hprice': '',
'mallName': '베스트펜',
'productId': '86678199160',
'productType': '2',
'brand': '몰스킨',
'maker': '몰스킨',
'category1': '생활/건강',
'category2': '문구/사무용품',
'category3': '다이어리/플래너',
'category4': '다이어리'},
{'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.1.jpg',
'lprice': '22680',
'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',
'productType': '2',
'brand': '몰스킨',
'maker': '',
'category1': '생활/건강',
'category2': '문구/사무용품',
'category3': '다이어리/플래너',
'category4': '다이어리'},
{'title': '<b>몰스킨</b> 2024 데일리 다이어리-하드 머틀그린 라지 각인 케이스포장 병행수입 아님',
'link': 'https://search.shopping.naver.com/gate.nhn?id=43052849828',
'image': 'https://shopping-phinf.pstatic.net/main_4305284/43052849828.20231006183518.jpg',
'lprice': '32760',
'hprice': '',
'mallName': '네이버',
'productId': '43052849828',
'productType': '1',
'brand': '몰스킨',
'maker': '몰스킨',
'category1': '생활/건강',
'category2': '문구/사무용품',
'category3': '다이어리/플래너',
'category4': '다이어리'}]}



import pandas as pd
def get_fields(json_data):
title = [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,
"link": link,
"lprice": lprice,
"mall": mall_name,
}, columns=["title", "lprice", "link", "mall"])
return result_pd
get_fields(one_result)
def delete_tag(input_str):
input_str = input_str.replace("<b>", "")
input_str = input_str.replace("</b>", "")
return input_str

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)
result_mol.info()

result_mol.reset_index(drop=True, inplace=True)
#'인덱스 재정열(reset)'로 0 to 999 인덱스 생성 후 'drop = True'를 통해 추가 인덱스 생성 X
result_mol.info()
result_mol["lprice"] = result_mol["lprice"].astype("float")
result_mol.info()

import platform
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
path = "c:/Windows/Fonts/malgun.ttf"
if platform.system() == "Darwin":
print("Hangul OK in your MAC!!!")
rc("font", family="Arial Unicode MS")
elif platform.system() == "Windows":
font_name = font_manager.FontProperties(fname=path).get_name()
print("Hangul OK in your Windows!!!")
rc("font", family=font_name)
else:
print("Unknown system.. sorry~~~")
plt.rcParams["axes.unicode_minus"] = False
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(15, 6))
sns.countplot(
x = result_mol["mall"], # x축
data=result_mol, #사용할 데이터
palette="RdYlGn", # 그래프 형태
order=result_mol["mall"].value_counts().index
# value_counts() 메서드 : 고유값의 개수를 카운팅, 칼럼에 따른 빈도수를 계산
)
plt.xticks(rotation=90)
# xticks : 그래프의 x축 값 설정
# yticks : 그래프의 y축 값 설정
# rotation = ? : 반시계방향으로 (x or y)축 레이블(명칭)을 ?도 회전
plt.show()
