Генерация доменных имен с использованием Python: От алгоритмов до прогресса
Исходный код
Вот код, который мы будем дорабатывать, добавляя вывод информации о прогрессе выполнения:
import re
from itertools import product
# Список букв, из которых будут генерироваться доменные имена
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
try:
# Открываем файл в режиме добавления
with open('./list_whois_3_full.txt', 'a') as frt:
domains = ['.ru', '.com', '.net', '.org', '.info']
# Генерация всех комбинаций из трех букв
total_combinations = len(lst) ** 3 * len(domains) # Общее количество возможных комбинаций
progress_counter = 0 # Счетчик для отслеживания прогресса
for letters in product(lst, repeat=3):
domain_base = ''.join(letters)
for domain in domains:
domain_name = f"{domain_base}{domain}\n"
print(domain_name) # Печатаем сгенерированное доменное имя
try:
frt.write(domain_name) # Записываем доменное имя в файл
except IOError as e:
print(f"Ошибка при записи в файл: {e}")
progress_counter += 1 # Увеличиваем счетчик на одну
# Выводим информацию о прогрессе выполнения
if progress_counter % 100 == 0: # Каждые 100 записей
print(f"Сгенерировано {progress_counter} из {total_combinations} доменных имен...")
except FileNotFoundError:
print("Файл не найден. Проверьте путь к файлу.")
except IOError as e:
print(f"Ошибка открытия файла: {e}") # Обработка ошибок открытия
Пошаговое объяснение улучшенного кода:
1. Импорт библиотек:
- import re – импорт библиотеки для работы с регулярными выражениями, хотя она не используется в данном коде, ее можно удалить.
- from itertools import product – импортируем функцию product для создания всех возможных комбинаций букв.
2. Список букв:
- lst = [...] – создаем список, содержащий все буквы английского алфавита.
3. Открытие файла с обработкой исключений:
- Используем блок try, чтобы перехватывать возможные ошибки, например, если файл не найден.
4. Объявление доменных зон:
- domains = ['.ru', '.com', '.net', '.org', '.info'] – определяем список завершений доменов.
5. Расчет общего количества комбинаций:
- total_combinations = len(lst) ** 3 * len(domains) – вычисляем общее количество возможных доменных имен исходя из количества букв и доменных зон.
6. Инициализация счетчика прогресса:
- progress_counter = 0 – создаем переменную для отслеживания прогресса выполнения.
7. Циклы для генерации доменных имен:
- Внешний цикл for letters in product(lst, repeat=3) генерирует комбинации из трех букв.
- Для каждой комбинации, внутренний цикл перебирает все доменные зоны и формирует окончательное доменное имя.
8. Формирование строк доменных имен:
- domain_name = f"{domain_base}{domain}\n" – создаем строку с доменным именем и добавляем перенос строки.
9. Запись в файл:
- frt.write(domain_name) – записываем доменное имя в файл.
10. Увеличение счетчика прогресса:
- Увеличиваем счетчик на единицу после каждой записи.
11. Вывод прогресса:
- Каждые 100 записей выводится текущий прогресс в консоли.
Пример использования
1. Убедитесь, что Python установлен на вашем компьютере. Его можно загрузить с официального сайта.
2. Создайте файл list_whois_3_full.txt в той же директории, что и скрипт.
3. Скопируйте приведенный код в текстовый файл с расширением .py, например, domain_generator.py.
4. Откройте консоль или терминал и перейдите в каталог, где сохранен скрипт:
cd путь/к/каталогу
5. Запустите скрипт с помощью команды:
python domain_generator.py
6. После завершения работы кода откройте файл list_whois_3_full.txt, чтобы увидеть сгенерированные доменные имена и информацию о прогрессе.