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

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

Работа с API площадки против сбора со страниц

12 ответов · 2 499 просмотров
знак участника Симаков
СимаковУчастник
  • сообщений 780
  • на форуме 9 мес
Код и программные интерфейсы

Переписываю старый скрипт и хочу сделать правильно.

Повторы стоят три раза с паузой, которая растёт вдвое. Логирую код ответа, время и адрес, по которому шёл запрос. Результаты пишу пачками по тысяче строк.

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)

Кто как это обходит?

знак участника Артур Хаким
Артур ХакимНовичок
  • сообщений 455
  • на форуме 1 года
полезный ответ
Симаков писал: Работа с API площадки против сбора со страниц

Начните с малого объёма и растите постепенно.

знак участника crawlbox
crawlboxЗнаток
  • сообщений 1 860
  • на форуме 4 мес

Ставьте паузу с разбросом, не ровную.

знак участника seo_kotel
seo_kotelЗнаток
  • сообщений 2 890
  • на форуме 2 мес
полезный ответ

Пул под такие объёмы держу постоянный. Беру серверные прокси с целыми подсетями, потому что там разброс по подсетям нормальный, а это на съёме важнее скорости.

Проверьте на второй машине, это отсекает половину версий.

знак участника Лидия В.
Лидия В.Новичок
  • сообщений 190
  • на форуме 1 года

Сохраняйте сырое, пересчитать успеете.

знак участника Верещак
ВерещакУчастник
  • сообщений 690
  • на форуме 10 мес
Симаков писал: Работа с API площадки против сбора со страниц

Мы решили это переносом прогона на другое время.

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

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

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)

Слежу за темой.

знак участника batch_run
batch_runЗнаток
  • сообщений 1 790
  • на форуме 4 мес

Схема рабочая, но у неё есть предел.

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

Сохранил, пригодится в следующем проекте.

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

Был похожий случай, разбирали неделю.

Таймаут ставьте всегда и на соединение, и на чтение. Без него один зависший запрос держит поток часами.

Если найдёте причину, поделитесь.

знак участника rankdesk
rankdeskЗнаток
  • сообщений 2 044
  • на форуме 7 мес
Симаков писал: Работа с API площадки против сбора со страниц

Это на всех площадках или на одной?

знак участника podset
podsetВетеран
  • сообщений 3 480
  • на форуме 1 мес

Разбейте задачу на части.

знак участника Ефим Гладков
Ефим ГладковУчастник
  • сообщений 850
  • на форуме 9 мес

Осторожнее с обобщением, случаи бывают разные.

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

Отпишитесь, что получилось.

знак участника Мельник И.
Мельник И.Знаток
  • сообщений 1 655
  • на форуме 3 мес

Осторожнее с обобщением, случаи бывают разные.

Планировщик системы проще своей очереди, пока задач мало. После полусотни задач своя очередь окупается.

знак участника logi_i_grafiki
logi_i_grafikiУчастник
  • сообщений 895
  • на форуме 9 мес

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

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

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

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