Python: Script 'n uittreksel uit Google van die tendense vir u sleutelwoorde vir niche

Python-skrif om neigings outomaties voor te stel

Almal hou van Google Trends, maar dit is 'n bietjie lastig as dit by Long Tail Keywords kom. Ons hou almal van die amptenaar google tendense diens vir insig oor die soekgedrag. Twee dinge verhoed egter dat baie dit nie vir vaste werk gebruik nie;

  1. Wanneer u moet vind nuwe nis sleutelwoordedaar is nie genoeg data oor Google Trends nie 
  2. Gebrek aan amptelike API om versoeke aan google-tendense te rig: Wanneer ons gebruik maak van modules soos pytrends, dan moet ons instaanbedieners gebruik, anders word ons geblokkeer. 

In hierdie artikel deel ek 'n Python Script wat ons geskryf het om trending sleutelwoorde via Google Autosuggest uit te voer.

Haal en stoor outomaties voorgestelde resultate oor tyd 

Gestel ons het 1,000 200,000 sleutelwoorde wat na Google Autosuggest gestuur moet word. In ruil daarvoor sal ons waarskynlik ongeveer XNUMX XNUMX kry lang stert sleutelwoorde. Dan moet ons dieselfde week doen en hierdie datastelle vergelyk om twee vrae te beantwoord:

  • Watter navrae is nuwe sleutelwoorde in vergelyking met die vorige keer? Dit is waarskynlik die geval wat ons nodig het. Google dink dat hierdie navrae al hoe belangriker word - deur dit te doen, kan ons ons eie oplossing vir Google Autosuggest skep! 
  • Watter navrae is sleutelwoorde nie meer nie trending?

Die script is redelik maklik en die meeste kode wat ek gedeel het hier afgelaai word. Die opgedateerde kode stoor die data van vorige lopies en vergelyk die voorstelle oor tyd. Ons het lêergebaseerde databasisse soos SQLite vermy om dit eenvoudig te maak - dus gebruik al die stoor van data CSV-lêers hieronder. Dit stel u in staat om die lêer in Excel in te voer en nis-sleutelwoordneigings vir u besigheid te ondersoek.

Om hierdie Python-skrif te gebruik

  1. Voer u sleutelwoordstel in wat na die outovoltooi gestuur moet word: keywords.csv
  2. Pas die Skrip-instellings aan volgens u behoefte:
    • TAAL: verstek “af”
    • LAND: verstek “ons”
  3. Beplan dat die teks een keer per week moet loop. U kan dit ook handmatig uitvoer soos u wil.
  4. Gebruik keyword_suggestions.csv vir verdere ontleding:
    • eerste_gesien: dit is die datum waarop die navraag vir die eerste keer in die outovoorstel verskyn het
    • laas gesien: die datum waarop die navraag vir die laaste keer gesien is
    • is_nuut: as eerste_gesien == laaste_gesien, stel ons dit in True - Filter net op hierdie waarde om die nuwe gewilde soektogte in die Google-outovoorstel te kry.

Hier is die Python-kode

# 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

Laai die Python Script af

Wat dink jy?

Hierdie webwerf gebruik Akismet om spam te verminder. Leer hoe jou opmerking verwerk is.