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

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

curl proxy environment variables в скриптах на сервере

7 ответов · 3 536 просмотров
знак участника Ефим Гладков
Ефим ГладковУчастник
  • сообщений 850
  • на форуме 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)
curl proxy environment variables в скриптах на сервере: разбор в цифрах
curl proxy environment variables в скриптах на сервере: как это выглядит у меня

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

знак участника Ростислав Е.
Ростислав Е.Участник
  • сообщений 965
  • на форуме 7 мес
Ефим Гладков писал: curl proxy environment variables в скриптах …

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

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

Мы упирались в то же, пока не поменяли подход.

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

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)
знак участника Виктор Лаптев
Виктор ЛаптевНовичок
  • сообщений 230
  • на форуме 1 года
Ефим Гладков писал: curl proxy environment variables в скриптах …

Тут не всё так однозначно, смотря какой объём.

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

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

знак участника nochnoy_progon
nochnoy_progonЗнаток
  • сообщений 1 540
  • на форуме 5 мес

Согласен целиком, добавлю только цифру.

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

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

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)
знак участника pool_manager
pool_managerЗнаток
  • сообщений 1 580
  • на форуме 5 мес

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

Сессия должна создаваться один раз и жить весь прогон. Новая сессия на каждый запрос съедает время на установку соединения и путает настройки.

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

знак участника Маргарита Ю.
Маргарита Ю.Участник
  • сообщений 640
  • на форуме 11 мес

Пришёл к этому не сразу, сначала сделал ошибку.

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

Не держите весь список в памяти на больших объёмах. Читайте потоком, пишите пачками.

Пишите, если понадобится уточнить.

знак участника tempo_ru
tempo_ruЗнаток
  • сообщений 2 470
  • на форуме 3 мес
Ефим Гладков писал: curl proxy environment variables в скриптах …

Разбейте прогон на части, станет ровнее.

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

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

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