# 네이버 검색 API 예제 - 블로그 검색
import os
import sys
import urllib.request
client_id = "oR8ebMed9NE4GjnTolJm"
client_secret = "CcUJOipS8Y"
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)
# 글자로 읽을 경우, decode 필요 : utf-8 설정
print(response_body.decode("utf-8"))
import os
import sys
import urllib.request
client_id = "oR8ebMed9NE4GjnTolJm"
client_secret = "CcUJOipS8Y"
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)
import os
import sys
import urllib.request
client_id = "oR8ebMed9NE4GjnTolJm"
client_secret = "CcUJOipS8Y"
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/movie?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)
import os
import sys
import urllib.request
client_id = "oR8ebMed9NE4GjnTolJm"
client_secret = "CcUJOipS8Y"
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/cafearticle?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)
import os
import sys
import urllib.request
client_id = "oR8ebMed9NE4GjnTolJm"
client_secret = "CcUJOipS8Y"
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)
import os
import sys
import urllib.request
client_id = "oR8ebMed9NE4GjnTolJm"
client_secret = "CcUJOipS8Y"
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/encyc?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)
import os
import sys
import urllib.request
client_id = "oR8ebMed9NE4GjnTolJm"
client_secret = "CcUJOipS8Y"
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)
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
'https://openapi.naver.com/v1/search/shop.json?query=TEST&start=10&display=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())
return json.loads(response.read().decode("utf-8"))
datetime.datetime(2023, 5, 20, 23, 8, 28, 756779)
[2023-05-20 23:10:01.574621] Url Request Success
one_result
json 파일 형태 : 딕셔너리
딕셔너리 키 : [items] 키 값, 인덱스 0 첫번째 값, [items]의 벨류 값이 리스트, 리스트 안 [title] 키 값
one_result["items"][0]["title"]
'<b>몰스킨</b> 노트 가죽 하드커버 감성 고급 업무용 이쁜 심플'
'https://search.shopping.naver.com/gate.nhn?id=82526953942'
'28800'
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
def delete_tag(input_str):
input_str = input_str.replace("<b>","")
input_str = input_str.replace("</b>","")
return input_str
import pandas as pd
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 ,
"link" : link ,
"lprice" : lprice ,
"mall" : mall_Name ,
}, columns = ["title","lprice" , "link","mall"]) # 컬럼 순서
return result_pd
[2023-05-20 23:42:13.059721] Url Request Success
for n in range(1, 1000, 100):
print(n)
---------------------------------------------
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.reset_index(drop=True, inplace=True)
result_mol.info()
가격 lprice object => float 형태 바꾸기
result_mol["lprice"] = result_mol["lprice"].astype(float)
result_mol.info()
!pip install xlsxwriter
writer = pd.ExcelWriter("../data/06_molskin_diary_in_naver_shop.xlsx", engine = "xlsxwriter")
result_mol.to_excel(writer, sheet_name = "sheet1")
workbook = writer.book
worksheet = writer.sheets["sheet1"]
worksheet.set_column("A:A" , 4) # 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.save()
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from matplotlib import rc
rc("font", family="Malgun Gothic")
plt.figure(figsize=(15,6))
sns.countplot(
x=result_mol["mall"], # x축
data=result_mol, # 데이터 내용
palette="RdYlGn", # 컬러 표현
order=result_mol["mall"].value_counts().index # 개수 세주기
)
plt.xticks(rotation=90) # x축 이름들 겹치지 않게 각도 조절
plt.show()