Amigun
@Amigun
Джун : |

Как обойти капчу на Python?

Делаю парсер для одного сайта. При долгом парсинге, сайт выдает капчу.
Сначала я сделал так: добавил подмену User-Agent и IP (proxy) каждый раз, когда программа делает запрос на сайт. Но это не помогло.
Потом так: когда сайт дает на прохождение капчу, тогда остановить парсинг на 1 час и потом продолжить дальше. Это тоже не сработало.
Тогда я принял такое решение: открывать браузер со страницей где выскакивает капча с помощью Selenium, я буду сам проходить капчу, после этого программа останавливается на 10 минут, и продолжать работу дальше. Но и это не помогло.
Как можно обойти капчу, не используя сервисы по типу Антикапча, где нужно платить за каждую пройденную кем-то капчу?
Если что, для парсинга использую requests и beautifulsoup (ну, классика).
  • Вопрос задан
  • 14404 просмотра
Решения вопроса 2
Amigun
@Amigun Автор вопроса
Джун : |
Если у вас возникла такая-же проблема как у меня, а именно капча при парсинге сайта, то прочитайте как я её решил.

Изначально я использовал библиотеки requests (для отправки запросов к сайту) и bs4 (для самого парсинга).
Сначала я сделал задержку, если программа встречает капчу, то она останавливает свою работу на 1 час, и дальше продолжает работать. Это не сработало, ни через час, ни через два, ни через 3 дня.
Дальше я думал подключить selenium, и когда выходит капча, открывать эту страничку с помощью selenium, там проходить капчу вручную, закрывать selenium, и пробовать через requests еще раз отправлять запросы на страницу. Капча все равно осталась.
Переписать парсер под selenium - без использования requests и bs4, хорошее решение, но не всегда подходит. В моем случае было слишком муторно использовать это, поэтому я обратился сюда.
Тут мне подсказали такой вариант: использовать сессии (requests.Session()) и очищать куки при смене IP (кстати да, я подключал библиотеки для смены IP через proxy, а так же библиотека для генерации fake-User-Agent) и передавать в заголовки параметр referer. Возможно это и работает, но не для меня. Капча все равно осталась.

Ну и вот собственно само решение :)
Я решил заменить библиотеку requests на selenium. Я через него подключался к сайту (у меня даже открывалось окно браузера) и с помощью метода page_source я получал html-код странички. Кстати, будьте внимательными, я так понял что с помощью этого метода можно получить только html, без js и css. Поэтому если сайт использует js для генерации контента, то у вас вряд-ли это получится. А потом, я просто с помощью bs4 парсил полученную html страничку, и извлекал из нее нужные мне данные. Да, капча все равно появлялась, но она появилась лишь однажды, я её вручную решил прямо через окно selenium, и можно сказать что я обошел капчу, так как она больше в процессе парсинга у меня не выскакивала.

Можете попробовать все описанные выше способы, может что и поможет. С каждым сайтом нужно извращаться по своему)
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Какую задержку используете?
По делу:
В заголовках передавайте referrer. Если вы используете requests.session(), тогда сбрасывайте cookies при смене ip.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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