а стопе, а ты еще весь такой асинхронный код в стейт записываешь который на json'е?
progress['category'] = batch[-1]Читать полностью…
state['last_processed_category'] = batch[-1]
state['last_processed_page'] = 1
progress['page'] = 1
progress['product_index'] = 0
save_progress(progress['category'], progress['page'], progress['product_index'])
save_current_state(state)
У меня такоее было, когда в html страницы наспамили до миллиона ссылок (это не шутка). На заброшенных форумах без регистрации это норма.
Читать полностью…У меня есть функция основная scrape_products:
- Инициализирует основные параметры (URL, счетчики, ограничитель запросов).
- Загружает предыдущее состояние и прогресс.
- Обрабатывает категории пакетами (по 20 штук).
- Для каждой категории в пакете создает асинхронную задачу scrape_category.
- Ожидает завершения всех задач в пакете.
- Обновляет общий счетчик товаров и сохраняет прогресс.
Функция scrape_category:
- Получает HTML-контент страницы категории.
- Извлекает иерархию категории.
- Вызывает parse_category_page для обработки товаров на странице.
- Сохраняет полученные продукты в JSON-файл.
- Обновляет прогресс и состояние после обработки категории.
Функция parse_category_page:
- Находит все блоки товаров на странице.
- Создает асинхронные задачи parse_product для каждого товара.
- Возвращает список успешно обработанных товаров.
Функция parse_product:
- Извлекает основную информацию о товаре (имя, изображение).
- Парсит характеристики товара.
- Обрабатывает информацию о ценах, если она доступна.
- При наличии цен вызывает parse_seller_page для получения дополнительной информации.
та там уже и спрашивать не надою На такой скости только последовательное выкачивание страничек. Ну и, сверху, заполировано (подозреваю) не особо хорошей обработкой
Читать полностью…помню как-то писал я скрапи-парсер, тока там еще была логика сохранения картинок (смерживания штук 20 в одну), и он прям мощно тормозил пока я не сделал её асинхронной, а потом и ваще неблокирующей. Но и так значительный прирост был с того, что как оказалось он по одной картинке тянул последовательно и тупо то, что 20 картинок одновременно тянулись увеличило выхлоп неиллюзорно. Так что при желании и на скрапи можно приготовить ололо
Читать полностью…да я читаю там еще до четверти кода не дошел)) ага - limiter там аля лимитер, при этом стейт походу загружается 1 раз на старте, при условии что ретраев немного на запрос (немного же, да?). читаю дальше
Читать полностью…вдруг у тебя там async def, а внутри все await await await на каждой строчке, эт тогда не факт что будет асинхронный код)))
Читать полностью…ну или как-минимум, что ты подразумеваешь под асинхронной задачей? скачивание в асинхронном пуле html-страничек (что обычно самое долгое в коде) или что?
Читать полностью…короче, чем долго играть в испорченный телефон, просто покажи код, на pastebin закинь, можешь "сикретные куски" поудалять, да и вообще оставить тока остовы функций
Читать полностью…это максимально неэффективно, а сколько раз ты к нему обращался примерно за парсинг? и что ты там хранил? вообще, что ты имеешь в виду под состоянием?
Читать полностью…а так поначалу надо было выкачать картинку, и впендюрить на нее артикул, с цветом надписи противоположной картинке)
Читать полностью…а потом их стало больше, а потом еще больше. и чота усе резко замедлилося... а я такой - а чо, а в смысле??
Читать полностью…поэтому я вот уже набив шишек вижу где у тебя уже возникают приколы при текущем парсере или могут возникнуть, вида "сохранение состояния" (в чем, в базе, clickhouse, pickle?), эта вот "обработка категорий пакетами" - как оно реализовано? foreach по листу или пул какой. И т.д. и т.п.
Читать полностью…