개발자/파이썬 Python

파이선 네이버 검색 키워드 분석 코드

지구빵집 2023. 2. 16. 09:28
반응형

 

 

아래 코드의 기능은 네이버 블로그를 대상으로 검색어를 입력하여 해당 키워드로 블로그 글을 발행할 때, 네이버 블로그 전체 경쟁률을 분석하는 기능을 한다. 가장 간단한 코드를 작성할 때조차 꼭 디자인을 하고 설계를 하고 해결 계략을 짠다. 세상은 모두 계략에 의해 움직인다.

 

모든 일엔 계획이 필요하듯, 코드를 짤 때는 간략하게나마 설계 노트를 작성한다.

  1. 원하는 키워드를 선정한다.
  2. 네이버 API 아이디/비번을 발급받는다. 네이버 개발자 도구를 이용한다.
  3. 네이버 검색 API를 해당 키워드의 최근 100개의 발행 개수를 확인한다.
  4. 해당 키워드의 포스팅일자와 총발행량을 체크한다.
  5. 오늘 해당 키워드로 글을 올렸을 경우 경쟁률을 알아본다. 

 

코드를 배울 때 가장 좋은 방법은 타이핑하는 것이다. 손가락에 굳은살이 생길 때까지 손톱을 짧게 깎고 타이핑하고 복사 후 붙여 넣기하고 돌아가는 모습을 확인한다. 한 코드에서 무엇인가 배우지 못했다면 반복한다. 이미 입력하여 실행했다고 해도 똑같은 과정을 하고 또 하고 계속 반복한다. 

 

 

네이버 API 개발자 도구

 

아래는 소스코드인데 네이버에서 발급받은 Application ID와 password를 적당히 입력하여 실행한다.

 

 

# 네이버 검색 API를 해당키워드의 최근 100개의 발행개수를 확인한다.
import json
import os
import sys
import urllib.request
import getpass
# client_id = "YOUR_CLIENT_ID"
# client_secret = "YOUR_CLIENT_SECRET"

keyword = str(input("keyword: "))
client_id = "받아야 한다"
client_secret = getpass.getpass("Client Secret: ")

encText = urllib.parse.quote(keyword)

# url = "https://openapi.naver.com/v1/search/blog?query=" + encText # json 결과

display = 100
sort = 'date'

url = "https://openapi.naver.com/v1/search/blog?query=" + encText + "&display=" + str(display) + "&sort=" + str(sort)

# 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()

    #나오는 결과를 json 으로 변환해서 가져오는작업
    response_dict = json.loads(response_body.decode('utf-8'))
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

# 해당 키워드의 포스팅일자와 총 발행량을 체크한다.

response_dict.keys()
# 총 발행량 확인
posting_total = 100
print(posting_total)
# 마지막 포스팅 생성날짜 확인
last_posting = response_dict["items"][-1]
print(last_posting["postdate"])
# 오늘 날짜 확인
import datetime
today = datetime.datetime.today()
print(today)
# 마지막 포스팅 생성날짜 datetime 변환
last_year = int(last_posting["postdate"][:4])
print(last_year)
last_month = int(last_posting["postdate"][4:6])
print(last_month)
last_day = int(last_posting["postdate"][6:])
print(last_day)
last = datetime.datetime(last_year,last_month,last_day)
#마지막 포스팅일자 - 오늘 날짜 계산
date_difference = today - last
date_difference.days
type(last)
print(posting_total/date_difference.days)

#i am here. 20230208

 

 

아래는 실행 결과 화면인데 가장 아래 부분의 경쟁률 7.69 숫자가 의미하는 것은 경쟁 포스팅 수다. 즉 내가 포스팅을 올리면 7.69 명의 같은 키워드로 글을 올리는 경쟁이 된다는 의미다. 출력 내용이 긴데 맨 마지막 부분 숫자만 참고하면 된다.

 


keyword: 파이선
Client Secret:
{
        "lastBuildDate":"Wed, 08 Feb 2023 19:07:11 +0900",
        "total":12052,
        "start":1,
        "display":100,
        "items":[
                {
                        "title":"AI 시장의 게임체인저, 챗GPT 강의를 소개합니다.... ",
                        "link":"https:\/\/blog.naver.com\/udemy-wjtb\/223009260723",
                        "description":"AI 활용을 위해 <b>파이선<\/b> 등 복잡한 컴퓨터 언어 교육 과정을 거치지 않고도 간단히 대화형 챗봇을 활용하는 것만으로 자신의 업무 분야에 맞게 업무 생산성을 높일 수 있는 것도 장점으로 꼽혔다.... ",   
                        "bloggername":"스타터스 취업 부트캠프 (STARTERS)",
                        "bloggerlink":"blog.naver.com\/udemy-wjtb",
                        "postdate":"20230208"
                },
                {
                        "title":"[Python] 더모아 Skylife 납부 자동화",
~
~
~
~
                        "bloggerlink":"blog.naver.com\/munzh",
                        "postdate":"20230127"
                },
                {
                        "title":"파이썬기초 리스트와 데이터 관리에 대해 알아봐요",
                        "link":"https:\/\/blog.naver.com\/gold5doo\/222995483671",
                        "description":"안녕하세요. 합격의기운이예요 파이썬기초 리스트와 데이터 관리에 대해 알아봐요 Part 1: 파이썬에서 데이터를 처리하는 방법 데이터의 개수가 많아지게 되면 데이터를 효율적으로 관리하기 어려워지게... ",    
                        "bloggername":"합격의기운",
                        "bloggerlink":"blog.naver.com\/gold5doo",
                        "postdate":"20230126"
                }
        ]
}
100
20230126
2023-02-08 19:07:10.774948
2023
1
26
7.6923076923076925

 

 

 

 

반응형