import os
import re
from bs4 import BeautifulSoup
from urllib.parse import urlparse, parse_qs
def extract_real_url(href):
"""Если ссылка — это яндекс-редирект, извлекаем реальный URL."""
# Пример: /url?q=http://arhivach.vc/...&sa=...
if '/url?q=' in href or '/redirect?url=' in href:
parsed = urlparse(href)
query = parse_qs(parsed.query)
# Яндекс может использовать параметры 'q' или 'url'
real_url = query.get('q', query.get('url', [None]))[0]
if real_url:
return real_url
return href
def is_arhivach_link(url):
"""Проверяет, ведёт ли ссылка на домен arhivach.vc."""
if not url:
return False
# Очищаем от возможных якорей и параметров
parsed = urlparse(url)
domain = parsed.netloc.lower()
# Проверяем, что домен заканчивается на arhivach.vc (или равен ему)
return domain.endswith('arhivach.vc')
def extract_links_from_html(html_content):
soup = BeautifulSoup(html_content, 'html.parser')
found_links = set()
for a in soup.find_all('a', href=True):
href = a['href']
# Полный URL может быть относительным, но в Яндексе они обычно абсолютные
real_href = extract_real_url(href)
if is_arhivach_link(real_href):
found_links.add(real_href)
return found_links
def main():
input_folder = '.' # текущая папка
output_file = 'arhivach_links.txt'
all_links = set()
# Ищем все HTML-файлы (можно расширить список расширений)
html_files = [f for f in os.listdir(input_folder) if f.endswith(('.html', '.htm'))]
if not html_files:
print('Не найдено HTML-файлов в текущей папке.')
return
for filename in html_files:
print(f'Обработка {filename}...')
with open(os.path.join(input_folder, filename), 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
links = extract_links_from_html(content)
all_links.update(links)
print(f' Найдено {len(links)} ссылок на arhivach.vc')
# Сохраняем результат
with open(output_file, 'w', encoding='utf-8') as f:
for link in sorted(all_links):
f.write(link + '\n')
print(f'\nГотово! Всего уникальных ссылок: {len(all_links)}')
print(f'Список сохранён в {output_file}')
if __name__ == '__main__':
main()