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

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

Node против питона на сборе: замер на одинаковой задаче

5 ответов · 1 947 просмотров
знак участника Ильдар М.
Ильдар М.Участник
  • сообщений 1 010
  • на форуме 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)

Хочется услышать цифры от практиков.

знак участника obhod_night
obhod_nightУчастник
  • сообщений 1 495
  • на форуме 5 мес
полезный ответ
Ильдар М. писал: Node против питона на сборе: замер на одинак…

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

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

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

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 284
  • на форуме 4 мес

Тут ничего нового не скажу, только подтвержу.

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

Разбор ответа держите отдельно от сбора. Тогда смена разметки не требует перегонять данные заново, достаточно перечитать сохранённое.

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)
знак участника Полина Ржевская
Полина РжевскаяУчастник
  • сообщений 715
  • на форуме 10 мес

Сколько адресов и какой темп при этом стоит?

знак участника thread_limit
thread_limitЗнаток
  • сообщений 2 620
  • на форуме 2 мес

Поправлю: дело не в объёме, а в темпе.

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

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

Держите запас, ровно по расчёту работать не выйдет.

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

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

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