Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

В этой статье расскажу, как массово проверить наличие информации о домене в WHOIS. Немного о том, для чего это нужно в SEO, и как сэкономить деньги на сервисах, предлагающих подобные услуги, если у вас сотни тысяч доменов. Эта статья будет полезна тем, кто занимается SEO и PBN и хочет сэкономить деньги на проверке whois в платных сервисах. Будет использоваться Python. Но полезно будет не только знатокам змеиного языка, но и тем кто очень хочет разобраться.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Если вы хотите сразу получить готовое решение, то вы можете это сделать. Перейдите к разделу статьи "Перенос скрипта в Google Colab". Там будет ссылка на блокнот в Colab. Переходите и запускайте скрипт массовой проверки whois для ваших доменов.

Что такое whois?

Прежде чем начать, хотелось бы на берегу определиться, что такое whois и как работает. В двух словах, WHOIS (от англ. who is — «кто это?») - это сетевой протокол, который базируется на протоколе TCP. По сути это соглашение о том, в каком виде передавать информацию клиенту при запросе к серверу о владельцах доменных имен и их регистрационных данных, таких как: данные о регистраторе домена, дата первой регистрации, дата окончания регистрации, контактные данные владельца домена и проч.

Информация о зарегистрированных доменах находится на различных whois серверах. Одной из задач проверки whois для домена является определение правильного whois сервера, для того чтобы получить полные данные по домену.

Для чего это нужно в SEO?

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

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

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

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

Сервисы массовой проверки whois

И вот мы постепенно переходим к решению для массовой проверки whois. На российском рынке существует достаточно сервисов, которые решают эту задачу. Некоорые из них я привел ниже.

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

Надо сказать, что это отличные сервисы, которые не просто так находятся в топе обоих поисковиков (а именно так я их и нашел). Они отлично решают проблемы большинства клиентов. Если у вас небольшое количество проверяемых доменов, то смело можете попробовать любой из этих сервисов, они на 100% решат вашу задачу (и не только эту). Скорее всего, вы ими и так пользуетесь.

Но если у вас большое количество доменов для проверки, от 100 тыс. и больше, то возможно, вы захотите сэкономить деньги на проверке.

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

Сложности получения whois для разных TLDs

Но про сложности все-таки стоит сказать. В действительности, массовая проверка whois это довольно нетривиальная задача. Протокол, на котором основывается ответ от whois сервера содержит очень мало информации и конкретики. Нет четких и подробных правил, как должен быть выстроен ответ. Какие поля обязательны, что за чем следует и т. д. Поэтому ответы от разных whois серверов (читай: разных доменных зон) могут сильно отличаться друг от друга. Ради примера, проверим данные через unix утилиту whois. Просто вводим команду в консоли.

whois vk.ru

И получаем такой ответ:

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Тот же запрос для домена vk.com:

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Как говорится, почувствуйте разницу. При том, что оба эти whois сервера российские. В одном случае, поле с именем домена называется domain, в другом Domain name. В первом - дата окончания регистрации выводится в paid-till, в другом это Registrar Registration Expiration Date. Надо ли говорить про различия других доменных зон? Вопрос риторический. Однако решение задачи: массово проверить whois для разных доменных зон - есть.

Пишем свой whois-чекер

Существует отличная библиотека, написанная на Python, с помощью которой можно проверить информацию для большинства популярных доменных зон. Она так и называется: python-whois. Эта библиотека берет на себя работу по поиску правильного whois сервера и парсингу информации ответа от этого сервера. Т. е. при запросах к разным доменным зонам мы получим единый стандартизированный ответ с одинаковыми полями для доступа.

Создание проекта

Создаем у себя папку с проектом, где будут хранится файлы программы. Я назову ее whois_checker. Создам виртуальное окружение.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

И активирую его.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Далее устанавливаем библиотеку python-whois.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Создаем файл парсера, whois_checker.py. И далее весь код будем писать в этом файле.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Первые вызовы whois

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

import whois resp = whois.whois("google.com") print(resp)

Запускаем код и получаем вот такой словарь:

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Чтобы получить имя домена, достаточно просто вызвать соответствующий метод объекта whois:

import whois resp = whois.whois("google.com") # Получить имя домена print(resp.domain_name)

И получим GOOGLE.COM. Точно также получаем дату первой регистрации и дату окончания регистрации.

import whois resp = whois.whois("google.com") # Получить имя домена print(resp.domain_name) # Получить дату регистрации print(resp.creation_date) # Получить дату окончания регистрации print(resp.expiration_date)

Нам нужно получить данные об имени домена, дате регистрации, дате окончания регистрации. Все это для списка доменов.

Whois для списка доменов

Создадим список из нескольких доменов. Я взял для примера 10 доменов.

domains = [ "ehow.com", "menshealth.com", "sportingnews.com", "pearson.com", "blackrock.com", "tmcnet.com", "shopstyle.com", "diesel.com", "lightreading.com", "art.com", ]

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

# Чекер whois информации для списка доменов def whois_checker(domains): list_data = [] for domain in domains: whois_data = whois.whois(domain) list_data.append(whois_data) return list_data

Получаем такой длинный список из всех данных whois для каждого домена, значит все работает.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Теперь из этого ответа нужно получить только доменное имя, дату регистрации и дату окончания регистрации. Пишем еще одну функцию, которая будет это делать. На вход функция получает всю информацию whois для одного домена. Если эта информация получена, то возвращаем словарь с необходимыми нам данными.

# Извлечение данных из ответа whois def extr_whois_data(domain_info): if domain_info: return { "domain": domain_info.domain_name, "creation_date": domain_info.creation_date, "expiration_date": domain_info.expiration_date } return None

И вызываем эту функцию внутри функции whois_checker().

# Чекер whois информации для списка доменов def whois_checker(domains): list_data = [] for domain in domains: whois_data = whois.whois(domain) # Достаем необходимые данные из ответа list_data.append(extr_whois_data(whois_data)) return list_data

И все работает, мы получили для каждого домена из списка: имя, дату регистрации, дату окончания регистрации.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Увеличиваем количество доменов

Теперь давайте увеличим количество доменов с 10 до 100, запишем полученные данные в отдельный файл и замерим время работы скрипта.

Чтобы не писать в коде список из 100 доменов, напишем отдельную функцию для чтения из файла.

# Чтение доменов из файла def read_domains_from_file(file_path): with open(file_path, "r", encoding="utf-8") as file: return [line.strip() for line in file]

И просто перенесу в локальный txt файл 100 доменов.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Записываем данные в файл

Теперь напишем функцию для записи полученных данных в текстовый файл, разделенный запятыми. На вход функция получает нашу информацию whois и путь до файла. И построчно записывает данные в файл.

# Запись данных в файл, разделенные запятыми def write_results(file_path, results, mode="a"): with open(file_path, mode, encoding="utf-8") as file: for row in results: line = ",".join([ str(row.get("domain", "")).lower(), str(row.get("creation_date", "")), str(row.get("expiration_date", "")) ]) file.write(line + "\n")

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

# Удаление дублей в списке доменов def get_unique_domains(domains): return {domain for domain in domains}

Теперь нужно немного изменить функцию whois_checker() для того, чтобы обработать кейс, когда данных от whois сервера нет. Это означает, что домен свободен для регистрации. Для этого мы просто вызываем исключение и возвращаем None.

# Чекер whois информации def whois_checker(domain): try: whois_data = whois.whois(domain) return extr_whois_data(whois_data) # В случае ошибки возвращаем None except Exception as e: print(f"Failed to fetch whois for {domain}: {e}") return None

Переписываем запуск скрипта

В конструкции запуска переписываем вызовы.

if __name__ == "__main__": start_time = time.time() # Получаем список доменов из файла domains = read_domains_from_file("domains.txt") # Получаем только уникальные домены unique_domains = get_unique_domains(domains) # Определяем имя файла для сохранения RESULTS_FILE = "results.txt" # Прописываем заголовки файла with open(RESULTS_FILE, "w", encoding="utf-8") as file: file.write("domain,creation_date,expiration_date\n") for domain in unique_domains: # Получаем данные о домене в WHOIS whois_data = whois_checker(domain) # Если данные есть, записываем данные в файл if whois_data: write_results(RESULTS_FILE, [whois_data]) # Если данные отсутствуют, значит домен свободен для регистрации else: write_results(RESULTS_FILE, [{ "domain": domain, "creation_date": None, "expiration_date": "Available" }]) # Замеряем время выполнения end_time = time.time() print(f"Execution time: {round(end_time - start_time, 3)} seconds")

Проверка работы скрипта

Запускаем скрипт.

Открываем текстовый файл в любом редакторе, который поддерживает csv формат (данные разделены запятыми). И получаем вот такие данные. 3 столбца: домен, дата регистрации, дата окончания. Видим, что есть свободные домены.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Время работы программы составило 75 секунд. Что, на мой взгляд, является неплохим результатом для такого простого кода.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Перенос скрипта в Google Colab

Все эти куски кода, которые были выше продемонстрированы - собраны воедино на Google Colab. Переходите по ссылке и запускайте.

Нюансы работы в Google Colab

Для начала нужно будет скопировать блокнот.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Для загрузки файла с доменами отвечает вот эта ячейка:

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

После запуска скрипта будет предложено загрузить файл. Выбираем файл в формате TXT и загружаем список доменов.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Все файлы будут храниться в этой вкладке.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Для запуска идем в "Среда выполнения > Выполнить все".

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Еще я добавил задержку между запросами, потому что в Colab довольно шустро посылает запросы в цикле. А это может быть проблемой, потому что можем упереться в лимиты whois сервера.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Внизу будут выводиться логи.

Как проверить 100 000 доменов в Whois: бесплатно и без регистрации

Масштабирование whois-чекера до 100 тыс. доменов

Масштабируя это на 100 000 доменов, гипотетически, мы получим все данные примерно через сутки. Учитывая экономию денег на проверку такого масштаба в сервисах от 5 до 20 тыс. рублей, думаю, что это терпимо. Опять же, не все из этих сервисов смогут обработать такое количество за итерацию. И не понятно, сколько там времени занимает обработка такого количества доменов. Кстати, если вы пользовались такими, напишите в комментарии, сколько времени у вас уходит на массовую проверку whois, примерно?

Безусловно, можно ускорить работу скрипта. Но понадобится полностью изменить подход к вызовам методов таким образом, чтобы программа работала асинхронно. А это уже сложная отдельная тема. И в данном руководстве рассматривать такой подход будет излишним.

Также, существует проблема ограничения запросов к серверам whois. Где-то это ограничения на запросы в минуту, где-то ограничения на день. Например, сервер whois.tcinet.ru ограничивает запросы до 120 в минуту, что довольно неплохо. А сервер whois.dns.pl ограничивает до 100 запросов в день для одного IP.

Если у вас не какие-то экзотические доменные зоны, то данный скрипт соберет данные на 99%, для RU и COM точно. Для остальных желательно почитать документацию и делать задержки, либо подключать прокси.

Также, обращаю внимание, что если в списке доменов на проверку есть поддомены, то, информация whois будет возвращена и записана для основного домена.

Надеюсь, статья была полезной. Если дочитал(а) до конца, ставь лайк. Пиши вопросы в комментарии к статье. Также, я провожу консультации по SEO и PBN, обращайтесь в ТГ.

А чем вы пользуетесь для проверки whois? Напишите в комментарии.

22
Начать дискуссию