Python: Скрипт Google Autosuggest Тендерлердин Көчүрмөсүн Издөө Ачкыч Ачкыч Сөздөрү

Autosuggest Trendsди кармоо үчүн Python скрипти

Google Trends баарына жагат, бирок Long Tail ачкыч сөздөрүнө келгенде бир аз татаал. Чиновник баарыбызга жагат google trend кызматы издөө жүрүм-туруму жөнүндө түшүнүк алуу үчүн. Бирок, эки нерсе көпчүлүктүн аны катуу жумушка колдонуусуна жол бербейт;

  1. Качан табыш керек жаңы орундуу ачкыч сөздөржок Google Trends боюнча маалыматтар жетишсиз 
  2. Google тренддерине сурамдарды жөнөтүү үчүн расмий API жоктугу: Биз сыяктуу модулдарды колдонгондо pytrends, анда биз прокси-серверлерди колдонушубуз керек, же биз тосулуп калабыз. 

Бул макалада Google Autosuggest аркылуу популярдуу сөздөрдү экспорттоо үчүн жазган Python скриптин бөлүшөм.

Убакыттын өтүшү менен Autosuggest Натыйжаларды алып келиңиз жана сактаңыз 

Google Autosuggestке жөнөтүлө турган 1,000 Seed ачкыч сөзүбүз бар деп коёлу. Анын ордуна, биз болжол менен 200,000 алабыз узун куйрук ачкыч сөздөр. Андан кийин, бир жумадан кийин дагы бир нерсени жасап, эки маалыматка жооп берүү үчүн ушул топтомдорду салыштырып көрүшүбүз керек:

  • Кайсы суроолор бар жаңы ачкыч сөздөр акыркы жолу менен салыштырганда? Бул бизге керек болушу мүмкүн. Google бул суроолор кыйла маанилүү болуп жатат деп ойлойт - муну менен биз өзүбүздүн Google Autosuggest чечимибизди түзө алабыз! 
  • Кайсы суроолор бар ачкыч сөздөр мындан ары тренд?

Сценарий оңой жана мен бөлүшкөн коддун көпчүлүгү бул жерде. Жаңыртылган код мурунку чуркоодогу дайындарды сактап, сунуштарды убакыттын өтүшү менен салыштырат. Жөнөкөй болуш үчүн SQLite сыяктуу файлга негизделген маалымат базаларынан алыс болчубуз, андыктан бардык маалыматтар сактагыч төмөндөгү CSV файлдарды колдонот. Бул файлды Excelге импорттоого жана бизнес үчүн орду бар ачкыч сөздөрдүн тенденциясын изилдөөгө мүмкүндүк берет.

Бул Python Скриптин Колдонуу

  1. Автотолтурууга жөнөтүлүшү керек болгон үрөндүн ачкыч сөздөрүн киргизиңиз: keywords.csv
  2. Скрипт орнотууларын өзүңүздүн керектөөңүз үчүн тууралаңыз:
    • ТИЛ: демейки “en”
    • ӨЛКӨ: демейки "биз"
  3. Сценарийди жумасына бир жолу иштөөнү пландаштырыңыз. Аны кол менен каалагандай иштете аласыз.
  4. Кийинки талдоо үчүн keyword_suggestions.csv колдонуңуз:
    • биринчи_көрүлгөн: бул суроо Автосунушта биринчи жолу пайда болгон күн
    • акыркы_көрүлгөн: суроо акыркы жолу көрүлгөн күн
    • жаңы: if first_seen == last_seen биз муну койдук чыныгы - Google autosuggest'де жаңы тренддеги издөөлөрдү алуу үчүн ушул маани боюнча гана чыпкалоо керек.

Бул жерде 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 колдонот. Сиздин комментарий маалымат кандайча иштелишин Үйрөнүү.