본문 바로가기

Languages&Library/Python

Google 트렌드 API로 특정 주제의 인기 키워드 분석하기

반응형
from serpapi import GoogleSearch
from datetime import datetime
import os

# 사용자 정의 함수: Google 트렌드에서 키워드 트렌드 가져오기
def fetch_keyword_trends(api_key, query_list, date_range, output_dir="output"):
    """
    Google 트렌드에서 특정 주제의 인기 키워드를 가져오는 함수.

    Parameters:
        api_key (str): SerpApi API 키
        query_list (list): 검색할 주제(키워드)들의 리스트
        date_range (str): 검색 기간 (예: "today 7-d", "2023-01-01 2023-01-07")
        output_dir (str): 결과 파일을 저장할 디렉토리 경로 (기본값: "output")
    """
    # 결과 저장 디렉토리 생성
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 결과를 저장할 리스트 초기화
    all_output_lines = []

    for topic in query_list:
        # 관련 검색어 요청 파라미터 설정
        params_queries = {
            "engine": "google_trends",
            "hl": "ko",
            "geo": "KR",
            "q": topic,
            "date_range": date_range,
            "api_key": api_key,
            "data_type": "RELATED_QUERIES"
        }

        search = GoogleSearch(params_queries)
        results = search.get_dict()

        # 카테고리(검색어) 헤더 추가
        all_output_lines.append(f"======== 기본 검색어 '{topic}' ========")

        # Top 관련 검색어 처리 (상위 5개 항목)
        all_output_lines.append(">> Top 관련 검색어:")
        if results.get('related_queries') and results['related_queries'].get("top"):
            for item in results['related_queries']["top"][:5]:
                all_output_lines.append(f"관련 검색어: {item.get('query', '')}")
                all_output_lines.append(f"인기도 (값): {item.get('value', '')}")
                all_output_lines.append(f"링크: {item.get('link', '')}")
                all_output_lines.append(f"SerpApi 링크: {item.get('serpapi_link', '')}")
                all_output_lines.append("---")
        else:
            all_output_lines.append("Top 관련 검색어 데이터가 없습니다.")

        # Rising 관련 검색어 처리 (상위 5개 항목)
        all_output_lines.append(">> Rising 관련 검색어:")
        if results.get('related_queries') and results['related_queries'].get("rising"):
            for item in results['related_queries']["rising"][:5]:
                all_output_lines.append(f"관련 검색어: {item.get('query', '')}")
                all_output_lines.append(f"인기도 (값): {item.get('value', '')}")
                all_output_lines.append(f"링크: {item.get('link', '')}")
                all_output_lines.append(f"SerpApi 링크: {item.get('serpapi_link', '')}")
                all_output_lines.append("---")
        else:
            all_output_lines.append("Rising 관련 검색어 데이터가 없습니다.")

        # 각 카테고리 끝에 빈 줄 추가
        all_output_lines.append("\n")

    # 현재 날짜를 포함한 파일명 생성 (예: related_queries_20250410_combined.txt)
    today_str = datetime.now().strftime('%Y%m%d')
    filename = os.path.join(output_dir, f"related_queries_{today_str}.txt")

    # 파일로 결과 저장
    with open(filename, "w", encoding="utf-8") as f:
        f.write("\n".join(all_output_lines))

    print(f"모든 관련 검색어 데이터가 '{filename}'에 저장되었습니다.")

# 실행 예시
if __name__ == "__main__":
    # 사용자 입력 받기
    api_key = input("SerpApi API 키를 입력하세요: ").strip()
    query_list = input("검색할 주제(키워드)를 쉼표로 구분하여 입력하세요 (예: 뉴스, 재테크, 육아): ").split(",")
    date_range = input("검색 기간을 입력하세요 (예: today 7-d, 2023-01-01 2023-01-07): ").strip()
    
    # 함수 호출
    fetch_keyword_trends(api_key=api_key, query_list=query_list, date_range=date_range)
반응형