Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумРазбор ошибок

403 приходит ровно на половине прогона

scrapy_boy
scrapy_boy
Участник
сообщений 530
с окт
15 марта, 14:02первое сообщение

Прогон на двенадцать тысяч карточек. Первые примерно шесть тысяч собираются нормально, дальше сплошной 403 до самого конца, ни одной удачной страницы.

Что смущает: обрыв всегда около середины, хотя список перемешиваю перед каждым запуском. Значит дело не в конкретных страницах. Перезапускаю с нуля, снова шесть тысяч хороших и снова стена.

[14:02:11] 200 /catalog/8811
[14:02:11] 200 /catalog/2049
[14:02:12] 403 /catalog/7730
[14:02:12] 403 /catalog/1188
Максим Юрьев
Максим Юрьев
Знаток
сообщений 1720
с апр
22 августа, 17:19#2

Раз список перемешан, а точка обрыва держится, дело уже не в страницах. Ищите счётчик: что-то на стороне площадки досчитало до порога.

Два вопроса, без них гадание. Первый: 403 приходит с телом? Сохраните его целиком, там обычно лежит либо страница проверки, либо человеческий текст с причиной. Второй: обрыв привязан к числу запросов или ко времени? Шесть тысяч страниц вы собираете за сколько, за час, за двадцать минут?

И заведите в логе три поля рядом: код ответа, время с точностью до секунды и адрес, с которого ушёл запрос. Без третьего поля разбор дальше не поедет.

scrapy_boy
scrapy_boy
Участник
сообщений 530
с окт
1 января, 08:36#3

Тело сохранил, там страница с проверкой браузера. Шесть тысяч уходят примерно за 25 минут.

Лена Соболева
Лена Соболева
Участник
сообщений 385
с дек
8 июня, 11:53#4

Тогда картина складывается. Проверка появляется по счётчику сессии, время тут ни при чём: у вас одна сессия на весь прогон, cookie получена на старте и дальше живёт до упора. Площадка досчитала обращения по этой сессии до своего порога и переключила её на проверку. Дальше уже неважно, какие страницы вы просите, отвечать вам будут одним и тем же.

Что делать по шагам. Прогон разбить на пачки, скажем по полторы тысячи страниц. Между пачками полностью сбрасывать хранилище cookie и брать следующий адрес из выдачи. Держать пару жёстко: одна сессия живёт на одном адресе и умирает вместе с ним. Если cookie переезжает на другой адрес, площадка видит скачок и порог срабатывает раньше обычного.

И темп внутри пачки лучше сделать неровным, с паузой в разбросе. Ровный пулемётный ритм досчитывает счётчик быстрее всего.

anton_zzz
anton_zzz
Новичок
сообщений 96
с июн, второй сезон
15 ноября, 14:10#5

а если cookie вообще не хранить? каждый запрос сам по себе

iron_shell
iron_shell
Знаток
сообщений 1050
с июн
22 апреля, 17:27#6

Выйдет хуже. Без cookie каждая страница выглядит первым визитом, а нормальный посетитель так не ходит: он получает набор при входе и носит его дальше. Площадки на такое реагируют раньше, чем на любой счётчик.

Заодно посмотрите заголовки. Частая картина: у запроса есть свежий User-Agent, но нет Accept-Language, нет Referer при переходе внутрь каталога, а порядок заголовков сортирован по алфавиту, чего браузер не делает никогда. По отдельности мелочи, вместе складываются в подпись.

Максим Юрьев
Максим Юрьев
Знаток
сообщений 1720
с апр
1 сентября, 08:44#7
Лена Соболева: одна сессия живёт на одном адресе и умирает вместе с ним

Это главное во всей теме. Половина случаев с внезапным 403 лечится ровно этим, и никакая подкрутка заголовков без этого не помогает.

scrapy_boy
scrapy_boy
Участник
сообщений 530
с окт
8 февраля, 11:01#8

Переделал: пачки по тысяче двести, между пачками сброс cookie и следующий адрес из выдачи, пауза 200-800 мс с разбросом. Прогон дошёл до конца, 403 всего одиннадцать штук на двенадцать тысяч, все на повторе взялись.

Спасибо. Отдельно за совет писать адрес в лог: без него я бы ещё неделю смотрел на коды и ничего не понял.