mirror of
https://github.com/Ground-Zerro/DomainMapper.git
synced 2025-12-10 01:47:18 +07:00
Update subdomain.py
Многопоточность убрана. Сайт критически воспринимает множественные обращения от одного хоста и начинает выдавать страницы с пустыми субдоменами.
This commit is contained in:
@@ -27,13 +27,16 @@ def parse_page(url):
|
||||
domain = columns[0].text.strip() # Извлечение столбца 'Domain'
|
||||
data.add(domain) # Добавляем в множество
|
||||
|
||||
time.sleep(random.uniform(1, 3)) # Задержка между запросами
|
||||
time.sleep(random.choice([2, 3, 4, 5])) # Случайная задержка между запросами
|
||||
|
||||
if attempt > 0:
|
||||
print(f"Успешная загрузка {url} после {attempt}-й попытки.")
|
||||
return data
|
||||
|
||||
except requests.exceptions.HTTPError as e:
|
||||
if response.status_code == 429:
|
||||
print(f"Ошибка загрузки {url}. Пробуем еще раз...")
|
||||
time.sleep(3) # Фиксированная задержка перед повторной попыткой
|
||||
print(f"Ошибка загрузки {url}. Пробуем еще раз... (Попытка {attempt + 1})")
|
||||
time.sleep(5) # Фиксированная задержка перед повторной попыткой
|
||||
else:
|
||||
raise e
|
||||
|
||||
@@ -47,22 +50,17 @@ def parse_all_pages(base_url):
|
||||
recent_pages_data = [] # Список для хранения данных последних страниц
|
||||
|
||||
while keep_parsing:
|
||||
print(f"Парсим страницы с {page} по {page + 2}")
|
||||
pages = [f"{base_url}?page={p}" for p in range(page, page + 3)]
|
||||
print(f"Парсим страницу {page}")
|
||||
url = f"{base_url}?page={page}"
|
||||
|
||||
try:
|
||||
with ThreadPoolExecutor(max_workers=3) as executor:
|
||||
future_to_url = {executor.submit(parse_page, url): url for url in pages}
|
||||
for future in as_completed(future_to_url):
|
||||
url = future_to_url[future]
|
||||
try:
|
||||
result = future.result()
|
||||
result = parse_page(url)
|
||||
if result is None: # Если страница пуста или не существует
|
||||
print(f"Страница {url.split('=')[-1]} не существует или пуста. Проверяем еще раз...")
|
||||
print(f"Страница {page} не существует или пуста. Проверяем еще раз...")
|
||||
empty_page_attempts += 1
|
||||
time.sleep(3) # Ожидание перед повторной проверкой
|
||||
time.sleep(5) # Ожидание перед повторной проверкой
|
||||
if empty_page_attempts >= 3:
|
||||
print(f"Страница {url.split('=')[-1]} пуста после 3 попыток. Остановка.")
|
||||
print(f"Страница {page} пуста после 3 попыток. Остановка.")
|
||||
keep_parsing = False
|
||||
break
|
||||
else:
|
||||
@@ -70,7 +68,7 @@ def parse_all_pages(base_url):
|
||||
else:
|
||||
empty_page_attempts = 0 # Обнуляем счётчик, если нашли данные
|
||||
all_domains.update(result) # Добавляем новые домены в множество
|
||||
print(f"Разбор {url} завершен.")
|
||||
print(f"Разбор страницы {page} завершен.")
|
||||
|
||||
# Добавляем данные страницы в список для сравнения
|
||||
recent_pages_data.append(result)
|
||||
@@ -82,17 +80,12 @@ def parse_all_pages(base_url):
|
||||
print(f"Данные на последних трёх страницах одинаковы. Остановка парсинга.")
|
||||
keep_parsing = False
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"Ошибка парсинга {url}: {e}")
|
||||
raise e
|
||||
except requests.exceptions.HTTPError as e:
|
||||
if '429' in str(e):
|
||||
print("Ошибка 429. Пауза 4 секунды.")
|
||||
time.sleep(3) # Пауза 3 секунды при ошибке 429
|
||||
else:
|
||||
raise e # Пробрасываем другие ошибки, если они не 429
|
||||
|
||||
page += 3 # Переход к следующему набору страниц
|
||||
except Exception as e:
|
||||
print(f"Ошибка парсинга страницы {page}: {e}")
|
||||
raise e
|
||||
|
||||
page += 1 # Переход к следующей странице
|
||||
|
||||
return all_domains
|
||||
|
||||
|
||||
Reference in New Issue
Block a user