1045
Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs
что было бы проще - прилепить туда какие-то декораторы таймера как на запрос так и на отдельные функции или сделать асинхронный coverage, я даже хз проподобные средства
Читать полностью…
короче я своим слепым глазом особых прям криминальностей не вижу (тут в панамку щас напихают эксперты еще), возможно какая-то логика немного не та, типа вызываются лишние запросы например там, где их можно получить с одной страницы а заходится при этом в каждый товар внутрь - надо проверять точно ли обязательно внутрь заходить может данные уже есть на той странице которая выше по уровню
Читать полностью…
а вот эти паузы они же получается не блокирующие? await asyncio.sleep(random.uniform(0.5, 1.5))
Читать полностью…
а async with limiter: значит что залетает в него под 100 задачек за 1 секунду и оно как-бы пытается их удержать? а лимитеру пофиг что в него пихать, в него можно разного рода задачи запихивать?
ну хотя, если там не 10 тыщ записей оно не должно бы обтормаживать
Читать полностью…
да я читаю там еще до четверти кода не дошел)) ага - limiter там аля лимитер, при этом стейт походу загружается 1 раз на старте, при условии что ретраев немного на запрос (немного же, да?). читаю дальше
Читать полностью…
вдруг у тебя там async def, а внутри все await await await на каждой строчке, эт тогда не факт что будет асинхронный код)))
Читать полностью…
ну или как-минимум, что ты подразумеваешь под асинхронной задачей? скачивание в асинхронном пуле html-страничек (что обычно самое долгое в коде) или что?
Читать полностью…
короче, чем долго играть в испорченный телефон, просто покажи код, на pastebin закинь, можешь "сикретные куски" поудалять, да и вообще оставить тока остовы функций
Читать полностью…
а почему это важно? у вас парсинг дольше чем собственно скачивание?
Читать полностью…
это максимально неэффективно, а сколько раз ты к нему обращался примерно за парсинг? и что ты там хранил? вообще, что ты имеешь в виду под состоянием?
Читать полностью…
если бы код был аля-улю синхронный я б рекомендовал run with coverage, но про асинхронный хз - вангую там черт ногу сломит где задержка происходит
Читать полностью…
я бы еще посмотрел сколько в среднем времени уходит на каждый отдельный запрос (а еще лучше время каждого запроса на графике отобразить, чтобы не было температуры по-больнице), типа вот латенси там и задержки все эти. может там наоборот, 100 запросов на этот сервак дохера и он тебе латенси по 60 секунд на запрос выдает (в отместку, бугага)
Читать полностью…
(для других параллельных обработок, пробегающих рядом в этом limiter'e)
Читать полностью…
Да, лимитеру ему все равно, какие задачи в него попадают. Он просто считает количество выполненных операций и контролирует их частоту.
Читать полностью…
а стопе, а ты еще весь такой асинхронный код в стейт записываешь который на 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 штук и для каждой создаем отдельную асинхронную задачу
Читать полностью…