@swynha

Как спарсить сайт?

Необходимо спарсить задания с сайта znanija.com
На каждое задание ведет ссылка вида https://znanija.com/task/{номер_задания}. Я делаю гет запросы с каждым разом увеличивая номер задания, т.е:
for (i in range(2, max_i)): #начинаю с 2 т.к. первое задание на сайте имеет такой номер
    r = requests.get(f"https://znanija.com/task/{i}", headers={"user-agent":"..."})
    #...

На первые n запросов сервер отвечает так, как это задумано (n от 20 до 50). Однако после n запросов сервер, судя по всему, банит меня по ип и начинает возвращать в ответе текст "Please enable JS and disable any ad blocker", а при входе на сайт из браузера просит ввести капчу. Вопрос: как обойти ограничение?
Пробовал:
1. Использовать разные прокси и юзер-агенты (большинство прокси не сработали, а те, что сработали, имели слишком большой таймаут и, что хуже, не воспринимались сервером адекватно, т.к. он [сервер], предположительно, принимает запросы только из снг)
2. селениум (открывалось окно браузера, где просили пройти капчу, однако после этого оно моментально закрывалось и приложение останавливало свою работу даже не выкинув исключение; + данный вариант, даже будучи рабочим, не рационален, т.к. необходимо сделать (в идеале) несколько миллионов запросов)
3. делать таймауты по t секунд между кажыми x запросами (пробовал разные t и х, все равно банило спустя время)
Все вышеперечисленное не помогло;
Заранее извиняюсь, если вопрос как-то гуглится: искал решение несколько дней, но проблема все еще в силе.
Заранее благодарен.
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 1
@antares4045
Большинство бесплатных прокси имеют гигантское количество проблем, особенно в сфере анонимизации: большинство пользователей пытается скрыть от своего провайдера, куда они идут, а не от целевого сервера свою личность.
К тому же по таймауту может отвалиться исходящий запрос, но серверу плевать: он получил запрос и мгновенно выдал ответ -- проблема с выставленным вами таймаутом.
Лично я сталкиваясь с анологичными задачами ставил конские задержки (до минуты) и получив временный бан замолкал на три-четыре часа (требует запастись некоторым количеством терпения, но является самым простым решением проблемы).

С высокой степенью вероятности наличие случайных задержек и опрос списка не по порядку замедляет обнаружение бота-скарпера. но эту гипотезу стоит проверять отдельно.

Можно также попытаться притвориться гуловским сканирующим ботом (но это в формате идеи).

А бесплатные анонимизирующие https прокси сервера которые работают а не редиректят тебя на страницу с приглашением купить подписку вообще сродни единорогам по редкости.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы