```python import time import requests from bs4 import BeautifulSoup from urllib.parse import urljoin # Настройка заголовков, чтобы сайт не блокировал скрипт HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } def get_neocities_sites(pages=1): """Собирает ссылки на сайты из раздела Browse на Neocities.""" site_links = set() for page in range(1, pages + 1): browse_url = f"https://neocities.org/browse?page={page}" print(f"Сканируем каталог: {browse_url}") response = requests.get(browse_url, headers=HEADERS) if response.status_code != 200: continue soup = BeautifulSoup(response.text, 'html.parser') # Находим все ссылки на страницы участников Neocities for a_tag in soup.find_all('a', href=True): href = a_tag['href'] if 'neocities.org' in href and not href.startswith('https://neocities.org'): site_links.add(href) return list(site_links) def crawl_sites(urls): """Обходит каждый собранный сайт и выводит его заголовок.""" for url in urls: try: print(f"\n[+] Переход на: {url}") res = requests.get(url, headers=HEADERS, timeout=5) if res.status_code == 200: soup = BeautifulSoup(res.text, 'html.parser') title = soup.title.string.strip() if soup.title else "Без заголовка" print(f" Заголовок страницы: {title}") else: print(f" Ошибка загрузки (Код: {res.status_code})") except Exception as e: print(f" Не удалось открыть сайт: {e}") # Пауза между запросами (чтобы не нагружать сервера) time.sleep(1) if __name__ == "__main__": # Собираем сайты с 1-й страницы каталога urls_to_visit = get_neocities_sites(pages=1) print(f"Найдено сайтов: {len(urls_to_visit)}") # Начинаем переходить по найденным ссылкам crawl_sites(urls_to_visit) ``` * **`time.sleep(1)`** обязателен, чтобы Neocities не заблокировал IP-адрес за слишком частые запросы. * Если нужно сканировать больше страниц каталога, измените параметр `pages=1` в функции `get_neocities_sites`.