Исправления скрапера ФИПИ
Найденные проблемы
Неверные URL-адреса - скрапер использовал несуществующие адреса:
- ❌
/oge/demo/oge-russian→ 404 - ❌
/ege/demo/ege-russian→ 404 - ✅ Исправлено на:
/ege/otkrytyy-bank-zadaniy-ege,/oge/otkrytyy-bank-zadaniy-oge
- ❌
SSL ошибки для поддоменов -
ege.fipi.ruиoge.fipi.ruтребовали отключения проверки SSLПарсинг заголовков - заголовки не извлекались из-за неправильного селектора
Внесенные исправления
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())