Python: Σενάριο A Αυτόματο απόσπασμα από το Google Trends για τις εξειδικευμένες λέξεις-κλειδιά αναζήτησης

Σενάριο Python για την καταγραφή των τάσεων αυτόματης προσφοράς

Σε όλους αρέσει το Google Trends, αλλά είναι λίγο δύσκολο όταν πρόκειται για λέξεις-κλειδιά Long Tail. Μας αρέσουν όλοι οι επίσημοι υπηρεσία τάσεων google για να λάβετε πληροφορίες σχετικά με τη συμπεριφορά αναζήτησης. Ωστόσο, δύο πράγματα εμποδίζουν πολλούς να το χρησιμοποιούν για σταθερή εργασία.

  1. Όταν πρέπει να βρείτε νέες εξειδικευμένες λέξεις-κλειδιά, εκεί δεν είναι αρκετά δεδομένα στο Google Trends 
  2. Έλλειψη επίσημου API για την υποβολή αιτημάτων για τάσεις στο google: Όταν χρησιμοποιούμε ενότητες όπως pytrends, τότε πρέπει να χρησιμοποιήσουμε διακομιστές μεσολάβησης, ή θα μπλοκαριστούμε. 

Σε αυτό το άρθρο, θα μοιραστώ ένα σενάριο Python που γράψαμε για να εξάγουμε τάσεις λέξεων-κλειδιών μέσω του Google Autosuggest.

Ανάκτηση και αποθήκευση αποτελεσμάτων αυτόματης πρότασης με την πάροδο του χρόνου 

Ας υποθέσουμε ότι έχουμε 1,000 λέξεις-κλειδιά για αποστολή στο Google Autosuggest. Σε αντάλλαγμα, πιθανότατα θα λάβουμε περίπου 200,000 μακριά ουρά λέξεις-κλειδιά. Στη συνέχεια, πρέπει να κάνουμε το ίδιο μία εβδομάδα αργότερα και να συγκρίνουμε αυτά τα σύνολα δεδομένων για να απαντήσουμε σε δύο ερωτήσεις:

  • Ποια είναι τα ερωτήματα νέες λέξεις-κλειδιά σε σύγκριση με την τελευταία φορά; Αυτή είναι πιθανώς η περίπτωση που χρειαζόμαστε. Η Google πιστεύει ότι αυτά τα ερωτήματα γίνονται πιο σημαντικά - με αυτόν τον τρόπο, μπορούμε να δημιουργήσουμε τη δική μας λύση αυτόματης προσφοράς Google! 
  • Ποια είναι τα ερωτήματα λέξεις-κλειδιά πλέον τάσεις;

Το σενάριο είναι αρκετά εύκολο και το μεγαλύτερο μέρος του κώδικα που μοιράστηκα εδώ. Ο ενημερωμένος κώδικας αποθηκεύει τα δεδομένα από προηγούμενες εργασίες και συγκρίνει τις προτάσεις με την πάροδο του χρόνου. Αποφύγαμε τις βάσεις δεδομένων που βασίζονται σε αρχεία, όπως το SQLite, για να το κάνουμε απλό - επομένως όλη η αποθήκευση δεδομένων χρησιμοποιεί αρχεία CSV παρακάτω. Αυτό σας επιτρέπει να εισαγάγετε το αρχείο στο Excel και να εξερευνήσετε εξειδικευμένες τάσεις λέξεων-κλειδιών για την επιχείρησή σας.

Για να χρησιμοποιήσετε αυτό το σενάριο Python

  1. Εισαγάγετε το αρχικό σύνολο λέξεων-κλειδιών που πρέπει να σταλεί στην αυτόματη συμπλήρωση: keywords.csv
  2. Προσαρμόστε τις ρυθμίσεις σεναρίου για τις ανάγκες σας:
    • ΓΛΩΣΣΑ: προεπιλεγμένο "en"
    • ΧΩΡΑ: προεπιλογή "εμάς"
  3. Προγραμματίστε την εκτέλεση του σεναρίου μία φορά την εβδομάδα. Μπορείτε επίσης να το εκτελέσετε χειροκίνητα όπως θέλετε.
  4. Χρησιμοποιήστε το keyword_suggestions.csv για περαιτέρω ανάλυση:
    • Πρώτο_δεν: αυτή είναι η ημερομηνία στην οποία εμφανίστηκε το ερώτημα για πρώτη φορά στην αυτόματη πρόταση
    • εθεάθη τελευταία: η ημερομηνία όπου το ερώτημα εμφανίστηκε για τελευταία φορά
    • είναι νέο: if 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 για να μειώσει το spam. Μάθετε πώς επεξεργάζονται τα δεδομένα των σχολίων σας.