Python: Script A Google Autosuggest Extract of Trends for Your Niche Search Keywords

Python-script til at opfange autoforslag til tendenser

Alle kan lide Google Trends, men det er lidt vanskeligt, når det kommer til Long Tail Keywords. Vi kan alle lide embedsmanden google trendservice for at få indsigt i søgeadfærd. To ting forhindrer imidlertid mange i at bruge det til solidt arbejde;

  1. Når du har brug for at finde nye niche nøgleordder er ikke nok data om Google Trends 
  2. Mangel på officiel API til at fremsætte anmodninger til google trends: Når vi bruger moduler som f.eks pytrends, så skal vi bruge proxyservere, ellers bliver vi blokeret. 

I denne artikel deler jeg et Python-script, vi har skrevet for at eksportere populære søgeord via Google Autosuggest.

Hent og gem autosuggest resultater over tid 

Antag, at vi har 1,000 frø søgeord, der skal sendes til Google Autosuggest. Til gengæld får vi sandsynligvis omkring 200,000 longtail nøgleord. Derefter skal vi gøre det samme en uge senere og sammenligne disse datasæt for at besvare to spørgsmål:

  • Hvilke forespørgsler er nye nøgleord sammenlignet med sidste gang? Dette er sandsynligvis tilfældet, vi har brug for. Google mener, at disse forespørgsler bliver mere betydningsfulde - ved at gøre det kan vi oprette vores egen Google Autosuggest-løsning! 
  • Hvilke forespørgsler er nøgleord ikke længere trending?

Scriptet er ret let, og det meste af den kode, jeg delte her. Den opdaterede kode gemmer data fra tidligere kørsler og sammenligner forslagene over tid. Vi undgik filbaserede databaser som SQLite for at gøre det enkelt - så al datalagring bruger CSV-filer nedenfor. Dette giver dig mulighed for at importere filen i Excel og udforske niche-søgeordstendenser for din virksomhed.

At bruge dette Python-script

  1. Indtast dit sæt-nøgleordssæt, der skal sendes til autofuldførelsen: keywords.csv
  2. Juster scriptindstillingerne efter dit behov:
    • SPROG: standard “da”
    • LAND: standard “os”
  3. Planlæg scriptet til at køre en gang om ugen. Du kan også køre det manuelt, som du vil.
  4. Brug keyword_suggestions.csv til yderligere analyse:
    • først set: dette er den dato, hvor forespørgslen blev vist for første gang i autosuggest
    • sidst set: den dato, hvor forespørgslen blev set for sidste gang
    • er_ny: hvis first_seen == last_seen satte vi dette til Sand - Bare filtrer på denne værdi for at få de nye populære søgninger i Googles autosuggest.

Her er Python-koden

# 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

Download Python Script

Hvad mener du?

Dette websted bruger Akismet til at reducere spam. Lær, hvordan dine kommentardata behandles.