먼저 개발 환경입니다.

네이버 api 와 네이버 광고 api를 사용하였고 아래 링크에서 키 값을 받을 수 있습니다.
네이버 api : developers.naver.com/main/
NAVER Developers
네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음
developers.naver.com
네이버 광고 api : searchad.naver.com/my-screen
네이버 광고
searchad.naver.com

import flask
import json
from functools import wraps
from flask import request, Response
import requests
from bs4 import BeautifulSoup
import urllib.request
from powernad.API import RelKwdStat
import time
from random import uniform
#네이버 api
Client_id = "your client id"
Client_Secret ="your client secret"
#네이버 광고 api
NAVER_AD_CUSTOMER_ID = "your customer id"
NAVER_AD_ACCESS_LICENSE ="your access license"
NAVER_AD_SECRET_KEY = "your secret key"
#네이버 블로그 api 요청 주소
NAVER_BLOG_API_URL="https://openapi.naver.com/v1/search/blog?query="
#네이버 쇼핑 api 요청 주소
NAVER_SHOP_API_URL="https://openapi.naver.com/v1/search/shop?query="
#네이버 광고 api 요청 주소
NAVER_AD_API_URL = "https://api.naver.com"
# 초당 몇회 이상일 경우 접근제한이 결려있기에 조절
LIMIT=10
app= flask.Flask(__name__)
#리턴값 변환 함수
def as_json(f):
@wraps(f)
def decorated_function(*args, **kwargs):
res = f(*args, **kwargs)
res = json.dumps(res, ensure_ascii=False).encode('utf8')
return Response(res, content_type='application/json; charset=utf-8')
return decorated_function
#네이버 api 카운트 가져오기 함수
def getSearchCount(keyword,URL):
encText = urllib.parse.quote(keyword)
url=URL + encText
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()
response_body = response.read()
jsonString = response_body.decode("utf-8")
jsonDict =json.loads(jsonString)
items = jsonDict['items']
for item in items:
title = item['title']
link =item['link']
if(rescode==200):
totalCount = jsonDict["total"]
else:
totalCount = 0
return totalCount
#naver api 가져오기 함수
def getSearchList(keyword,URL):
searchList =[]
encText = urllib.parse.quote(keyword)
url=URL + encText
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()
response_body = response.read()
jsonString = response_body.decode("utf-8")
jsonDict =json.loads(jsonString)
items = jsonDict['items']
for item in items:
title = item['title']
link =item['link']
searchList.append({'title':title,'link': link})
print(searchList)
return searchList
# naver api 블로그 글 가져오기
@app.route('/getBlogs', methods=['GET'])
@as_json
def getBlogs():
if 'keyword' in request.args:
keyword = str(request.args['keyword'])
else:
return "Error: keyword field was not provided. pleasw enter a keyword."
return getSearchList(keyword,NAVER_BLOG_API_URL)
#naver api 쇼핑정보 가져오기
@app.route('/getShops', methods=['GET'])
@as_json
def getShops():
if 'keyword' in request.args:
keyword = str(request.args['keyword'])
else:
return "Error: keyword field was not provided. pleasw enter a keyword."
return getSearchList(keyword,NAVER_SHOP_API_URL)
#naver api 탑10 가져오기
@app.route('/getPopularlists', methods=['GET'])
@as_json
def popularlist():
NAVER_BEST100 = 'https://search.shopping.naver.com/best100v2/main.nhn'
popular10lists =[]
source = requests.get(NAVER_BEST100).text
soup = BeautifulSoup(source,"html.parser")
popular10 = soup.find(id="popular_srch_lst")
popular10names = popular10.select(".txt")
for name in popular10names:
popular10lists.append({"name" : name.text})
return popular10lists
#naver api 연관검색어,클릭 횟수 등 가져오기
@app.route('/relatedkeywords',methods=['GET'])
@as_json
def relatedkeywords():
keywords =[]
if 'keyword' in request.args:
keyword = str(request.args['keyword'])
else:
return "Error: keyword field was not provided. pleasw enter a keyword."
relKwdStat = RelKwdStat.RelKwdStat(NAVER_AD_API_URL, NAVER_AD_ACCESS_LICENSE,NAVER_AD_SECRET_KEY, NAVER_AD_CUSTOMER_ID)
KWDataList = relKwdStat.get_rel_kwd_stat_list(None,hintKeywords=keyword,showDetail='1')
for idx, outdata in enumerate(KWDataList):
time.sleep(uniform(0.11,0.12)) #naver search api limit - daily 2500 max 10/sec
relKeyword = outdata.relKeyword
monthlyPcQcCnt = outdata.monthlyPcQcCnt
monthlyMobileQcCnt = outdata.monthlyMobileQcCnt
monthlyAvePcCtr = outdata.monthlyAvePcCtr
monthlyAveMobileCtr = outdata.monthlyAveMobileCtr
compIdx = outdata.compIdx
blogsTotal = getSearchCount(relKeyword, NAVER_BLOG_API_URL)
shopsTotal = getSearchCount(relKeyword, NAVER_SHOP_API_URL)
if(str(monthlyPcQcCnt).isnumeric() and str(monthlyMobileQcCnt).isnumeric() and compIdx =="높음"):
totalCnt =monthlyPcQcCnt + monthlyMobileQcCnt
clickCnt = round(monthlyAvePcCtr + monthlyAveMobileCtr ,1)
print(idx, relKeyword, totalCnt, clickCnt, blogsTotal, shopsTotal)
keywords.append({'word':relKeyword, 'totalCnt':totalCnt,'clickCnt':clickCnt,'blogsTotal':blogsTotal})
if(idx>=LIMIT):
break
return keywords
app.run()
결과 확인
블로그 정보 가져오기

쇼핑 정보 가져오기

탑10 가져오기

연관검색어 가져오기

'Python' 카테고리의 다른 글
python - from PIL import Image Error 에러 해결법 (1) | 2020.11.13 |
---|---|
python3- ubuntu에 apache2와 Flask 연동하기 (2) | 2020.11.11 |
python - Flask (0) | 2020.11.01 |
python - flask API Type Error (0) | 2020.11.01 |
python - 네이버 쇼핑 web Scraping (0) | 2020.11.01 |