scraper / FIXES.md
greeta's picture
Upload FIXES.md
c1c24d2 verified

Исправления скрапера ФИПИ

Найденные проблемы

  1. Неверные URL-адреса - скрапер использовал несуществующие адреса:

    • /oge/demo/oge-russian → 404
    • /ege/demo/ege-russian → 404
    • ✅ Исправлено на: /ege/otkrytyy-bank-zadaniy-ege, /oge/otkrytyy-bank-zadaniy-oge
  2. SSL ошибки для поддоменов - ege.fipi.ru и oge.fipi.ru требовали отключения проверки SSL

  3. Парсинг заголовков - заголовки не извлекались из-за неправильного селектора

Внесенные исправления

1. Обновлены URL-адреса в scrape_tasks()

urls_to_scrape = [
    "https://fipi.ru/ege/otkrytyy-bank-zadaniy-ege",
    "https://fipi.ru/oge/otkrytyy-bank-zadaniy-oge",
]

2. Отключена проверка SSL в fetch_page()

ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE

3. Улучшен парсинг в parse_task_page()

  • Добавлен селектор .content h1 для заголовков
  • Добавлено извлечение из <title> если h1 пустой
  • Добавлено извлечение ссылок на задания
  • Очистка от скриптов, стилей, nav, header, footer

4. Добавлено скачивание вложенных заданий

Теперь скрапер переходит по найденным ссылкам и скачивает дополнительные задания.

Результат

До исправления После исправления
0 заданий 12 заданий
404 ошибки 200 OK
"Без названия" Правильные заголовки

Запуск теста

cd ai-scraper
python test_scraper.py

Использование

from scraper import FIPIScraper
import asyncio

async def main():
    scraper = FIPIScraper()
    tasks = await scraper.scrape_tasks(subject="russian")
    print(f"Найдено заданий: {len(tasks)}")
    for task in tasks:
        print(f"- {task['title']}: {task['source_url']}")

asyncio.run(main())