Обход капчи при парсинге в PHP
Итак, теперь вы знаете как устроена капча. Давайте теперь о том, как ее обойти. Для этого нужно сделать несколько запросов с помощью CURL.
Первый запрос должен слаться на файл с капчей. Куда его слать — видно в HTML коде формы или же можно отследить в отладчике, куда отправляются запросы.
Результатом данной операции будет картинка. Ее можно сохранить в файл с помощью file_put_contents . После этого капчу можно разобрать ее каким-либо образом (для начала вручную).
Запрос на капчу обязательно следует слать через CURL, а не file_get_contents , так как нам обязательно следует принимать и оправлять куки, ведь капча работает на сессиях PHP.
Итак, получаем капчу, сохраняем его в файл, разбираем эту капчу вручную и шлем второй запрос уже на страницу с формой вместе с POST данными для формы (и с разобранной капчей).
Не ошибитесь и не сделайте лишнего запроса к капче!
Как обойти капчу при парсинге сайтов?
Главная > Блог > Business > Как обойти капчу при парсинге сайтов?
Автор: parser
Для защиты от извлечения данных и «подозрительных действий», владельцы сайтов могут устанавливать проверку на «реального пользователя» в виде графической загадки, усложняющей парсинг. Поэтому эксперты проекта «СПАРСИМ» решили рассказать про обход капчи «Я не робот», поделившись важной, полезной и актуальной информацией со всеми читателями нашего блога!

Что такое капча и для чего ее вводить?
CAPTCHA – защитный код, устанавливающийся на страницах во избежание «проникновения» автоматических программ (т.н. «ботов», коими и являются парсеры) на сайт. Изначально, она представляла собой изображение с буквами и цифрами, сгенерированными случайным образом. Настоящий пользователь сможет написать их без особых проблем, в то время как роботы, не способные сканировать графические файлы, не смогут попасть туда, куда нужно.
При обнаружении действий, подпадающих под категорию «подозрительных», система защиты оповещает владельца сайта об этом и он может принять решение – пропустить или заблокировать попытку перехода. В основном, капчи устанавливают на страницах регистрации, в формах заказа, комментирования или отзывов, во избежание несанкционированной накрутки. Тем не менее, этот инструмент зарекомендовал себя как один из самых надежных способов защиты от DDoS-атак.
Какие существуют способы обойти Гугл капчу при парсинге сайтов?
Решать капчу каждый раз при сканировании страниц можно. Но это увеличивает время, необходимое для извлечения нужной информации. При этом стоит отметить, что далеко не все сервисы умеют «обходить» такую защиту. Поэтому «народные умельцы» придумали несколько способов решения проблемы обхода капчи при парсинге.
- Использование реального IP-адреса;
- Аренда выделенного прокси-сервера;
- Маршрутизация запросов через разные географические точки;
- Bypass или Death by CAPTCHA через API сервисов;
- С помощью программ для обхода и расширений для браузеров.
При этом стоит отметить, что во избежание появления reCaptcha достаточно соблюдать простейшее правило: бот должен вести себя как человек. Для этого при настройке нужно указать правильный временной промежуток между сканированием страниц, а также парсить сайты не слишком часто, извлекая только нужную информацию в небольших объемах.
Как обойти капчу на Python?
Делаю парсер для одного сайта. При долгом парсинге, сайт выдает капчу.
Сначала я сделал так: добавил подмену User-Agent и IP (proxy) каждый раз, когда программа делает запрос на сайт. Но это не помогло.
Потом так: когда сайт дает на прохождение капчу, тогда остановить парсинг на 1 час и потом продолжить дальше. Это тоже не сработало.
Тогда я принял такое решение: открывать браузер со страницей где выскакивает капча с помощью Selenium, я буду сам проходить капчу, после этого программа останавливается на 10 минут, и продолжать работу дальше. Но и это не помогло.
Как можно обойти капчу, не используя сервисы по типу Антикапча, где нужно платить за каждую пройденную кем-то капчу?
Если что, для парсинга использую requests и beautifulsoup (ну, классика).
- Вопрос задан более трёх лет назад
- 13184 просмотра
Комментировать
Решения вопроса 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, и можно сказать что я обошел капчу, так как она больше в процессе парсинга у меня не выскакивала.
Можете попробовать все описанные выше способы, может что и поможет. С каждым сайтом нужно извращаться по своему)
Как обходить капчу при парсинге или не допустить ее появления?
Начал активно изучать парсинг. Очень интересны все способы обхода каптч на сайте. Слышал если сервисы которые дат эти капчи людям, на них 1000 капч стоят приемлемые 0.6$, но как их например интегрировать в код. Буду очень рад каждому комментарию. Парсинг очень понравился. Сайты паршу только для себя. Нравится разбираться со способами обхода защиты. Помогите кто чем сможет)))
- Вопрос задан более двух лет назад
- 292 просмотра
Комментировать
Решения вопроса 1

soremix @SoreMix Куратор тега Python
как их например интегрировать в код
Регистрируетесь в понравившемся сервисе, сервис предоставляет свой API для работы, возможно сразу и готовая библиотека имеется. Читаете документацию, смотрите примеры. В основном работа выглядит так — отправляете запрос на нужный вам сайт, 0.6$ звучит дёшево для гугла, так что предположим что это обычная картинка, так что в данном случае парсите ссылку на картинку капчи. В соответствии с документацией составляете запрос на сервер решения капчи, в тело запроса уже будет входить ссылка на картинку (либо sitekey, в случае гугла, либо любые другие данные для конкретной капчи), указываете тип капчи, использование прокси и тд. Отправляете запрос на сервис, он вернёт какой нибудь номер задачи. Далее уже отправляете запрос на эндпоинт с результатами решения и передаёте на него номер задачи. Там уже сервис вернёт какой-то статус, и если решение готово — пришлёт ответ. Далее этот ответ уже просто нужно будет вложить в нужное место ваших запросов на сайт. В общем, сферический сервис по решению капчи так и работает.
Лучше зарегистрироваться на сервисе и посмотреть API доку, все станет понятно
Ответ написан более двух лет назад
Нравится 2 3 комментария