Скрипт на Python осуществляет поиск самых продвинутых сайтов конкурентов в поисковой системе Google по списку поисковых запросов в ТОП-10 выдачи.
Необходимо указать в файле keys.txt ключевые слова, по которым требуется парсить выдачу. Файл положить в туже директорию, в которой находится скрипт. После работы скрипта в той же директории появится файл result_keys.txt с результатами: домен конкурента и количество раз, которое он встречался в выдаче. Например, ozon.ru 20 — интернет-магазин ozon.ru по загруженным ключам встречался в выдаче Google ТОП-10 — 20 раз.
Работа скрипта продемонстрирована на Jupyter Notebook.
Подключаем модули, которые потребуются для работы скрипта:
1 2 3 4 | from requests_html import HTMLSession import time import random from operator import itemgetter |
Далее загружаем список ключевых фраз, по которым будет осуществляться парсинг
1 2 3 4 5 | keys = [] with open ('keys.txt', 'r', encoding="utf-8") as k: for line in k: line = line.strip() keys.append(line) |
Собственно эти строчки кода осуществляют парсинг с задержкой между запросами от 4 до 10 секунд. Задержка предназначена для уменьшения вероятности блокировки со стороны Гугла.
1 2 3 4 5 6 7 8 9 10 | spisok = [] session = HTMLSession() for k in keys: res = session.get(f'https://www.google.ru/search?q={k}&num=10&hl=ru') links = res.html.xpath('//div[@class="g"]/div[@class="rc"]/div[@class="yuRUbf"]/a/@href') domains = [x.split('/')[2] for x in links if 'http' in x] spisok.append(domains) random_timeout = random.randint(4, 10) time.sleep(random_timeout) |
Производим сортировку полученных результатов в порядке уменьшения.
1 2 3 4 5 6 7 8 9 | common_list = [] for x in spisok: common_list.extend(x) result = {i: common_list.count(i) for i in common_list} sortirovka = list(result.items()) result = sorted(sortirovka, key=itemgetter(1), reverse = True) result |
Готовый результат выгружаем в файл result_keys.txt
1 2 3 4 5 6 | result = dict(result) with open ('result_keys.txt', 'w') as b: for dom, chast in result.items(): b.write(f'{dom}\t{chast}' + '\n') print(f'{dom}\t{chast}') |
Весь код будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | from requests_html import HTMLSession import time import random from operator import itemgetter keys = [] with open ('keys.txt', 'r', encoding="utf-8") as k: for line in k: line = line.strip() keys.append(line) spisok = [] session = HTMLSession() for k in keys: res = session.get(f'https://www.google.ru/search?q={k}&num=10&hl=ru') links = res.html.xpath('//div[@class="g"]/div[@class="rc"]/div[@class="yuRUbf"]/a/@href') domains = [x.split('/')[2] for x in links if 'http' in x] spisok.append(domains) random_timeout = random.randint(4, 10) time.sleep(random_timeout) common_list = [] for x in spisok: common_list.extend(x) result = {i: common_list.count(i) for i in common_list} sortirovka = list(result.items()) result = sorted(sortirovka, key=itemgetter(1), reverse = True) result = dict(result) with open ('result_keys.txt', 'w') as b: for dom, chast in result.items(): b.write(f'{dom}\t{chast}' + '\n') print(f'{dom}\t{chast}') |