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

Python-skript för att fånga autoförslag på trender

Alla gillar Google Trends, men det är lite knepigt när det gäller Long Tail Keywords. Vi gillar alla tjänstemannen google trender för att få inblick i sökbeteendet. Två saker hindrar dock många från att använda det för gedigen arbete;

  1. När du behöver hitta nya nischnyckelordfinns är inte tillräckligt med data på Google Trender 
  2. Brist på officiellt API för att göra förfrågningar till google-trender: När vi använder moduler som pytrender, då måste vi använda proxyservrar, annars blockeras vi. 

I den här artikeln delar jag ett Python-skript som vi har skrivit för att exportera trendiga nyckelord via Google Autosuggest.

Hämta och lagra automatisk förslag på resultat över tiden 

Antag att vi har 1,000 sökord som ska skickas till Google Autosuggest. I gengäld får vi förmodligen cirka 200,000 XNUMX lång svans nyckelord. Sedan måste vi göra detsamma en vecka senare och jämföra dessa datauppsättningar för att svara på två frågor:

  • Vilka frågor är nya nyckelord jämfört med förra gången? Detta är förmodligen fallet vi behöver. Google tycker att dessa frågor blir mer betydelsefulla - genom att göra det kan vi skapa vår egen Google Autosuggest-lösning! 
  • Vilka frågor är nyckelord inte längre trender?

Skriptet är ganska enkelt och det mesta av koden jag delade här. Den uppdaterade koden sparar data från tidigare körningar och jämför förslagen över tiden. Vi undvek filbaserade databaser som SQLite för att göra det enkelt - så all datalagring använder CSV-filer nedan. Detta gör att du kan importera filen i Excel och utforska nischade nyckelordstrender för ditt företag.

Att använda detta Python-skript

  1. Ange din uppsättning nyckelord som ska skickas till autoslutförandet: keywords.csv
  2. Justera skriptinställningarna efter dina behov:
    • SPRÅK: standard “sv”
    • LAND: standard "oss"
  3. Schemalägg skriptet så att det körs en gång i veckan. Du kan också köra den manuellt som du vill.
  4. Använd keyword_suggestions.csv för vidare analys:
    • först_sedd: det här är datumet förfrågan för första gången i autosuggest
    • senast sedd: datumet där frågan sågs för sista gången
    • är ny: if first_seen == last_seen sätter vi detta till Sant - Filtrera bara på det här värdet för att få de nya trendiga sökningarna i Googles autoförslag.

Här är 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

Ladda ner Python-skriptet

Vad tror du?

Den här sidan använder Akismet för att minska spam. Läs om hur din kommentardata behandlas.