Python: Skripto A Google Autosuggest Eltiraĵo De Tendencoj Por Viaj Niĉaj Serĉaj Ŝlosilvortoj

Python-Skripto Por Kapti Aŭtosugestajn Tendencojn

Ĉiuj ŝatas Google-Tendencojn, sed ĝi estas iom malfacila se temas pri Longvortaj Ŝlosilvortoj. Ni ĉiuj ŝatas la oficialulon servo pri google-tendencoj por akiri informojn pri la serĉa konduto. Tamen du aferoj malhelpas multajn uzi ĝin por solida laboro;

  1. Kiam vi bezonos trovi novaj niĉaj ŝlosilvortoj, tie ne sufiĉas datumoj pri Google Trends 
  2. Manko de oficiala API por fari petojn al google-tendencoj: Kiam ni uzas modulojn kiel pirtrendoj, tiam ni devas uzi prokurilojn, aŭ ni blokiĝas. 

En ĉi tiu artikolo, mi dividos Python-Skripton, kiun ni verkis, por eksporti tendencajn ŝlosilvortojn per Google Autosuggest.

Prenu kaj Konservu Rezultojn de Aŭtomata Propono Kun la Tempo 

Supozu, ke ni havas 1,000 Seed-ŝlosilvortojn sendotajn al Google Autosuggest. Kompense, ni probable ricevos ĉirkaŭ 200,000 longa vosto ŝlosilvortoj. Poste ni devas fari la samon unu semajnon poste kaj kompari ĉi tiujn datumajn arojn por respondi du demandojn:

  • Kiuj demandoj estas novaj ŝlosilvortoj kompare kun la lasta fojo? Ĉi tio probable estas la kazo, kiun ni bezonas. Google pensas, ke tiuj demandoj pli gravas - per tio, ni povas krei nian propran solvon de Google Autosuggest! 
  • Kiuj demandoj estas ŝlosilvortoj ne plu tendencaj?

La skripto estas sufiĉe facila, kaj plejparton de la kodo mi dividis tie. La ĝisdatigita kodo konservas la datumojn de pasintaj kuroj kaj komparas la sugestojn laŭlonge de la tempo. Ni evitis dosier-bazitajn datumbazojn kiel SQLite por simpligi ĝin - do la tuta datuma stokado uzas CSV-dosierojn sube. Ĉi tio ebligas al vi importi la dosieron en Excel kaj esplori niĉajn ŝlosilvortajn tendencojn por via kompanio.

Por Uzi Ĉi Python-Skripton

  1. Enigu vian seman ŝlosilvortan aron, kiu devas esti sendita al la aŭtomata kompletigo: keywords.csv
  2. Ĝustigu la Agordojn de Skripto laŭ via bezono:
    • LINGVO: apriora "eo"
    • LANDO: defaŭlte "ni"
  3. Planu la skripton por ruliĝi unufoje semajne. Vi ankaŭ povas ruli ĝin permane kiel vi volas.
  4. Uzu keyword_suggestions.csv por plua analizo:
    • unue_vidita: jen la dato, kiam la konsulto aperis por la unua fojo en la aŭtomata sugesto
    • laste_vidita: la dato kie la konsulto estis vidita por la lasta fojo
    • estas_nova: se unue_vidite == laste_vidita ni starigis ĉi tion al veraj - Nur filtru ĉi tiun valoron por akiri la novajn tendencajn serĉojn en la aŭtomata sugesto de Google.

Jen la Python-Kodo

# 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

Elŝutu la Python-Skripton

Kion vi pensas?

Ĉi tiu retejo uzas Akismeton por redukti spamon. Lernu, kiel via komento datiĝas.