CoderCastrov logo
CoderCastrov
Почта

Как отслеживать ранг любого ключевого слова

Как отслеживать ранг любого ключевого слова
просмотров
5 мин чтение
#Почта

Отслеживание ранга ключевых слов является очень распространенной практикой в мире маркетинга. Многие маркетинговые команды используют дорогостоящие инструменты для отслеживания рангов своих веб-сайтов по нескольким ключевым словам на регулярной основе. Поскольку это требует ежедневного выполнения, это может быть дорого для новых бизнесов или отдельных лиц. В этой статье мы создадим парсер, который будет держать вас в курсе последних рангов по любому ключевому слову.

Мы создадим веб-парсер для результатов поиска Google с использованием Python. Предполагается, что вы уже установили Python на свой компьютер. Мы начнем с написания кода для парсера.

Приступим к кодированию

Сначала нам нужно установить все необходимые библиотеки.

Создайте папку, а затем установите эти библиотеки.

>> mkdir googlescraper
>> pip install requests
>> pip install beautifulsoup4

Затем мы импортируем эти библиотеки в наш файл. Вы можете назвать файл googlescraper.py.

import requests
from bs4 import BeautifulSoup

Наша целевая URL будет меняться в зависимости от ключевого слова, которое мы хотим парсить, но базовая структура URL Google останется неизменной.

Структура URL Google — https://www.google.com/search?q=jaipur{любое ключевое слово или фраза}

Для этого блога наше ключевое слово будет "парсить цены", и нам нужно найти ранг домена christian-schou.dk для этого ключевого слова.

Итак, наша целевая URL будет вот такой.

Давайте сначала проверим, присутствует ли этот домен в первых 10 результатах или нет.

Как вы можете видеть, URL страниц находятся внутри класса jGGQ5e и затем внутри yuRUbf. Затем нам нужно найти тег внутри класса yuRUbf и получить значение тега href.

headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',’referer’:’[https://www.google.com'](https://www.google.com')}target_url=’[https://www.google.com/search?q=scrape+prices'](https://www.google.com/search?q=scrape+prices%27)resp = requests.get(target_url, headers=headers)print(resp.status_code)

Здесь мы объявили некоторые заголовки, такие как User-Agent и Referer, чтобы действовать как обычный браузер, а не как парсер. Затем мы объявили нашу целевую URL и, наконец, сделали GET-запрос с использованием библиотеки requests. После запуска этого кода вы должны увидеть 200 в вашем терминале.

Теперь наша цель - найти наш домен. Давайте найдем его с помощью BS4.

soup=BeautifulSoup(resp.text,’html.parser’)results = soup.find_all(“div”,{“class”:”jGGQ5e”})

Мы использовали html.parser внутри библиотеки BS4 для создания дерева нашего HTML-кода. В массиве results вы получите HTML-код всех 10 лучших результатов. В этом списке мы должны искать наши ссылки одну за другой. Для этого мы собираемся использовать цикл for.

from urllib.parse import urlparsefor x in range(0,len(results)):
    domain=urlparse(results[x].find("div",{"class":"yuRUbf"}).find("a").get("href")).netloc
    
    if(domain == 'blog.christian-schou.dk'):
        found=True
        position=x+1
        break;
    else:
        found=Falseif(found==True):
    print("Найдено на позиции", position)
else:
    print("не найдено в топе", len(results))

Мы использовали библиотеку urlparse для извлечения домена из ссылки. Затем мы пытаемся сопоставить наш домен с извлеченным доменом. Если они совпадают, мы получим позицию, а если не совпадают, то будет выведено "не найдено".

Давайте запустим этот код и посмотрим, что получится.

Хорошо, запрос был успешным, так как я вижу 200, но мы не смогли найти этот домен в первых 10 результатах. Давайте искать его в первых 20 результатах, но для этого нам нужно изменить целевую URL и добавить параметр &num=20 к нашему URL Google.

URL Google станет https://www.google.com/search?q=scrape+prices&num=20

Запустите программу снова и проверьте, видите ли вы этот домен или нет.

На этот раз я нашел домен на 18-й позиции в результатах поиска Google. Таким образом, ранг этого домена для "парсить цены" - 18-й в моей стране. Эта позиция будет меняться в зависимости от страны, так как Google отображает разные результаты в разных странах.

Вот как вы можете отслеживать ранг любого домена для любого ключевого слова. Если вы хотите отслеживать его для разных стран, вы можете использовать скрапер результатов поиска Google.

В дальнейшем вы также можете создать инструмент SEO, подобный Ahref и Semrush, или создать инструмент для генерации потенциальных клиентов, подобный Snov.

import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36', 'referer': 'https://www.google.com'}

target_url = 'https://www.google.com/search?q=scrape+prices&num=20'
resp = requests.get(target_url, headers=headers)
print(resp.status_code)

soup = BeautifulSoup(resp.text, 'html.parser')
results = soup.find_all("div", {"class": "jGGQ5e"})

# print(results)

for x in range(0, len(results)):
    domain = urlparse(results[x].find("div", {"class": "yuRUbf"}).find("a").get("href")).netloc

    if domain == 'blog.christian-schou.dk':
        found = True
        position = x + 1
        break
    else:
        found = False

if found == True:
    print("Found at position", position)
else:
    print("not found in top", len(results))

Запуск кода каждые 24 часа

Предположим, вы хотите отслеживать свою позицию каждые 24 часа, потому что вы прикладываете много усилий в маркетинг и хотите видеть результаты. Для этого вы можете отправлять себе по электронной почте текущую позицию каждое утро, это поможет вам быть в курсе событий.

Мы будем использовать библиотеку schedule для выполнения этой задачи.

Полный код

import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import schedule
import time

def tracker():
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36', 'referer': 'https://www.google.com'}
    target_url = 'https://www.google.com/search?q=scrape+prices&num=20'
    resp = requests.get(target_url, headers=headers)
    print(resp.status_code)
    soup = BeautifulSoup(resp.text, 'html.parser')
    results = soup.find_all("div", {"class": "jGGQ5e"})
    
    for x in range(0, len(results)):
        domain = urlparse(results[x].find("div", {"class": "yuRUbf"}).find("a").get("href")).netloc
        if domain == 'blog.christian-schou.dk':
            found = True
            position = x + 1
            break
    else:
        found = False
        position = x + 1
    
    if found:
        print("Найдено на позиции", position)
    else:
        print("Не найдено в топ-" + str(position) + " результатов")

if __name__ == "__main__":
    schedule.every(5).seconds.do(tracker)
    while True:
        schedule.run_pending()

Здесь мы запускаем расписание каждые 5 секунд, чтобы проверить, работает ли оно для нас или нет. После запуска вы получите результаты вот так:

Теперь, чтобы запустить его каждый день или через каждые 24 часа, вы можете использовать:

schedule.every().day.at("12:00").do(job)

Теперь давайте отправим себе эти результаты по электронной почте, чтобы быть в курсе последней позиции на Google. Для этой задачи мы будем использовать библиотеку smtplib.

Почта

import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import schedule
import time
import smtplib, ssl

def mail(position):
    attackMsg = position
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login("from@gmail.com", "xxxx")
    SUBJECT = "Предупреждение о позиции"
    message = 'From: from@gmail.com \nSubject: {}\n\n{}'.format(SUBJECT, attackMsg)
    server.sendmail("from@gmail.com", 'send_to@gmail.com', message)
    server.quit()
    return True

def tracker():
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36','referer':'https://www.google.com'}
    target_url='https://www.google.com/search?q=scrape+prices&num=20'
    resp = requests.get(target_url, headers=headers)
    print(resp.status_code)
    soup=BeautifulSoup(resp.text,'html.parser')
    results = soup.find_all("div",{"class":"jGGQ5e"})
    
    for x in range(0,len(results)):
        domain=urlparse(results[x].find("div",{"class":"yuRUbf"}).find("a").get("href")).netloc
        if(domain == 'blog.christian-schou.dk'):
            found=True
            position=x+1
            break;
    else:
        found=False
        position=x+1
        
    if(found==True):
        message="Найдено на позиции "+ str(position)
        mail(message)
    else:
        message="Не найдено в топ "+ str(position)+ " результатов"
        mail(message)

if __name__ == "__main__":
    schedule.every().day.at("12:00").do(job)
    while True:
        schedule.run_pending()