позиции · сбор данных · отчёты
реклама IPrazon Network: приватные прокси IPv4 и SOCKS5, пул 12 000 адресов, безлимитный трафик, бесплатный тест до 2 часов

Разделы · Код и программные интерфейсы

Логирование прогона: что писать, чтобы потом разобраться

15 ответов · 2 414 просмотров
знак участника Панкратов
ПанкратовУчастник
  • сообщений 745
  • на форуме 10 мес
Код и программные интерфейсы

Спрошу до того, как напишу лишнего.

Задач в очереди около двух тысяч на прогон. Состояние прогона храню в файле, чтобы продолжать после обрыва. Питон, асинхронный сбор, одновременно держу около двухсот задач.

Подскажите, где я ошибаюсь.

знак участника Костин
КостинНовичок
  • сообщений 540
  • на форуме 1 года
полезный ответ
Панкратов писал: Логирование прогона: что писать, чтобы потом…

Дополню, потому что важная деталь потерялась.

Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.

знак участника Алина Прошина
Алина ПрошинаНовичок
  • сообщений 140
  • на форуме 1 года

Проверял ровно это, картина совпала.

Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.

Состояние прогона храните построчно. Один кусок в конце вас не спасёт. Тогда обрыв на девяностом проценте не стоит вам всего прогона.

знак участника Симаков
СимаковУчастник
  • сообщений 780
  • на форуме 9 мес
Панкратов писал: Логирование прогона: что писать, чтобы потом…

Есть возможность повторить прогон и сравнить?

знак участника Саша Верхов
Саша ВерховНовичок
  • сообщений 152
  • на форуме 1 года

Сначала логи, потом версии.

знак участника Тимофей Бек
Тимофей БекУчастник
  • сообщений 610
  • на форуме 11 мес

Расскажу, как выкручивались мы.

Пул адресов выносите в отдельную часть кода. Тогда смена поставщика занимает минуту.

Структуру ответа проверяйте на каждом разборе. Площадки меняют её без предупреждения, и молчаливая потеря полей самая опасная.

знак участника Тереза К.
Тереза К.Ветеран
  • сообщений 3 907
  • на форуме 1 мес

Проверял на четырёх проектах, вывод один.

Считайте статистику прямо во время прогона. Узнать о провале в конце восьмичасового прогона обидно.

Логируйте код ответа, время и адрес. Три поля, и почти любой разбор потом занимает минуты.

знак участника Тучков
ТучковНовичок
  • сообщений 430
  • на форуме 1 года

Могу подтвердить, у нас на двух проектах точно так.

Тестируйте сборщик на сохранённых страницах. Гонять живую площадку ради отладки расточительно.

async with aiohttp.ClientSession() as s:
    for i in range(3):
        try:
            r = await s.get(url, proxy=adres, timeout=30)
            break
        except Exception:
            await asyncio.sleep(2 ** i)
знак участника Захаров Л.
Захаров Л.Участник
  • сообщений 1 310
  • на форуме 8 мес

Так и работает, проверено не один раз.

Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.

знак участника Эдуард Мель
Эдуард МельУчастник
  • сообщений 730
  • на форуме 10 мес
Панкратов писал: Логирование прогона: что писать, чтобы потом…

Так и есть, проходил через это в прошлом году.

Проверку ответа делайте до разбора: пустое или короткое лучше отбросить сразу.

знак участника Гаврилин
ГаврилинУчастник
  • сообщений 1 330
  • на форуме 8 мес
Панкратов писал: Логирование прогона: что писать, чтобы потом…

У нас на прошлом проекте это выглядело так.

Cookie при массовом сборе лучше сбрасывать. Накопленное состояние делает поведение непредсказуемым.

знак участника Вадим Кучер
Вадим КучерНовичок
  • сообщений 165
  • на форуме 1 года
Панкратов писал: Логирование прогона: что писать, чтобы потом…

Замерьте и сравните, догадки тут не помогут.

знак участника Нина Караваева
Нина КараваеваУчастник
  • сообщений 1 025
  • на форуме 7 мес

Так же считаю, и коллеги считают так же.

Пул адресов выносите в отдельную часть кода. Тогда смена поставщика занимает минуту.

async with aiohttp.ClientSession() as s:
    for i in range(3):
        try:
            r = await s.get(url, proxy=adres, timeout=30)
            break
        except Exception:
            await asyncio.sleep(2 ** i)

Тема на будущее пригодится многим.

знак участника Ирина Долева
Ирина ДолеваНовичок
  • сообщений 588
  • на форуме 11 мес

Так и есть, проходил через это в прошлом году.

Структуру ответа проверяйте на каждом разборе. Площадки меняют её без предупреждения, и молчаливая потеря полей самая опасная.

Разбор годный, спорить не буду.

знак участника Айгуль Р.
Айгуль Р.Новичок
  • сообщений 440
  • на форуме 1 года

Держите запас, впритык не работает.

знак участника Дарья Смолина
Дарья СмолинаУчастник
  • сообщений 820
  • на форуме 9 мес

На другой машине воспроизводится?

Настройка применилась вообще?

Ответить в темеПодписаться

Рядом в разделе

Сеометр, форум специалистов по поиску и аналитике ПравилаУчастникиО форумеЛента 2026