Загрузка данных


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()