Я большой поклонник SEMrush (и нет, SEMrush мне не платит за то, чтобы сказать это… по крайней мере, пока). Я изучил основы SEO через их бесплатные пробные аккаунты, и они были основным инструментом, который я использовал в каждом своем первом SEO-проекте. Но, не говоря уже о проповеди бренда, всегда существует неутолимая жажда большего количества данных и большего доступа к тому, что может предложить SEMrush. Поскольку я продолжал внедрять автоматизацию в процесс SEO, я знал, что должен быть способ использовать инструменты, к которым я так привык, чтобы он был более быстрым, оптимизированным и более всеобъемлющим, чем то, как Пользуюсь ими с первого дня.

Для тех, кто не знает, API (сокращенно от Application Programming Interface) - это набор кода, который обеспечивает связь между программным обеспечением, будь то взаимодействие двух сайтов или просто строки сценария. Я не буду вдаваться в подробности того, как работают API-интерфейсы (я бы не смог, даже если бы попробовал), но расскажу о том, как много у каждого инструмента SEO на рынке есть. Но в этом конкретном случае я подробно остановлюсь на одном из моих личных фаворитов. Я пишу эту статью для того, чтобы вам не пришлось проводить те же часы за часами исследований, которые мне пришлось пройти, чтобы получить что-то, что вы можете сразу начать использовать.

Сразу же я расскажу о том, как получить доступ к SEMrush API через Python. Я не встречал слишком много маркетологов, которые хорошо разбираются в PHP или Java, и это, вероятно, самый простой язык для не-разработчика (вроде меня).

Для начала вы захотите взять этот файл из GitHub и следовать документации SEMrush, чтобы получить ключ, который вам понадобится для доступа к API (обратите внимание, вам понадобится платная подписка для доступа к API). После того, как вы загрузили файл и сгенерировали ключ, поместите файл GitHub туда, где на вашем компьютере ваша IDE содержит модули, и распакуйте его, используя приведенные ниже строки.

Поместите сгенерированный ключ в круглые скобки, и вы уже готовы начать извлечение данных непосредственно из SEMrush! Что все это значит? Что ж, позвольте мне показать вам, что вы можете делать со всем этим доступом.

Использование SEMRush API через Wrapper

from python_semrush.semrush import SemrushClient
import pandas as pd
client = SemrushClient(key='your_semrush_api_key')

Для тех, кто не хочет полагаться на сторонние оболочки, вы можете создать вызов API, используя urllib, чтобы создать URL-адрес для вызова, а затем использовать запросы для вызова сервер.

Хотя оболочка обеспечивает простой доступ к API, она ограничивает настройку, которую можно выполнить с помощью вызовов. Я также обнаружил, что оболочка не обновляется активно для включения новейших функций API, которые может предложить SEMRush (например, Версия 4, которая позволяет создавать POST-запросы для кампаний аудита сайта или обновлений версии 3, которые позволяют GET-запросы трафика. данные). Для некоторых основных вызовов, которые я рассмотрю здесь, все они должны быть доступны через оболочку. Но для тех, кто хочет извлечь уроки из этой статьи и применить их помимо этой статьи, я бы рекомендовал использовать эти функции в более долгосрочной перспективе.

Использование SEMRush API через отдельные функции

import urllib
from urllib.parse import urlparse
import requests
import pandas as pd
### Load API Key and root url for API call ###
api_key = 'your api key'
service_url = 'https://api.semrush.com'
### Function used to monitor credit use for SEMrush API ###
def semrush_call(call_type, phrase):
    params = {
        "?type": call_type,
        'key': api_key,
        'phrase': phrase,
        'database': 'us', # change for different market
        'display_limit': '10',
        }
    data = urllib.parse.urlencode(params, doseq=True)
    main_call = urllib.parse.urljoin(service_url, data)
    main_call = main_call.replace(r'%3F', r'?')
return main_call
### Function used to parse data from semrush_call###  
def parse_response(call_data):
        results = []
        data = call_data.decode('unicode_escape')
        lines = data.split('\r\n')
        lines = list(filter(bool, lines))
        columns = lines[0].split(';')
for line in lines[1:]:
            result = {}
            for i, datum in enumerate(line.split(';')):
                result[columns[i]] = datum.strip('"\n\r\t')
            results.append(result)
return results

Мгновенный массовый анализ ключевых слов

Я знаю, я знаю, что Планировщик ключевых слов Google обычно берет пирог для наиболее часто используемых для массового исследования ключевых слов. Но с появлением новой Google Рекламы и установленных ограничений на объем данных, к которым вы можете получить доступ одновременно, использование Планировщика ключевых слов иногда может занимать больше времени, чем вы хотите. Использование API SEMrush в качестве нового планировщика ключевых слов позволяет вам массово импортировать до 50 000 ключевых слов и получать результаты при нажатии клавиши ВВОД в CSV, заполненный объемом поиска, конкуренцией и ценой за клик, менее чем за минуту. Просто подключите и воспроизведите приведенный ниже код.

from python_semrush.semrush import SemrushClient
import pandas as pd
client = SemrushClient(key='your_semrush_api_key')
yourKeywords = ['movie theater popcorn', 'cheddar cheese popcorn', 'kettle corn', 'kettle popcorn', 'caramel popcorn']
#youKeywords can be substituted for a column of a csv file using pandas 
a = []
for every in yourKeywords:
    keywordInfo = client.phrase_this(phrase=every, database='us')
    a.append(keywordInfo.copy())
finalKeywordData = pd.DataFrame(i[0] for i in a)
finalKeywordData.to_csv("EnterYourCSVFileNameHere.csv")

Массовый поиск ключевых слов без оболочки

yourKeywords = ['movie theater popcorn', 'cheddar cheese popcorn', 'kettle corn', 'kettle popcorn', 'caramel popcorn']
#youKeywords can be substituted for a column of a csv file using pandas 
keyword_frame = []
for every in yourKeywords:
    data=requests.get(semrush_call(call_type='phrase_all',    every))
    parsed_data = parse_response(call_data=data.content)
    df = pd.DataFrame(parsed_data)
    keyword_frame.append(df
finalKeywordData = pd.concat(keyword_frame)
finalKeywordData.to_csv("EnterYourCSVFileNameHere.csv")

Выходите за рамки установленных SEMRush ограничений для отчетов на месте

Хотите действительно понять общий рейтинг вашего сайта, но с рейтингом по более чем 50 000 ключевых слов. Вместо того, чтобы ждать индивидуального отчета, увеличьте вдвое объем информации о домене, который вы можете получить за считанные секунды. Просто отфильтруйте на основе позиционирования с помощью pos_asc и pos_des, чтобы получить доступ к вашим 50 000 верхних и 50 000 нижних ключевых слов. Работаете с международным сайтом? Обязательно измените базу данных на код базы данных вашей страны.

from python_semrush.semrush import SemrushClient
import pandas as pd
client = SemrushClient(key='your_semrush_api_key')
domainOrganic = 'yourdomain.com'
domainResult = client.domain_organic(domain=domainOrganic, database='us', display_limit=50000, display_sort='po_asc')
domainDataFrame = pd.DataFrame(domainResult)
domainDataFrame.to_csv("EnterYourCSVFileNameHere.csv")

Анализ результатов поиска без создания парсера

Данные результатов поисковой выдачи дают тонкую информацию о конкурентной среде, о том, кто на каких условиях доминирует и в чем может заключаться ваше конкурентное преимущество. Но часто это становится утомительным занятием - вручную пролистывать результаты поиска или копаться в поисках готовых ботов, которые почти наверняка будут обнаружены Google. Вместо этого получайте данные прямо из SEMRush, используя ряд функций для вызова данных, их анализа и объединения в один полный файл Excel.

def build_seo_urls(phrase):
    params = {
        "?type": "phrase_organic",
        'key': api_key,
        'phrase': phrase,
        'database': 'us', 
        'display_limit': '10'
        }
    data = urllib.parse.urlencode(params, doseq=True)
    main_call = urllib.parse.urljoin(service_url, data)
    main_call = main_call.replace(r'%3F', r'?')
    return main_call
  
def parse_response(call_data):
        results = []
        data = call_data.decode('unicode_escape')
        lines = data.split('\r\n')
        lines = list(filter(bool, lines))
        columns = lines[0].split(';')
        for line in lines[1:]:
            result = {}
            for i, datum in enumerate(line.split(';', 1)):
                result[columns[i]] = datum.strip('"\n\r\t')
            results.append(result)
        return results
df = pd.read_excel('keywords_list.xlsx')
df = df[df['Category'].str.contains('|'.join(categories))]
terms = df.Keyword
# SERP Scrape 
pos_count = 0
pos_correct = 0
second_pass = []
pos = list(range(1,11))
frames = []
for kw in tqdm(terms):
    competitive_call = build_seo_urls(phrase=kw)
    competitive_response = requests.get(competitive_call)
    competitive_final =   parse_response(call_data=competitive_response.content)
    df2 = pd.DataFrame(competitive_final)
    if len(df2) > 1:
        df2['Position'] = pos
        df2['Keyword'] = kw
        frames.append(df2)
        pos_correct += 1
    else: 
        second_pass.append(kw)
        pass
    pos_count +=1
print('Original Data Input = {}'.format(len(terms)))
print('Data Collected = {}'.format(pos_correct))
print("Keyword Data Collected via SEMRush: {}% ".format(pos_correct/pos_count*100.0))
    
    
df = pd.concat(frames)
df = df[['Keyword', "Domain", 'Url', 'Position']]
df.to_excel('serp_data.xlsx')

Несколько строк кода - это все, что вам нужно для улучшения вашей следующей SEO-кампании. Хотя приведенные выше примеры представляют собой фрагменты кода, которые я внедрил в свой рабочий процесс, возможность доступа к информации через SEMRush ограничена только потребностями вашей организации в данных. Приступая к дальнейшей работе с API с помощью Python Wrapper, держите вкладку открытой с Документацией по SEMRush API. Хотя он не предоставляет исчерпывающих примеров для каждого из своих вариантов использования, он дает вам необходимые данные, необходимые для работы вашего кода.

Ищете другие примеры использования SEMRush API? Свяжитесь со мной напрямую через LinkedIn или Twitter!