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

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

Сборщик на bash для простых задач: где предел

15 ответов · 2 165 просмотров
знак участника regionfix
regionfixНовичок
  • сообщений 525
  • на форуме 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)

Есть у кого рабочая схема?

знак участника Ханин П.
Ханин П.Знаток
  • сообщений 2 280
  • на форуме 2 мес
regionfix писал: Сборщик на bash для простых задач: где предел

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

знак участника Пётр Улесов
Пётр УлесовУчастник
  • сообщений 625
  • на форуме 11 мес

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

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

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

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)
знак участника Богдан Ярош
Богдан ЯрошУчастник
  • сообщений 990
  • на форуме 7 мес

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

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

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

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

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

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

знак участника Ильдар М.
Ильдар М.Участник
  • сообщений 1 010
  • на форуме 7 мес
regionfix писал: Сборщик на bash для простых задач: где предел

Уберите лишние потоки, толку от них нет.

знак участника Ковтун
КовтунНовичок
  • сообщений 468
  • на форуме 11 мес

Это верно для одной площадки и неверно для другой.

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

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

знак участника Ефремова Н.
Ефремова Н.Участник
  • сообщений 1 465
  • на форуме 5 мес

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

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

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

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

Плюсую, сам пришёл к тому же через полгода проб.

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

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

Если поможет, напишите здесь же, пригодится следующим.

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

Это началось после какого-то изменения?

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

знак участника Емельян Ц.
Емельян Ц.Знаток
  • сообщений 2 130
  • на форуме 3 мес

Сначала делал так же, потом переделал всё.

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

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

знак участника obhod_night
obhod_nightУчастник
  • сообщений 1 495
  • на форуме 5 мес
regionfix писал: Сборщик на bash для простых задач: где предел

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

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

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)
знак участника Артём Гринь
Артём ГриньУчастник
  • сообщений 1 284
  • на форуме 4 мес

Что показывает простой запрос из консоли?

знак участника Полина Ржевская
Полина РжевскаяУчастник
  • сообщений 715
  • на форуме 10 мес

Плюсую, сам пришёл к тому же через полгода проб.

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

знак участника thread_limit
thread_limitЗнаток
  • сообщений 2 620
  • на форуме 2 мес
regionfix писал: Сборщик на bash для простых задач: где предел

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

Какая версия программы стоит?

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

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

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