Решения для заданий 1 и 2 находятся в файлах task_1 и task_2 подкаталога src/app соответственно.
Данные сохраняются в JSON-файлы и БД (PostgreSQL). Формат сохраненных данных в БД немного отличается, так как во втором задании используются списки внутри словаря. Поэтому в БД вместо списка идет строка - перечисление элементов списка через ";".
Полученные JSON-файлы можно посмотреть в директории output.
Для корректного выполнения задания №2 необходимо использовать актуальный Bearer токен. Для этого
- Зайдите на сайт
https://www.perekrestok.ru; - Откройте инструменты разработчика;
- Перейдите на вкладку Nerwork;
- Там откройте заголовки (Headers) любого запроса;
- Необходимо найти заголовок
auth; - Вставьте значение этого заголовка в
self.headers["auth"]классаPerecrestokParserв файлеsrc/app/parsers/perecrestok_parser.py.
Для запуска приложения можно использовать Docker.
- В терминале пропишите
docker-compose up --build -d - Накатите миграции
docker exec parsing_app alembic upgrade head - Запустите приложение
docker exec parsing_app python -m app.task_1docker exec parsing_app python -m app.task_2
- На сайте детского мира за время выполнения тестового задания один раз немного поменялась верстка (изменились названия классов), так что есть вероятность, что придется подправить их названия в случае чего;
- В задании 1 в баннере 5 (рекламный блок в header страницы) непонятно где было брать мета информацию, изображения были взяты из style. И этот элемент всего 1, а не 8 как показано в примере. Но внутри такого элемента находятся 2 div, из их styles и были взяты изображения. Поэтому сущность одна, но собирается как две с разными картинками, но одним content_url.
Задание 1 выдает ошибку (selenium.common.exceptions.TimeoutException) при выполнении решения в headless режиме, с соответствующими опциями. Не видит искомых элементов. Соответственно, в Docker такая же ситуация.
В обычном режиме работает исправно.