본문 바로가기
Work/개발

Chat GPT와 함께하는 개발 - 네이버 블로그 키워드 지수 도출하기

by 라리올리 2023. 3. 27.
반응형

요즘 정말 핫한 Chat GPT가 파이썬 코딩을 잘한다고 해서 Chat GPT의 도움을 받아 코딩하는 과정을 정리해 보았습니다.

 

시작은 블덱스의 키워드 조회 기능이었습니다.

 

블덱스의 키워드 조회 기능

 

제가 쓰려고 하는 글의 키워드를 입력했는데 뭐가 안 맞았는지 데이터가 나오지 않고, 다시 검색하려고 하니 5분에 1번밖에 조회가 안되어 불편했습니다.

 

그래서 Python을 잘한다는 ChatGPT에게 문의했습니다.

 

 

네이버 블로그 하시는 분이라면 다 아는 뻔한 이야기를 해줍니다.

그래서 다시 질문했습니다. 

 

 

https://blogdex.space/ 이 사이트에서 키워드 지수 확인하는 로직이 뭘까?

 

Chat GPT가  해당 로직을 어떻게 판별하는지, 저 로직이 맞는지 알 수 없지만 설명을 봤을 때 매우 그럴싸합니다. 워낙 그럴싸한 거짓말도 잘한다고 하기 때문에 해당 이야기를 그대로 믿긴 어렵지만, 설명을 해준다는 것 자체로 매우 신기합니다.

 

 

로직을 짜달라고 해보자

https://blogdex.space/ 에서 사용하는 키워드 지수 로직을 파이썬 코드로 표현해 줄 수 있어?

 

import requests
from bs4 import BeautifulSoup
from collections import defaultdict

def get_blog_ranking(keyword):
    url = f'https://search.naver.com/search.naver?where=post&query={keyword}'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    blog_links = soup.select('a.api_txt_lines.total_tit')
    return [link['href'] for link in blog_links]

def get_blog_info(blog_link):
    response = requests.get(blog_link)
    soup = BeautifulSoup(response.text, 'html.parser')
    title = soup.select_one('meta[property="og:title"]')['content']
    blogger = soup.select_one('span.nick') or soup.select_one('div.blogername > a')
    blogger = blogger.text.strip() if blogger else ''
    content = soup.select_one('div.se-main-container')
    content = content.text.strip() if content else ''
    return {'title': title, 'blogger': blogger, 'content': content}

def get_keyword_index(keyword):
    blog_links = get_blog_ranking(keyword)
    blog_info_list = [get_blog_info(link) for link in blog_links]
    keyword_count = defaultdict(int)
    for info in blog_info_list:
        content = info['content']
        for word in content.split():
            if keyword in word:
                keyword_count[word] += 1
    return sum(keyword_count.values())

# 예시: '파이썬' 키워드 지수 계산
keyword = '파이썬'
index = get_keyword_index(keyword)
print(f'{keyword} 키워드 지수: {index}')

코드 설명

큰 기대 없이 한 질문인데 키워드 지수를 추출하는 소스 코드를 도출해 줍니다. 설명도 같이 해줍니다. 

 

그런데 이 Chat GPT의 지식은 2021년도 까지라고 알고 있습니다.  그 사이에 네이버의 전반적인 UI가 변경이 되어 해당 소스를 실행하면 오류가 발생합니다. 

 

나 : 실행해 봤어? 난 오류나.. 넌 어때?
Chat GPT :
저도 해당 코드를 실행해 보았는데, 네이버 블로그 검색 결과 페이지가 변경되면서 코드가 작동하지 않는 것으로 보입니다. 이에 따라 코드를 수정해야 합니다. 다만, 이는 해당 사이트에서 사용하는 로직이 변경되었다는 것을 의미하며, 사이트에서 제공하는 키워드 지수를 계산하는 방법이 변경될 수 있음을 나타냅니다. 따라서, 해당 사이트에서 제공하는 키워드 지수는 상대적인 지수로 이해하시는 것이 좋습니다.

 

실행해 달라고 하면 실행도 해주고 친절하게 오류 원인도 찾아줍니다. 친절하고 잘하는 개발자 동료와 함께 일하는 기분이 듭니다.

 

제공된 소스를 최신 화면에 맞게 수정해 보자

 

실제로 제공된 소스 중에서 블로그 title 가지고 오는 부분이 UI가 변경되면서 오류가 발생하고 있었습니다.  해당 부분은 F12로 찾아서 수정 해 줍니다.

 

위의 소스 중에서 title 정보를 가지고 오는 아래 소스 영역이 문제가 되었습니다.

title = soup.select_one('meta[property="og:title"]')['content']

네이버 블로그에서 봤을 때, 해당 영역이 iframe안으로 들어가서 처음 로드될 때 meta영역이 인지되지 않는 것으로 보입니다. 

 

블로그 내용이 iframe으로 들어가 있음

 

그래서 해당 부분을 아래와 같이 수정하였습니다.

  #iframe url 찾아서 이동하기
    blog_url = 'https://blog.naver.com/' + soup.select_one('#mainFrame').attrs['src']
  #  print('src:  ' + blog_url + '\n')
    response = requests.get(blog_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    title = soup.select_one('meta[property="og:title"]')['content']

여러 가지 방법이 있겠지만,  저는 iframe영역의 url만 찾아서 해당 페이지로 이동후 'meta[property="og:title"]'을 찾았습니다.

 

수정 후 프로그램이 실행되었으며, '파이썬 키워드 지수: 336'라는 결과 값을 return 했습니다.

 

결론

소스를 볼 줄 아는 분이라면 이미 위에서 눈치채셨겠지만, 사실 아무 의미 없는 데이터입니다. 

해당 키워드로 검색해서 나오는 블로그에 저 키워드가 얼마나 들어가 있는지 숫자를 세어서 return 하기 때문입니다.

 

블덱스의 경우, '파이썬'으로 검색 시 아래처럼 나옵니다.

키워드 분석을 위한 다양한 데이터를 return 합니다.  이 사이트와 비교했을 시, 더욱더 부족함이 잘 보입니다. 

 

Chat GPT가 제시한 이 코드의 경우 네이버 블로그의 워드 지수를 표현한다고 말하긴 어려울 것 같습니다. 

반응형

댓글