Comments 37
Годная статья ?
Спасибо за инфу. Кстати в одном пакете (пик 4) видно что за доска объявлений.
Получилось подменить, но, к сожалению, следующий пакет возвращает ошибку "Получено непредвиденное сообщение или оно имеет неправильный формат".
Чего ж тут удивительного? Вы "поздоровались" списком расширений и шифронаборов от Хрома, тогда как по факту половина из них не поддерживалась клиентом. Вангую, что сервер ответил на приветствие, например, фактически неподдерживаемым шифронабором, а Ваш .NET, игнорируя указание сервера, использовал другой шифронабор. Казалось бы, что могло пойти не так? ;)
Не смотрели в сторону этой библиотеки? https://github.com/refraction-networking/utls
Под .NET bouncy castle имеет полностью настраиваемый TLS клиент.
Верно, это был один из вариантов, но это только TCP. А как же обертка для работы с HTTP? Самому писать не очень хотелось, сроки поджимали, клиенты возмущались, к тому же не смог найти адекватное решение использование прокси
Реализовать HTTP 1.1 для цели скраппинга один вечер, вам же не все фичи нужны, а только запрос страниц последовательно. Прелесть старых протоколов в простоте.
В один день одна из крупных досок объявлений начала возвращать фейковые характеристики объявлений, когда понимала, что мы - бот.
И на что только люди не пойдут, лишь бы API не предоставлять.
Причем платную. Затраты с обеих сторон получаются на много выше.
И с помощью API можно контролировать данные. Многим даже контактные данные не нужны, достаточно самого факта появления нового объявления, далее клиент сам уже заходят на сайт.
Ведь как бы Сарочка ни легла, её всё равно отксрейпят. Но можно сделать это безболезненно для обеих сторон, предоставив API, а можно так, как описано в статье. В результате получается хуже для всех.
Кстати, под API-вызовы можно завести ноду, отдельную от сайта, обслуживающего юзеров. И содержать её за малую часть той самой платы-за-API.
Но нет: мыши, кактус, плак-плак.
Есть апи, но оно, к сожалению, нам не подходит. Запрашивать данные можно в очень маленьком количестве и раз в определенное время ~1час. Нам же нужно максимально быстро получать изменения/новые объявления
Ну так я и говорю: есть спрос (Вы). Почему на этот спрос нет предложения? У нас капитализмус или где?
Сайт свои данные оценивает в N миллионов рублей
Вы как теорию не знаете. "Ваши данные" стоят ровно столько, сколько за них готовы платить, независимо от того, что Вы там себе возомнили. Если за них не готовы платить — значит, они ничего не стоят.
Но на самом деле за эти данные платят — тем программистам, которые пишут скрейперы. И Вы вполне могли бы сказать — "мужики, чем платить программистам, лучше заплатите эти деньги мне, а я вам данные отдам без всяких извращений". Но жаба — она давит, и в результате получается известная картина про корову, только доит её не адвокат, а программисты.
Спасибо за статью! Встречал похожую проблему, но с CloudFlare, решение нашёл на просторах интернета
Решение заключается в использовании библиотеки BoringSSL
Достаточно просто сделать HTTP-сервер на плюсах с этой библиотекой(использовать libCURL) и перебрасывать запросы через него, и сайты будут думать что вы - браузер (BoringSSL используется в хромиуме)
Спасибо. Статья просто ?
Спасибо за статью! Очень вовремя попалась )
Я пытался написать бота для шахмат, но так и не смог подключиться так, чтобы меня не распознали как бота. Видимо, вот в чем было дело?
За годы разработки парсеров крупных досок объявлений, встречались разные и довольно интересные защиты, нам есть чем поделиться. Если читателям хабра будет интересно, можно сделать еще несколько статей на эту тему
Больше всех интерес должны проявить авторы этого поста: https://habr.com/ru/company/proto/blog/652861/
Если читателям хабра будет интересно, можно сделать еще несколько статей на эту тему
интересно, конечно, пишите
Очень интересно, пишите ещё. Огромное спасибо. Сам работаю в компании по скрапингу цен. Где нету API или http request банят, используем playwright. Браузеры chromium, chromium-headless, brave, brave-block, brave-headless. Иногда и старикан селениум с htmlunit выручает. Ну а так да, cloudflare самый проблематичный обойти.
Ого, впервые встретил человека с похожим бэкграундом. Очень приятно! Возможно следующая статья будет о том, как обойти ProofOfWork на сайтах
Да в мире скрапинга много чего интересного. Из таких странных блокировок, это когда заходишь на продукт напрямую (раньше не посещая этот сайт, без cookies, даже не incognito) и тебе прилетает бан. А если зайти на home -> продукт всё Ок! Кто это придумал? Или это такая фича datadome? Одним словом весело. Кто хочет попробовать сайт: 6361727265666F75722E6672. Может я тоже когда соберусь с мыслями и запилю пост на хабре, что-то интересное.
Одним из возможных вариантов управлять tls fingerprint является использование техники ssl bumping с помощью прокси squid.
Squid является полноценным http proxy, что позволяет использовать его не изменяя целевого кода на C#, просто указав в настройках http client.
Не уверен, что такой подход позволит полностью мимикрировать hello client запрос под браузер, но даже банальное изменение cipher list в нашем случае приводило к проходу защиты bot detection по tls fingerprint.
Привет, а русский текст как-то можно заслать в проксю, если ссылка содержит поисковый &query=русский текст.
Вылетает ошибка
Как мы TLS Fingerprint обходили…