Python : 틈새 검색 키워드에 대한 Google Autosuggest 트렌드 추출 스크립트

자동 제안 트렌드를 캡처하는 Python 스크립트

모두가 Google 트렌드를 좋아하지만 롱테일 키워드에 관해서는 약간 까다 롭습니다. 우리 모두는 공식을 좋아합니다 구글 트렌드 서비스 검색 행동에 대한 통찰력을 얻으십시오. 그러나 두 가지 이유로 많은 사람들이 견고한 작업에 사용하지 못합니다.

  1. 찾을 필요가있을 때 새로운 틈새 키워드거기 Google 트렌드에 대한 데이터가 충분하지 않습니다. 
  2. Google 트렌드에 대한 요청을위한 공식 API 부족 : 다음과 같은 모듈을 사용할 때 pytrends, 그러면 프록시 서버를 사용해야합니다. 그렇지 않으면 차단됩니다. 

이 기사에서는 Google Autosuggest를 통해 트렌드 키워드를 내보내기 위해 작성한 Python 스크립트를 공유합니다.

시간 경과에 따른 자동 제안 결과 가져 오기 및 저장 

Google Autosuggest에 보낼 1,000 개의 Seed 키워드가 있다고 가정 해 보겠습니다. 그 대가로 우리는 아마 약 200,000 긴 꼬리 키워드. 그런 다음 일주일 후에 동일한 작업을 수행하고이 데이터 세트를 비교하여 두 가지 질문에 답해야합니다.

  • 어떤 쿼리가 새 키워드 지난번에 비해? 이것은 아마도 우리에게 필요한 경우입니다. Google은 이러한 쿼리가 더욱 중요 해지고 있다고 생각합니다. 그렇게함으로써 자체 Google Autosuggest 솔루션을 만들 수 있습니다. 
  • 어떤 쿼리가 키워드가 더 이상 인기?

스크립트는 매우 쉽고 내가 공유 한 대부분의 코드는 여기. 업데이트 된 코드는 과거 실행의 데이터를 저장하고 시간이 지남에 따라 제안을 비교합니다. 간단하게 만들기 위해 SQLite와 같은 파일 기반 데이터베이스를 피했습니다. 따라서 모든 데이터 저장소는 아래의 CSV 파일을 사용합니다. 이를 통해 Excel에서 파일을 가져오고 비즈니스에 대한 틈새 키워드 트렌드를 탐색 할 수 있습니다.

이 Python 스크립트를 활용하려면

  1. 자동 완성으로 보내야하는 시드 키워드 세트를 입력하십시오 : keyword.csv
  2. 필요에 따라 스크립트 설정을 조정하십시오.
    • LANGUAGE : 기본값 "en"
    • 국가 : 기본 '우리'
  3. 일주일에 한 번 실행되도록 스크립트를 예약합니다. 원하는대로 수동으로 실행할 수도 있습니다.
  4. 추가 분석을 위해 keyword_suggestions.csv를 사용하세요.
    • 처음 본: 검색어가 자동 제안에 처음 표시된 날짜입니다.
    • last_seen: 마지막으로 쿼리가 표시된 날짜
    • is_new: first_seen == last_seen이면 이것을 다음과 같이 설정합니다. 참된 –이 값을 필터링하여 Google 자동 제안에서 새로운 인기 검색어를 가져옵니다.

다음은 Python 코드입니다.

# Pemavor.com Autocomplete Trends
# Author: Stefan Neefischer (stefan.neefischer@gmail.com)
import concurrent.futures
from datetime import date
from datetime import datetime
import pandas as pd
import itertools
import requests
import string
import json
import time

charList = " " + string.ascii_lowercase + string.digits

def makeGoogleRequest(query):
    # If you make requests too quickly, you may be blocked by google 
    time.sleep(WAIT_TIME)
    URL="http://suggestqueries.google.com/complete/search"
    PARAMS = {"client":"opera",
            "hl":LANGUAGE,
            "q":query,
            "gl":COUNTRY}
    response = requests.get(URL, params=PARAMS)
    if response.status_code == 200:
        try:
            suggestedSearches = json.loads(response.content.decode('utf-8'))[1]
        except:
            suggestedSearches = json.loads(response.content.decode('latin-1'))[1]
        return suggestedSearches
    else:
        return "ERR"

def getGoogleSuggests(keyword):
    # err_count1 = 0
    queryList = [keyword + " " + char for char in charList]
    suggestions = []
    for query in queryList:
        suggestion = makeGoogleRequest(query)
        if suggestion != 'ERR':
            suggestions.append(suggestion)

    # Remove empty suggestions
    suggestions = set(itertools.chain(*suggestions))
    if "" in suggestions:
        suggestions.remove("")
    return suggestions

def autocomplete(csv_fileName):
    dateTimeObj = datetime.now().date()
    #read your csv file that contain keywords that you want to send to google autocomplete
    df = pd.read_csv(csv_fileName)
    keywords = df.iloc[:,0].tolist()
    resultList = []

    with concurrent.futures.ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
        futuresGoogle = {executor.submit(getGoogleSuggests, keyword): keyword for keyword in keywords}

        for future in concurrent.futures.as_completed(futuresGoogle):
            key = futuresGoogle[future]
            for suggestion in future.result():
                resultList.append([key, suggestion])

    # Convert the results to a dataframe
    suggestion_new = pd.DataFrame(resultList, columns=['Keyword','Suggestion'])
    del resultList

    #if we have old results read them
    try:
        suggestion_df=pd.read_csv("keyword_suggestions.csv")
        
    except:
        suggestion_df=pd.DataFrame(columns=['first_seen','last_seen','Keyword','Suggestion'])
    
    suggestionCommon_list=[]
    suggestionNew_list=[]
    for keyword in suggestion_new["Keyword"].unique():
        new_df=suggestion_new[suggestion_new["Keyword"]==keyword]
        old_df=suggestion_df[suggestion_df["Keyword"]==keyword]
        newSuggestion=set(new_df["Suggestion"].to_list())
        oldSuggestion=set(old_df["Suggestion"].to_list())
        commonSuggestion=list(newSuggestion & oldSuggestion)
        new_Suggestion=list(newSuggestion - oldSuggestion)
         
        for suggest in commonSuggestion:
            suggestionCommon_list.append([dateTimeObj,keyword,suggest])
        for suggest in new_Suggestion:
            suggestionNew_list.append([dateTimeObj,dateTimeObj,keyword,suggest])
    
    #new keywords
    newSuggestion_df = pd.DataFrame(suggestionNew_list, columns=['first_seen','last_seen','Keyword','Suggestion'])
    #shared keywords with date update
    commonSuggestion_df = pd.DataFrame(suggestionCommon_list, columns=['last_seen','Keyword','Suggestion'])
    merge=pd.merge(suggestion_df, commonSuggestion_df, left_on=["Suggestion"], right_on=["Suggestion"], how='left')
    merge = merge.rename(columns={'last_seen_y': 'last_seen',"Keyword_x":"Keyword"})
    merge["last_seen"].fillna(merge["last_seen_x"], inplace=True)
    del merge["last_seen_x"]
    del merge["Keyword_y"]
    
    #merge old results with new results
    frames = [merge, newSuggestion_df]
    keywords_df =  pd.concat(frames, ignore_index=True, sort=False)
    # Save dataframe as a CSV file
    keywords_df['first_seen'] = pd.to_datetime(keywords_df['first_seen'])
    keywords_df = keywords_df.sort_values(by=['first_seen','Keyword'], ascending=[False,False])   
    keywords_df['first_seen']= pd.to_datetime(keywords_df['first_seen'])
    keywords_df['last_seen']= pd.to_datetime(keywords_df['last_seen'])
    keywords_df['is_new'] = (keywords_df['first_seen']== keywords_df['last_seen'])
    keywords_df=keywords_df[['first_seen','last_seen','Keyword','Suggestion','is_new']]
    keywords_df.to_csv('keyword_suggestions.csv', index=False)

# If you use more than 50 seed keywords you should slow down your requests - otherwise google is blocking the script
# If you have thousands of seed keywords use e.g. WAIT_TIME = 1 and MAX_WORKERS = 5
WAIT_TIME = 0.2
MAX_WORKERS = 20
# set the autocomplete language
LANGUAGE = "en"
# set the autocomplete country code - DE, US, TR, GR, etc..
COUNTRY="US"
# Keyword_seed csv file name. One column csv file.
#csv_fileName="keyword_seeds.csv"
CSV_FILE_NAME="keywords.csv"
autocomplete(CSV_FILE_NAME)
#The result will save in keyword_suggestions.csv csv file

Python 스크립트 다운로드

당신은 어떻게 생각하십니까?

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터 처리 방법 알아보기.