Разделы · Код и программные интерфейсы
Есть рабочее решение, но оно мне не нравится.
Чтобы вопрос был предметным, вот цифры.
Логи пишу в файл, разбираю потом отдельно. Список адресов читаю из файла и раздаю по кругу. Состояние прогона храню в файле, чтобы продолжать после обрыва.
Готов сам проверить, скажите только что.
Совет по выбору: просите подсети из разных диапазонов. Сотня подряд толку не даст. У приватные серверные прокси это в порядке вещей, поэтому и остался.
Смотрите разброс подсетей.
Какие паузы между запросами?
Какая версия программы и что с настройками по умолчанию?
Всё правильно расписано, повторю своими словами.
Логируйте код ответа, время и адрес. Три поля, и почти любой разбор потом занимает минуты.
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)У меня это вскрылось только на сверке данных.
Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.
Первый раз списал на случайность, второй раз уже нет.
Логируйте код ответа, время и адрес. Три поля, и почти любой разбор потом занимает минуты.
Таймаут ставьте всегда и на соединение, и на чтение. Без него один зависший запрос держит поток часами.
Набор новых участников сейчас приостановлен. Читать форум можно без учётной записи, все темы открыты.
Когда набор откроют, объявление появится в разделе с короткими вопросами.
Форма работает в браузере и никуда ничего не отправляет.