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

Мы создадим парсер для результатов поиска 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={любое ключевое слово или фраза}

Для этого сообщения в блоге нашим целевым ключевым словом будет «цены очистки», и мы должны найти рейтинг домена 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'}
target_url=’https://www.google.com/search?q=scrape+prices'
resp = requests.get(target_url, headers=headers)
print(resp.status_code)

Здесь мы объявили некоторые заголовки, такие как User-Agent и Referer, чтобы они действовали как обычный браузер, а не как поисковый робот. Затем мы объявили наш целевой URL-адрес и, наконец, сделали запрос GET, используя библиотеку запросов. Как только мы запустим этот код, вы должны увидеть 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 urlparse
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))

Мы использовали библиотеку 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”})
 # 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
  position=x+1
if(found==True):
 print(“Found at position”, position)
else:
 print(“not found in top “+ str(position)+ “ results”)
if __name__ == “__main__”:
 schedule.every(5).seconds.do(tracker)
 while True:
  schedule.run_pending()

Здесь мы запускаем schdule каждые 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(“[email protected]”, “xxxx”)
 SUBJECT = “Position Alert”
 message = ‘From: [email protected] \nSubject: {}\n\n{}’.format(SUBJECT, attackMsg)
 server.sendmail(“[email protected]”, ‘[email protected]’, 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”})
 # 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
  position=x+1
if(found==True):
 message=”Found at position “+ str(position)
 mail(message)
else:
 message=”not found in top “+ str(position)+ “ results”
 mail(message)
if __name__ == “__main__”:
 schedule.every().day.at("12:00").do(job)
 while True:
  schedule.run_pending()

В функции почты мы пытаемся войти в нашу учетную запись Gmail с паролем. Затем мы объявили тему и сообщение, которое будет отправлено нам. Затем, наконец, мы использовали функцию .senemail для отправки оповещения по электронной почте. Это будет отправлять оповещение по электронной почте каждые 24 часа прямо на ваш почтовый ящик.

Теперь вам может быть интересно, что если мы остановим скрипт, наш планировщик перестанет работать. Да, вы правы, и для решения этой проблемы мы воспользуемся nohup.

Nohup проигнорирует сигнал зависания и продолжит выполнение вашего скрипта, даже если вы его остановите.

Я оставляю это задание на вас в качестве домашнего задания в надежде, что вы узнаете что-то новое и уникальное.

Заключение

В этом посте мы узнали, как создать задачу, которая может выполняться с любым заданным интервалом времени. Для выполнения этой задачи мы использовали четыре библиотеки: запросы, BS4, schdule и smtplib. Теперь это не останавливается на достигнутом, вы можете создать планировщик любого типа, например, обновления новостей, обновления акций и т. д. Я уверен, что Python сделает вашу работу быстрой и простой.

Если у вас есть какие-либо вопросы, вы можете связаться со мной из моей контактной формы.