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