Добрый день.
Стоит задача спарсить сайт, который защищен cloudflare. Желательно на php.
Первым делом я взял postman и отправил get запрос на получение нужной страницы через него. И получил нужный результат! После чего я попробовал запросить контент через file_get_contents и ожидаемо получил 403 ошибку. Значит cloudflare все таки работает. Тогда я попробовал спарсить через curl с сохранением куков. Через курл результат получился: "Just a moment... Checking if the site connection is secure".
На этом моменте я застрял и пошел гуглить как все это работает. Нагуглил информацию, что cloudflare посылает в браузер js скрипт. Отработал - значит норм, нет - бот. Решил это проверить. Запустил оперу, отключил у нее js и куки и чтобы вы думали? Сайт прекрасно открывается! Пол сайта не работает (т.к. на js) но вся нужная информация отображается, никаким cloudflare не пахнет. Я решил скопировать весь запрос как curl (чтобы и юзерагент там был такой же, и всякие прочие параметры), но у меня результат все тот же: "Just a moment".
Гуглил, что есть системы обхода на питоне, есть хедлесс браузеры. Нагуглил инфу, что мол cloudflare обойти легко, достаточно перехватить математический пример на js, решить его и вернуть. А еще кто-то сказал, что достаточно 5 секунд выждать. В итоге 5 секунд я выжидал благодаря sleep(5) - результата нет, а что за математический пример и где его взять - я не понял.
Так что я уже запутался. Скажите, на php вообще реально написать такой парсер? и если да, то что для этого надо делать? Спасибо.
можно. но придется повозиться. cloudflare будет тригерится на любую как ему кажется подозрительную активность, как то серверный ip, частые обращения и так далее. пробуйте через headless браузеры + php-webdriver/php-webdriver или chrome-php/chrome или еще чего то подобное
правильно же я понимаю, что при работе с хедлесс браузерами необходимо наличие реального? Например, если используем chrome-php/chrome , то необходимо, чтобы на компе был установлен хром, верно? Как быть в случае, если на локальном компе я работаю в докере? Есть какие-то минифицированные версии без gui для alpine?
lolrofl01,
1. headless браузеры это реальный браузер просто без реальной отрисовки на экране.
2. вы можете взять селеноид - все возможные браузеры в докере. Но вообще стоит искать сборку которая прячет информацию о том что браузер запущен в режиме автоматизации, потому что некоторые по ней блочат обращения к сайту - например Imperva Incapsula
Мой способ : понимаем докер из https://github.com/yoori/flare-bypasser , делаем к нему запрос за куками и с этими куками ломимся на целевой сайт - у меня стабильно работает