У меня довольно большой музыкальный сайт с большой базой артистов. Я заметил, что другие музыкальные сайты очищают данные нашего сайта (я тут и там ввожу фиктивные имена исполнителей, а затем ищу их в Google).
Как я могу предотвратить соскоб экрана? Это вообще возможно?
Ответы:
Примечание. Поскольку полная версия этого ответа превышает ограничение длины Stack Overflow, вам необходимо перейти на GitHub, чтобы прочитать расширенную версию с дополнительными советами и подробностями.
Чтобы воспрепятствовать соскребанию (также известному как Webscraping , Screenscraping , веб-анализ данных , веб-сбор или извлечение веб-данных ), это помогает узнать, как работают эти скребки, и, соответственно, что мешает им работать хорошо.
Существуют различные типы скребков, и каждый работает по-разному:
Пауки, такие как бот Google или копиры веб-сайтов, такие как HTtrack , которые рекурсивно переходят по ссылкам на другие страницы для получения данных. Иногда они используются для целенаправленной очистки для получения определенных данных, часто в сочетании с анализатором HTML для извлечения нужных данных с каждой страницы.
Сценарии оболочки: иногда для очистки используются обычные инструменты Unix: Wget или Curl для загрузки страниц и Grep (Regex) для извлечения данных.
HTML-парсеры, например, основанные на Jsoup, Scrapy и других. Как и в сценариях на основе регулярных выражений в shell-скриптах, они работают путем извлечения данных со страниц на основе шаблонов в HTML, обычно игнорируя все остальное.
Например: если на вашем сайте есть функция поиска, такой скребок может отправить запрос на поиск, а затем получить все ссылки на результаты и их заголовки со страницы результатов HTML, чтобы специально получить только ссылки на результаты поиска и их заголовки. , Это самые распространенные.
Скребки, основанные, например, на. Selenium или PhantomJS , которые открывают ваш сайт в реальном браузере, запускают JavaScript, AJAX и т. Д., А затем получают нужный текст с веб-страницы, как правило, с помощью:
Получение HTML-кода из браузера после загрузки вашей страницы и запуска JavaScript, а затем использование анализатора HTML для извлечения нужных данных. Они являются наиболее распространенными, и поэтому многие методы для взлома HTML-парсеров / скребков также работают здесь.
Делаем скриншот отрендеренных страниц, а затем используем OCR для извлечения желаемого текста из скриншота. Это редко, и только специальные скребки, которые действительно хотят, чтобы ваши данные настроили это.
Веб-сервисы, такие как ScrapingHub или Kimono . На самом деле, есть люди, чья работа состоит в том, чтобы выяснить, как очистить ваш сайт и извлечь контент для использования другими.
Неудивительно, что профессиональные услуги по соскребанию труднее всего удержать, но если вам сложно и сложно разобраться, как очистить ваш сайт, эти (и люди, которые платят за это) могут не потрудиться очистить ваш сайт.
Встраивание вашего сайта в страницы других сайтов с помощью фреймов , а также встраивание вашего сайта в мобильные приложения.
Мобильные приложения (Android и iOS), хотя и не являются технически чистыми, могут встраивать веб-сайты и внедрять пользовательские CSS и JavaScript, что полностью меняет внешний вид ваших страниц.
Human copy - paste: люди будут копировать и вставлять ваш контент, чтобы использовать его в другом месте.
Существует много совпадений между этими различными типами скребков, и многие скребки будут вести себя одинаково, даже если они используют разные технологии и методы.
Эти советы, в основном, мои собственные идеи, различные трудности, с которыми я столкнулся при написании скребков, а также кусочки информации и идей со всего мира.
Как перестать соскоб
Вы не можете полностью предотвратить это , так как независимо от того, что вы делаете, решительные скребки все еще могут понять, как очищать. Тем не менее, вы можете остановить много очистки, выполнив несколько вещей:
Контролируйте свои журналы и шаблоны трафика; ограничить доступ, если вы видите необычную активность:
Регулярно проверяйте свои журналы, и в случае необычной активности, свидетельствующей об автоматическом доступе (скребки), такой как много подобных действий с того же IP-адреса, вы можете заблокировать или ограничить доступ.
В частности, некоторые идеи:
Ограничение скорости:
Разрешить только пользователям (и скребкам) выполнять ограниченное количество действий в определенное время - например, разрешать только несколько поисков в секунду с любого определенного IP-адреса или пользователя. Это замедлит работу скребков и сделает их неэффективными. Вы также можете показать капчу, если действия выполняются слишком быстро или быстрее, чем реальный пользователь.
Обнаружить необычную активность:
Если вы видите необычную активность, такую как много похожих запросов с определенного IP-адреса, кто-то просматривает чрезмерное количество страниц или выполняет необычное количество поисков, вы можете запретить доступ или показать капчу для последующих запросов.
Не просто отслеживать и ограничивать скорость по IP-адресу - используйте и другие индикаторы:
Если вы блокируете или ограничиваете скорость, делайте это не только для каждого IP-адреса; Вы можете использовать другие индикаторы и методы для идентификации конкретных пользователей или скребков. Вот некоторые показатели, которые могут помочь вам идентифицировать конкретных пользователей / скребков:
Как быстро пользователи заполняют формы и где нажимают на кнопку;
С помощью JavaScript вы можете собрать много информации, например, размер / разрешение экрана, часовой пояс, установленные шрифты и т. Д .; Вы можете использовать это для идентификации пользователей.
Заголовки HTTP и их порядок, особенно User-Agent.
Например, если вы получаете много запросов с одного IP-адреса, все используют один и тот же пользовательский агент, размер экрана (определяется с помощью JavaScript) и пользователь (в данном случае скребок) всегда нажимает на кнопку одинаково и при с регулярными интервалами, это, вероятно, скребок экрана; и вы можете временно блокировать подобные запросы (например, блокировать все запросы с этим пользовательским агентом и размером экрана, приходящим с этого конкретного IP-адреса), и таким образом вы не будете доставлять неудобства реальным пользователям на этом IP-адресе, например. в случае общего подключения к интернету.
Вы также можете пойти дальше, так как вы можете идентифицировать похожие запросы, даже если они приходят с разных IP-адресов, что указывает на распределенную очистку (скребок, использующий ботнет или сеть прокси-серверов). Если вы получаете много других идентичных запросов, но они приходят с разных IP-адресов, вы можете заблокировать. Опять же, имейте ввиду, что не случайно блокируете реальных пользователей.
Это может быть эффективно в отношении экранов, использующих JavaScript, поскольку вы можете получить от них много информации.
Смежные вопросы по обмену стека безопасности:
Как однозначно идентифицировать пользователей с одинаковым внешним IP-адресом? для более подробной информации, и
Почему люди используют запреты IP-адресов, когда IP-адреса часто меняются? для получения информации о пределах этих методов.
Вместо временной блокировки доступа используйте капчу:
Простой способ реализовать ограничение скорости состоит в том, чтобы временно заблокировать доступ на определенное время, однако использование капчи может быть лучше, см. Раздел «Капчи» ниже.
Требуется регистрация и логин
Требовать создания учетной записи для просмотра вашего контента, если это возможно для вашего сайта. Это хороший сдерживающий фактор для скребков, но также хороший сдерживающий фактор для реальных пользователей.
Чтобы избежать создания сценариями множества учетных записей, вам необходимо:
Требуйте адрес электронной почты для регистрации и проверьте этот адрес электронной почты, отправив ссылку, которая должна быть открыта для активации учетной записи. Разрешить только одну учетную запись на адрес электронной почты.
Требуется капча, которая будет решена при регистрации / создании учетной записи.
Требование создания учетной записи для просмотра контента отвлечет пользователей и поисковые системы; если вам требуется создать учетную запись для просмотра статьи, пользователи пойдут в другое место.
Блокировать доступ с облачного хостинга и соскребать IP-адреса сервисов
Иногда скребки будут запускаться из сервисов веб-хостинга, таких как Amazon Web Services, GAE или VPS. Ограничьте доступ к вашему веб-сайту (или покажите капчу) для запросов, исходящих с IP-адресов, используемых такими службами облачного хостинга.
Точно так же вы можете также ограничить доступ с IP-адресов, используемых прокси-провайдерами или провайдерами VPN, поскольку скреберы могут использовать такие прокси-серверы, чтобы избежать обнаружения многих запросов.
Имейте в виду, что, блокируя доступ с прокси-серверов и VPN, вы будете негативно влиять на реальных пользователей.
Сделайте ваше сообщение об ошибке неописуемым, если вы заблокируете
Если вы блокируете / ограничивает доступ, вы должны убедиться, что вы не сообщаете скребку, что вызвало блокировку, тем самым давая им подсказки о том, как починить их скребок. Поэтому плохой идеей будет показывать страницы ошибок с текстом вроде:
Слишком много запросов с вашего IP-адреса, повторите попытку позже.
Ошибка, заголовок User Agent отсутствует!
Вместо этого покажите дружественное сообщение об ошибке, в котором не сказано, что вызвало его. Примерно так гораздо лучше
helpdesk@example.com
, если проблема не устранена.Это также намного удобнее для реальных пользователей, если они когда-либо увидят такую страницу с ошибкой. Вам также следует рассмотреть возможность показа капчи для последующих запросов вместо жесткого блока, в случае, если реальный пользователь увидит сообщение об ошибке, чтобы вы не блокировали и, следовательно, не заставляли законных пользователей связываться с вами.
Используйте Captchas, если вы подозреваете, что к вашему сайту обращается скребок.
Captchas («Полностью автоматизированный тест для разделения компьютеров и людей») очень эффективен против остановки скребков. К сожалению, они также очень эффективны при раздражении пользователей.
Как таковые, они полезны, когда вы подозреваете возможный скребок и хотите остановить его, не блокируя при этом доступ и в случае, если это не скребок, а реальный пользователь. Возможно, вы захотите показать капчу, прежде чем разрешить доступ к контенту, если вы подозреваете скребок.
Что нужно знать при использовании капч:
Не раскручивайте свои собственные, используйте что-то вроде reCaptcha от Google : это намного проще, чем применять капчу самостоятельно, она более удобна для пользователя, чем какое-то размытое и искаженное текстовое решение, которое вы можете придумать самостоятельно (пользователям часто нужно только поставить галочку ), и это также намного сложнее для сценария решить, чем простое изображение с вашего сайта
Не включайте решение для капчи в разметку HTML: я действительно видел один веб-сайт, который имел решение для капчи на самой странице (хотя и довольно хорошо скрытое), что делало его довольно бесполезным. Не делай что-то подобное. Опять же, используйте сервис, такой как reCaptcha, и у вас не будет таких проблем (если вы используете его правильно).
Капчи могут быть решены в большом количестве: Существуют услуги по решению проблем с капчей, где фактические, низкооплачиваемые люди решают проблемы с капчей. Опять же, использование reCaptcha является хорошей идеей, поскольку у них есть защита (например, относительно короткое время, которое пользователь имеет для решения капчи). Этот вид обслуживания вряд ли будет использоваться, если ваши данные не будут действительно ценными.
Подавать текстовое содержимое в виде изображения
Вы можете визуализировать текст на стороне сервера изображений и обслуживать его для отображения, что затруднит извлечение текста простыми скребками.
Однако, это плохо для программ чтения с экрана, поисковых систем, производительности и почти всего остального. Это также незаконно в некоторых местах (из-за доступности, например, Закона об американцах-инвалидах), и его также легко обойти с помощью OCR, так что не делайте этого.
Вы можете сделать что-то подобное со спрайтами CSS, но это страдает от тех же проблем.
Не раскрывайте свой полный набор данных:
Если возможно, не предоставляйте скрипту / боту способ получить весь ваш набор данных. В качестве примера: у вас есть новостной сайт с множеством отдельных статей. Вы можете сделать эти статьи доступными только путем их поиска через поиск по сайту, и, если у вас нет списка всех статей на сайте и их URL-адресов, эти статьи будут доступны только с помощью поиска. характерная черта. Это означает, что сценарий, желающий получить все статьи с вашего сайта, должен будет выполнить поиск всех возможных фраз, которые могут появиться в ваших статьях, чтобы найти их все, что будет занимать много времени, ужасно неэффективно и, будем надеяться, сделает скребок сдался.
Это будет неэффективно, если:
example.com/article.php?articleId=12345
. Это (и подобные вещи), которые позволят скребкам просто перебирать всеarticleId
s и запрашивать все статьи таким образом.Не раскрывайте свои API, конечные точки и подобные вещи:
Убедитесь, что вы не выставляете какие-либо API, даже непреднамеренно. Например, если вы используете AJAX или сетевые запросы из Adobe Flash или Java-апплетов (не дай Бог!) Для загрузки ваших данных, тривиально просмотреть сетевые запросы со страницы и выяснить, куда направляются эти запросы, и затем перепроектировать и использовать эти конечные точки в скребковой программе. Убедитесь, что вы запутываете свои конечные точки и затрудняете их использование другими, как описано.
Для сдерживания HTML-парсеров и скребков:
Поскольку анализаторы HTML работают, извлекая контент из страниц на основе идентифицируемых шаблонов в HTML, мы можем преднамеренно изменить эти шаблоны в oder, чтобы сломать эти скребки или даже порвать их. Большинство из этих советов также применимы к другим скребкам, таким как пауки и скребки.
Часто меняйте свой HTML
Скреперы, которые обрабатывают HTML непосредственно, делают это, извлекая содержимое из определенных, идентифицируемых частей вашей HTML-страницы. Например: если все страницы на вашем сайте имеют
div
идентификаторarticle-content
с текстом статьи, то написать скрипт для посещения всех страниц статьи на вашем сайте и извлечь текст содержимого элементаarticle-content
div просто. на каждой странице статьи и вуаля, скребок имеет все статьи с вашего сайта в формате, который можно использовать в другом месте.Если вы часто меняете HTML и структуру своих страниц, такие скребки больше не будут работать.
Вы можете часто изменять идентификаторы и классы элементов в своем HTML, возможно, даже автоматически. Так что, если ваш
div.article-content
становится чем-то похожимdiv.a4c36dda13eaf0
и меняется каждую неделю, скребок сначала будет работать нормально, но через неделю сломается. Обязательно измените длину ваших идентификаторов / классов, в противном случае скребок будет использоватьdiv.[any-14-characters]
для поиска нужного элемента. Остерегайтесь других подобных отверстий тоже ..Если нет никакого способа найти желаемый контент из разметки, скребок сделает это из структуры HTML. Таким образом, если все ваши страницы статьи похожи в том, что каждая из них
div
внутри a,div
которая идет после a,h1
является содержимым статьи, скребки получат содержание статьи на основе этого. Опять же, чтобы сломать это, вы можете добавлять / удалять дополнительную разметку в вашем HTML, периодически и случайно, например. добавив дополнительныеdiv
s илиspan
s. При современной обработке HTML на стороне сервера это не должно быть слишком сложным.Что нужно знать:
Это будет утомительно и сложно реализовать, поддерживать и отлаживать.
Вы будете мешать кешированию. Особенно, если вы измените идентификаторы или классы ваших элементов HTML, это потребует соответствующих изменений в ваших файлах CSS и JavaScript, что означает, что каждый раз, когда вы их изменяете, они должны будут повторно загружаться браузером. Это приведет к увеличению времени загрузки страницы для повторных посетителей и увеличению нагрузки на сервер. Если вы меняете его только раз в неделю, это не будет большой проблемой.
Умные скребки все равно смогут получить ваш контент, сделав вывод, где находится фактический контент, например. зная, что большой отдельный блок текста на странице, вероятно, будет настоящей статьей. Это позволяет по-прежнему находить и извлекать нужные данные со страницы. Boilerpipe делает именно это.
По сути, убедитесь, что для сценария не так просто найти фактическое, желаемое содержание для каждой подобной страницы.
См. Также Как запретить сканерам, зависящим от XPath, получать содержимое страницы, чтобы узнать, как это можно реализовать в PHP.
Изменить ваш HTML в зависимости от местоположения пользователя
Это похоже на предыдущий совет. Если вы используете другой HTML-код в зависимости от местоположения / страны вашего пользователя (определяется по IP-адресу), это может привести к поломке скребков, которые доставляются пользователям. Например, если кто-то пишет мобильное приложение, которое собирает данные с вашего сайта, оно сначала будет работать нормально, но сломаться, когда оно будет фактически распространено среди пользователей, поскольку эти пользователи могут находиться в другой стране и, таким образом, получить другой HTML, который встроенный скребок не предназначен для потребления.
Часто меняйте свой HTML, активно этим пользуйтесь!
Пример: у вас есть функция поиска на вашем сайте, расположенная по адресу
example.com/search?query=somesearchquery
, которая возвращает следующий HTML:Как вы уже догадались, это легко очистить: все, что нужно сделать скребку - это нажать на URL-адрес поиска с помощью запроса и извлечь нужные данные из возвращенного HTML-кода. В дополнение к периодическому изменению HTML, как описано выше, вы также можете оставить старую разметку со старыми идентификаторами и классами, скрыть ее с помощью CSS и заполнить ее ложными данными, тем самым отравив скребок. Вот как можно изменить страницу результатов поиска:
Это будет означать, что скребки, написанные для извлечения данных из HTML на основе классов или идентификаторов, по-прежнему будут работать, но получат поддельные данные или даже рекламу, данные, которые реальные пользователи никогда не увидят, поскольку они скрыты с помощью CSS.
Винт со скребком: вставьте поддельные, невидимые данные honeypot на свою страницу
Добавив к предыдущему примеру, вы можете добавить невидимые элементы honeypot в ваш HTML, чтобы ловить скребки. Пример, который можно добавить на ранее описанную страницу результатов поиска:
Скребок, написанный для получения всех результатов поиска, подберет его, как и любые другие, реальные результаты поиска на странице, и перейдет по ссылке в поисках нужного контента. Настоящий человек никогда даже не увидит его (из-за того, что он скрыт с помощью CSS) и не пойдет по ссылке. Настоящий и желанный паук, такой как Google, также не будет посещать ссылку, потому что вы запретили
/scrapertrap/
в своем файле robots.txt.Вы можете сделать
scrapertrap.php
что-то вроде блокировки доступа для IP-адреса, который посетил его, или принудительно установить капчу для всех последующих запросов с этого IP-адреса.Не забудьте запретить ваш honeypot (
/scrapertrap/
) в файле robots.txt, чтобы роботы поисковых систем не попали в него.Вы можете / должны сочетать это с предыдущим советом частого изменения HTML.
Также часто меняйте это, так как скребки научатся избегать этого. Измените адрес и текст honeypot. Также нужно рассмотреть возможность изменения встроенного CSS, используемого для сокрытия, и использовать вместо этого атрибут ID и внешний CSS, поскольку скребки научатся избегать всего, что имеет
style
атрибут с CSS, который используется для скрытия содержимого. Также попробуйте только включить его иногда, чтобы скребок работал изначально, но через некоторое время ломается. Это также относится к предыдущему совету.Злоумышленники могут запретить доступ для реальных пользователей, поделившись ссылкой на свой honeypot или даже вставив эту ссылку где-нибудь в виде изображения (например, на форуме). Часто меняйте URL, и делайте время запрета относительно коротким.
Подавать поддельные и бесполезные данные, если вы обнаружите скребок
Если вы обнаружите, что очевидно является скребком, вы можете подделать поддельные и бесполезные данные; это повредит данные, которые скребок получает с вашего сайта. Вы также должны сделать невозможным отличить такие фальшивые данные от реальных данных, чтобы скребки не знали, что они облажались.
Как пример: у вас есть новостной сайт; Если вы обнаружите скребок, вместо того, чтобы блокировать доступ, подайте поддельные, случайно сгенерированные статьи, и это отравит данные, которые получает скребок. Если вы сделаете ваши фальшивые данные неотличимыми от реальных вещей, скребкам будет сложно получить то, что они хотят, а именно реальные, реальные данные.
Не принимать запросы, если пользовательский агент пуст / отсутствует
Часто лениво написанные скребки не будут отправлять заголовок User Agent со своим запросом, тогда как все браузеры, а также поисковики поисковых систем будут отправлять.
Если вы получили запрос, в котором отсутствует заголовок User Agent, вы можете показать капчу или просто заблокировать или ограничить доступ. (Или предоставьте поддельные данные, как описано выше, или что-то еще ..)
Подделывать банально, но в качестве меры против плохо написанных скребков это стоит реализовать.
Не принимать запросы, если пользовательский агент является обычным шабером; черные списки, используемые скребками
В некоторых случаях скребки будут использовать пользовательский агент, который не использует реальный браузер или поисковик, например:
Если вы обнаружите, что определенная строка User Agent используется скребками на вашем сайте, и она не используется реальными браузерами или законными пауками, вы также можете добавить ее в черный список.
Если он не запрашивает ресурсы (CSS, изображения), это не настоящий браузер.
Настоящий браузер (почти всегда) запрашивает и загружает ресурсы, такие как изображения и CSS. HTML-парсеры и скребки не будут, так как их интересуют только реальные страницы и их содержание.
Вы можете регистрировать запросы к своим ресурсам, и если вы видите много запросов только для HTML, это может быть скребок.
Помните, что поисковые роботы, древние мобильные устройства, программы чтения с экрана и неправильно настроенные устройства также могут не запрашивать ресурсы.
Использовать и требовать куки; используйте их для отслеживания действий пользователя и скребка.
Вы можете требовать, чтобы куки были включены для просмотра вашего сайта. Это будет сдерживать неопытных и начинающих авторов скребков, однако скребку легко отправлять куки. Если вы их используете и запрашиваете, вы можете отслеживать действия пользователей и скребков с ними и, таким образом, применять ограничение скорости, блокировку или отображение капч для каждого пользователя, а не для каждого IP.
Например: когда пользователь выполняет поиск, установите уникальный идентификационный файл cookie. Когда страницы результатов будут просмотрены, проверьте этот файл cookie. Если пользователь открывает все результаты поиска (вы можете узнать из куки), то это, вероятно, скребок.
Использование файлов cookie может быть неэффективным, так как скребки могут отправлять файлы cookie вместе со своими запросами и отбрасывать их по мере необходимости. Вы также запретите доступ для реальных пользователей, у которых отключены файлы cookie, если ваш сайт работает только с файлами cookie.
Обратите внимание, что если вы используете JavaScript для установки и получения cookie, вы заблокируете скребки, которые не запускают JavaScript, так как они не могут получить и отправить cookie по своему запросу.
Используйте JavaScript + Ajax для загрузки вашего контента
Вы можете использовать JavaScript + AJAX для загрузки вашего контента после загрузки самой страницы. Это сделает контент недоступным для анализаторов HTML, которые не поддерживают JavaScript. Это часто является эффективным сдерживающим фактором для начинающих и неопытных программистов, пишущих скребки.
Быть осведомленным:
Использование JavaScript для загрузки реального контента ухудшит пользовательский опыт и производительность
Поисковые системы также могут не запускать JavaScript, что не позволяет им индексировать ваш контент. Это может не быть проблемой для страниц результатов поиска, но может быть связано с другими вещами, такими как страницы статей.
Запутывайте свою разметку, сетевые запросы от скриптов и все остальное.
Если вы используете Ajax и JavaScript для загрузки ваших данных, запутайте передаваемые данные. Например, вы можете кодировать свои данные на сервере (с помощью чего-то простого, например base64 или более сложного), а затем декодировать и отображать их на клиенте после выборки через Ajax. Это будет означать, что кто-то, проверяющий сетевой трафик, не сразу увидит, как работает ваша страница и загружает данные, и кому-то будет сложнее напрямую запросить данные запроса у ваших конечных точек, поскольку им придется перепроектировать ваш алгоритм дескремблирования.
Если вы используете Ajax для загрузки данных, вам должно быть сложно использовать конечные точки без предварительной загрузки страницы, например, требуя некоторый ключ сеанса в качестве параметра, который вы можете встроить в свой JavaScript или HTML.
Вы также можете встроить свои обфусцированные данные непосредственно в исходную HTML-страницу и использовать JavaScript для деобфускации и отображения ее, что позволит избежать дополнительных сетевых запросов. Это значительно усложнит извлечение данных с использованием парсера только для HTML, который не запускает JavaScript, поскольку тот, кто пишет скребок, должен будет реконструировать ваш JavaScript (который вы также должны запутать).
Возможно, вы захотите регулярно менять методы запутывания, чтобы сломать скребки, которые это выяснили.
Есть несколько недостатков, чтобы сделать что-то вроде этого, хотя:
Это будет утомительно и сложно реализовать, поддерживать и отлаживать.
Это будет неэффективно против скребков и скребков, которые на самом деле запускают JavaScript, а затем извлекают данные. (Большинство простых анализаторов HTML не поддерживают JavaScript)
Это сделает ваш сайт нефункциональным для реальных пользователей, если у них отключен JavaScript.
Производительность и время загрузки страницы пострадают.
Нетехническое:
Скажите людям не царапать, и некоторые будут уважать это
Найти адвоката
Сделайте ваши данные доступными, предоставьте API:
Вы могли бы сделать ваши данные легко доступными и потребовать указания авторства и ссылки на ваш сайт. Возможно, за это взимается $$$.
Разное:
Существуют также коммерческие сервисы защиты от соскобов, такие как защита от соскобов Cloudflare или Distill Networks (подробности о том, как это работает здесь ), которые делают эти вещи, и многое другое для вас.
Найдите баланс между удобством использования для реальных пользователей и устойчивостью к скребкам: все, что вы делаете, так или иначе отрицательно повлияет на работу пользователей, найдет компромиссы.
Не забывайте свой мобильный сайт и приложения. Если у вас есть мобильное приложение, его тоже можно отсканировать, и сетевой трафик можно проверить для определения используемых им конечных точек REST.
Скреперы могут очищать другие скребки: если есть один веб-сайт, содержимое которого было соскоблено с вашего, другие скребки могут соскрести с сайта этого скребка.
Дальнейшее чтение:
Статья Википедии о веб-соскобе . Множество деталей о задействованных технологиях и различных типах веб-скребка.
Остановить сценаристов от сотрясения вашего сайта сотни раз в секунду . Q & A по очень похожей проблеме - боты проверяют сайт и покупают вещи, как только они поступят в продажу. Много актуальной информации, особенно на капчи и ограничение скорости.
источник
A real browser will (almost always) request and download assets such as images and CSS
также верно для читателей доступности? CAPTCHA не работает, поэтому, по крайней мере, профессиональные услуги ей не мешают. Использование куки требует уведомления / согласия в ЕС.Find a balance between usability for real users and scraper-proofness
также баланс между временем и сложностью программирования и финансовой выгодой.Я предполагаю, что вы настроили
robots.txt
.Как уже упоминали другие, скребки могут подделать почти каждый аспект своей деятельности, и, вероятно, очень трудно определить запросы, поступающие от плохих парней.
Я хотел бы рассмотреть:
/jail.html
.robots.txt
(так что уважительные пауки никогда не будут посещать).display: none
)./jail.html
.Это может помочь вам быстро идентифицировать запросы от скребков, которые грубо игнорируют ваши
robots.txt
.Вы также можете сделать свой
/jail.html
целый весь веб - сайт , который имеет то же самое, точное разметку как обычные страницы, но с данными поддельных (/jail/album/63ajdka
,/jail/track/3aads8
и т.д.). Таким образом, плохие скребки не будут предупреждены о «необычном вводе», пока у вас не будет возможности полностью их заблокировать.источник
Сью их.
Серьезно: Если у вас есть немного денег, поговорите с хорошим, милым, молодым юристом, который знает, как обходить Интернет. Вы действительно могли бы сделать что-то здесь. В зависимости от того, где находятся сайты, вы можете попросить адвоката написать прекращение и отказ от прав или его эквивалент в вашей стране. Вы можете хотя бы напугать ублюдков.
Документируйте вставку ваших фиктивных значений. Введите фиктивные значения, которые явно (но неясно) указывают на вас. Я думаю, что это обычная практика для компаний, занимающихся телефонными книгами, и здесь, в Германии, я думаю, что было несколько случаев, когда подражатели были разбиты поддельными записями, которые они копировали 1: 1.
Было бы обидно , если это будет водить вас в портя свой HTML код, увлекая вниз SEO, срок действия и другие вещи (даже если система шаблонов , которая использует несколько иную структуру HTML на каждом запросе на идентичные страницы уже могут помочь много против скребки, которые всегда используют структуры HTML и имена классов / идентификаторов для вывода контента.)
Случаи как это - то, для чего хороши законы об авторском праве. Срывать честную работу других людей, чтобы зарабатывать деньги, это то, с чем вы должны быть в состоянии бороться.
источник
Вы действительно ничего не можете сделать, чтобы полностью предотвратить это. Скребки могут подделать свой пользовательский агент, использовать несколько IP-адресов и т. Д. И выглядеть как обычный пользователь. Единственное, что вы можете сделать, это сделать текст недоступным во время загрузки страницы - сделать это с помощью изображения, flash или загрузить его с помощью JavaScript. Тем не менее, первые два являются плохими идеями, а последний будет проблемой доступности, если JavaScript не включен для некоторых из ваших постоянных пользователей.
Если они абсолютно бьют по вашему сайту и перелистывают все ваши страницы, вы можете сделать какое-то ограничение скорости.
Хотя есть надежда. Скреперы полагаются на данные вашего сайта в едином формате. Если бы вы могли как-то рандомизировать это, это могло бы сломать их скребок. Такие вещи, как изменение идентификатора или имени класса элементов страницы при каждой загрузке и т. Д. Но это большая работа, и я не уверен, стоит ли это того. И даже тогда они могли бы обойти это с достаточной самоотдачей.
источник
Предоставить XML API для доступа к вашим данным; таким образом, который прост в использовании. Если люди хотят получить ваши данные, они получат их, вы также можете сделать все возможное.
Таким образом, вы можете эффективно предоставлять подмножество функций, гарантируя, что, по крайней мере, скребки не будут поглощать HTTP-запросы и огромные объемы полосы пропускания.
Тогда все, что вам нужно сделать, это убедить людей, которые хотят, чтобы ваши данные использовали API. ;)
источник
Извините, это действительно довольно сложно сделать ...
Я хотел бы предложить вам вежливо попросить их не использовать ваш контент (если ваш контент защищен авторским правом).
Если это так, и они не откажутся от этого, тогда вы можете предпринять дальнейшие действия и отправить им письмо о прекращении и воздержании .
Как правило, все, что вы делаете для предотвращения соскабливания, может иметь более отрицательный эффект, например, доступность, боты / пауки и т. Д.
источник
Хорошо, как и во всех сообщениях, если вы хотите, чтобы поисковая система была дружественной к поисковым системам, тогда боты могут поцарапаться.
Но вы все еще можете сделать несколько вещей, и это может быть эффективно для 60-70% -ых очищающих ботов.
Сделайте скрипт проверки, как показано ниже.
Если определенный IP-адрес посещается очень быстро, то после нескольких посещений (5-10) поместите его IP-адрес + информацию о браузере в файл или базу данных.
Следующий шаг
(Это будет фоновый процесс, который будет выполняться все время или по расписанию через несколько минут.) Создайте еще один скрипт, который будет продолжать проверять эти подозрительные IP-адреса.
Случай 1. Если пользовательский агент относится к известным поисковым системам, таким как Google, Bing , Yahoo (вы можете найти более подробную информацию о пользовательских агентах, прибегая к помощи Google). Тогда вы должны увидеть http://www.iplists.com/ . В этом списке и попробуйте сопоставить закономерности. И если это похоже на фальшивый пользовательский агент, попросите заполнить капчу при следующем посещении. (Вам нужно немного больше изучить IP-адреса ботов. Я знаю, что это достижимо, а также попробуйте использовать Whois этого IP-адреса. Это может быть полезно.)
Случай 2. Нет пользовательского агента поискового бота: просто попросите заполнить капчу при следующем посещении.
источник
Поздний ответ - а также этот ответ, вероятно, не тот, который вы хотите услышать ...
Я уже написал много (много десятков) различных специализированных скребков для сбора данных. (только потому, что мне нравится философия «открытых данных»).
Вот уже много советов в других ответах - теперь я буду играть роль адвоката дьявола и буду расширять и / или исправлять их эффективность.
Первый:
Попытки использовать некоторые технические барьеры не стоят проблем, вызванных:
Простой HMTL - самый простой способ - это анализ простых HTML-страниц с четко определенной структурой и классами CSS. Например, достаточно проверить элемент с помощью Firebug и использовать правильные пути Xpath и / или CSS в моем скребке.
Вы можете генерировать структуру HTML динамически, а также вы можете динамически генерировать имена классов CSS (и сам CSS тоже) (например, используя некоторые случайные имена классов) - но
Вы не можете изменить структуру для каждого ответа, потому что ваши обычные пользователи будут ненавидеть вас. Кроме того, это вызовет больше проблем для вас (техническое обслуживание), а не для скребка. Путь XPath или CSS определяется скриптом очистки автоматически из известного содержимого.
Ajax - немного сложнее в начале, но во много раз ускоряет процесс очистки :) - почему?
При анализе запросов и ответов я просто настраиваю свой собственный прокси-сервер (написанный на Perl), и мой Firefox использует его. Конечно, потому что это мой собственный прокси - он полностью скрыт - целевой сервер видит его как обычный браузер. (Итак, нет X-Forwarded-for и таких заголовков). Основываясь на журналах прокси, в основном можно определить «логику» запросов ajax, например, я могу пропустить большую часть html-скрапинга и просто использовать хорошо структурированные ответы ajax (в основном в формате JSON).
Итак, Аякс не очень помогает ...
Некоторыми более сложными являются страницы, которые используют много упакованных функций JavaScript .
Здесь можно использовать два основных метода:
Такая очистка выполняется медленно (очистка выполняется как в обычном браузере), но это
User-Agent фильтрации на основе не помогает вообще. Любой серьезный data-майнер установит его в свой скребок.
Требовать логин - не помогает. Простейший способ победить (без анализа и / или написания сценария входа в систему) - это просто войти на сайт как обычный пользователь, используя Mozilla, и просто запустить скребок на основе Mozrepl ...
Помните, что обязательный вход в систему помогает анонимным ботам, но не помогает против тех, кто хочет очистить ваши данные. Он просто регистрируется на вашем сайте в качестве обычного пользователя.
Использование фреймов также не очень эффективно. Это используется многими сервисами живого кино, и это не очень трудно победить. Фреймы - это просто еще одна страница HTML / Javascript, необходимая для анализа ... Если данные стоят хлопот - майнер данных проведет необходимый анализ.
Ограничение на основе IP вообще неэффективно - здесь слишком много общедоступных прокси-серверов, а также TOR ... :) Это не замедляет очистку (для тех, кто действительно хочет получить ваши данные).
Очень тяжело скрести данные, скрытые в изображениях. (например, простое преобразование данных в изображения на стороне сервера). Использование «тессеракта» (OCR) помогает много раз - но, честно говоря, - данные должны стоить хлопот скребку. (что много раз не стоит).
С другой стороны, ваши пользователи будут ненавидеть вас за это. Я сам (даже если не очищаю) ненавижу сайты, которые не позволяют копировать содержимое страницы в буфер обмена (потому что информация находится в изображениях, или (глупые) пытаются связать правой кнопкой мыши какое-то пользовательское событие Javascript.: )
Сложнее всего сайты, которые используют java-апплеты или flash , а апплет сам использует защищенные https- запросы . Но подумайте дважды - насколько счастливыми будут ваши пользователи iPhone ...;). Поэтому в настоящее время очень немногие сайты используют их. Я блокирую весь флэш-контент в моем браузере (в обычных сеансах просмотра) и никогда не использую сайты, которые зависят от Flash.
Ваши вехи могут быть ..., так что вы можете попробовать этот метод - просто помните - вы, вероятно, потеряете некоторых из ваших пользователей. Также помните, что некоторые SWF-файлы можно декомпилировать. ;)
Captcha (хорошие - например, reCaptcha) очень помогает - но ваши пользователи будут вас ненавидеть ... - просто представьте, как ваши пользователи будут любить вас, когда им нужно будет решить некоторые капчи на всех страницах с информацией о музыкальных исполнителях.
Вероятно, не нужно продолжать - вы уже попали в картину.
Теперь, что вы должны сделать:
Помните: почти невозможно скрыть ваши данные, если вы, с другой стороны, хотите опубликовать их (в удобной форме) для своих обычных пользователей.
Так,
Подумайте дважды, прежде чем пытаться использовать некоторые технические барьеры.
Вместо того, чтобы пытаться заблокировать майнеров данных, просто приложите больше усилий для удобства использования вашего сайта. Ваш пользователь будет любить вас. Время (и энергия), потраченное на технические барьеры, обычно не стоит - лучше потратить время, чтобы сделать сайт еще лучше ...
Кроме того, воры данных не похожи на обычных воров.
Если вы купите недорогую домашнюю сигнализацию и добавите предупреждение «этот дом подключен к полиции» - многие воры даже не попытаются взломать. Потому что один неверный шаг от него - и он собирается в тюрьму ...
Итак, вы вкладываете всего несколько баксов, а вор вкладывает много и рискуете.
Но вор данных не имеет таких рисков. наоборот - если вы сделаете один неверный шаг (например, если вы введете какую-то ошибку в результате технических барьеров), вы потеряете своих пользователей. Если робот-очиститель не будет работать в первый раз, ничего не произойдет - сборщик данных просто попробует другой подход и / или отладит скрипт.
В этом случае вам нужно инвестировать гораздо больше, а скребок - гораздо меньше.
Подумайте, куда вы хотите потратить свое время и энергию ...
Ps: английский не мой родной - так что прости мой сломанный английский ...
источник
С технической точки зрения: просто смоделируйте, что делает Google, когда вы нажимаете на них слишком много запросов одновременно. Это должно положить конец многим из этого.
С юридической точки зрения: похоже, данные, которые вы публикуете, не являются собственностью. Это означает, что вы публикуете имена, статистику и другую информацию, которая не может быть защищена авторским правом.
В этом случае скребки не нарушают авторские права, перераспределяя вашу информацию об имени исполнителя и т. Д. Однако они могут нарушать авторские права при загрузке вашего сайта в память, поскольку ваш сайт содержит элементы, защищенные авторским правом (например, макет и т. Д.).
Я рекомендую прочитать о Facebook v. Power.com и увидеть аргументы, которые Facebook использовал, чтобы остановить скриншот экрана. Есть много законных способов попытаться помешать кому-то соскрести ваш сайт. Они могут быть далеко идущими и творческими. Иногда суды покупают аргументы. Иногда они этого не делают.
Но, предполагая, что вы публикуете общедоступную информацию, которая не защищена авторским правом, как имена и базовые статистические данные ... вы просто должны оставить ее во имя свободы слова и открытых данных. То есть, что такое Интернет.
источник
Вещи, которые могут работать против начинающих скребков:
Вещи, которые помогут в целом:
Вещи, которые помогут, но заставят ваших пользователей ненавидеть вас:
источник
Я сделал много веб-скребков и суммировал некоторые методы, чтобы остановить веб-скребки в моем блоге, основываясь на том, что меня раздражает.
Это компромисс между вашими пользователями и скребками. Если вы ограничиваете IP-адреса, используете CAPTCHA, требуете входа в систему и т. Д., Вы становитесь трудными для скребков. Но это также может отогнать ваших настоящих пользователей.
источник
Ваш лучший вариант, к сожалению, довольно ручной: найдите шаблоны трафика, которые, по вашему мнению, указывают на очистку, и запретите их IP-адреса.
Поскольку вы говорите об общедоступном сайте, то создание дружественной поисковой системы сайта также сделает сайт более дружелюбным. Если поисковая система может сканировать и очищать ваш сайт, то и вредоносный скребок тоже может. Это тонкая грань, чтобы идти.
источник
Конечно, это возможно. Для 100% успеха переведите ваш сайт в автономный режим.
В действительности вы можете делать некоторые вещи, которые делают скребок немного сложнее. Google проверяет браузер, чтобы убедиться, что вы не робот, который просматривает результаты поиска (хотя это, как и все остальное, может быть подделано).
Вы можете делать такие вещи, как требовать несколько секунд между первым подключением к вашему сайту и последующими кликами. Я не уверен, какое будет идеальное время или как именно это сделать, но это другая идея.
Я уверен, что есть еще несколько человек, которые имеют гораздо больше опыта, но я надеюсь, что эти идеи, по крайней мере, несколько полезны.
источник
Есть несколько вещей, которые вы можете сделать, чтобы попытаться предотвратить соскоб экрана. Некоторые не очень эффективны, в то время как другие (CAPTCHA), но мешают удобству использования. Вы также должны помнить, что это может помешать законным скребкам сайта, таким как индексы поисковых систем.
Тем не менее, я предполагаю, что если вы не хотите, чтобы он был удален, это означает, что вы не хотите, чтобы поисковые системы тоже его индексировали.
Вот несколько вещей, которые вы можете попробовать:
Если бы мне пришлось это сделать, я бы, вероятно, использовал бы комбинацию трех последних, поскольку они сводят к минимуму неудобства для законных пользователей. Тем не менее, вы должны согласиться с тем, что вы не сможете блокировать всех таким образом, и как только кто-то поймет, как его обойти, он сможет его убрать навсегда. Тогда вы можете просто попытаться заблокировать их IP-адреса, когда обнаружите их.
источник
Это не тот ответ, который вам, вероятно, нужен, но зачем скрывать то, что вы пытаетесь обнародовать?
источник
Метод первый (только для небольших сайтов):
обслуживайте зашифрованные / закодированные данные.
Я просматривал веб-страницы, используя python (urllib, запросы, beautifulSoup и т. Д.), И обнаружил множество веб-сайтов, которые обслуживают зашифрованные / закодированные данные, которые невозможно расшифровать ни на одном языке программирования, просто потому, что метод шифрования не существует.
Я достиг этого на веб-сайте PHP, зашифровав и минимизировав выходные данные (ВНИМАНИЕ: для больших сайтов это не очень хорошая идея) в ответе всегда содержалось беспорядочное содержимое.
Пример минимизации вывода в PHP ( Как минимизировать вывод php страницы html? ):
Метод второй:
если вы не можете остановить их, используйте их в качестве фальшивых / бесполезных данных.
Метод третий:
заблокируйте обычные пользовательские агенты, которые вы просматриваете, вы увидите это на крупных / больших веб-сайтах, поскольку их невозможно обработать с помощью «python3.4» в качестве вашего User-Agent.
Метод четвертый:
Убедитесь, что все пользовательские заголовки действительны, иногда я предоставляю как можно больше заголовков, чтобы мой скребок выглядел как подлинный пользователь, некоторые из них даже не являются истинными или действительными, как en-FU :).
Вот список некоторых заголовков, которые я обычно предоставляю.
источник
Вместо того, чтобы заносить в черный список ботов, возможно, вам следует занести их в белый список. Если вы не хотите уничтожать результаты поиска по нескольким лучшим системам, вы можете внести в белый список их строки агента пользователя, которые обычно хорошо публикуются. Менее этичные боты имеют тенденцию подделывать строки пользовательских агентов популярных веб-браузеров. Лучшие поисковые системы должны занимать более 95% вашего трафика.
Идентификация самих ботов должна быть довольно простой, используя методы, предложенные другими авторами.
источник
Быстрый подход к этому будет установить ловушку / бот-ловушку.
Создайте страницу, которая, если она будет открыта определенное количество раз или даже открыта вообще, будет собирать определенную информацию, такую как IP-адрес и тому подобное (вы также можете учитывать нарушения или шаблоны, но эту страницу вообще не нужно открывать).
Сделайте ссылку на это на своей странице, которая скрыта с помощью отображения CSS: нет; или слева: -9999px; положение: абсолютный; старайтесь размещать его в местах, которые вряд ли будут игнорироваться, например, где находится ваш контент, а не нижний колонтитул, поскольку иногда боты могут забыть об определенных частях страницы.
В вашем файле robots.txt установите целую кучу запрещающих правил для страниц, которые не нужно, чтобы дружественные боты (как у них были счастливые лица!) Собирали информацию и устанавливали эту страницу как одну из них.
Теперь, если дружественный бот проходит, он должен игнорировать эту страницу. Да, но это все еще не достаточно хорошо. Сделайте еще пару этих страниц или перенаправьте страницу так, чтобы она принимала разные имена. а затем поместите больше правил запрета на эти страницы прерываний в файле robots.txt рядом со страницами, которые вы хотите игнорировать.
Соберите IP-адреса этих ботов или всех, кто заходит на эти страницы, не забаньте их, но сделайте функцию для отображения текста в вашем контенте, например, случайных чисел, уведомлений об авторских правах, определенных текстовых строк, отображения страшных картинок, в основном всего, что может помешать вашему хороший контент. Вы также можете установить ссылки, которые указывают на страницу, которая будет длиться вечно, т.е. в php вы можете использовать функцию sleep (). Это будет отбрасывать сканер обратно, если у него есть какое-то обнаружение для обхода страниц, загрузка которых занимает слишком много времени, так как некоторые хорошо написанные боты настроены на обработку X количества ссылок за раз.
Если вы сделали конкретные текстовые строки / предложения, почему бы не перейти к вашей любимой поисковой системе и искать их, это может показать вам, где заканчивается ваш контент.
В любом случае, если вы думаете тактически и творчески, это может быть хорошей отправной точкой. Лучше всего узнать, как работает бот.
Я бы также подумал о том, чтобы использовать некоторые идентификаторы или способ отображения атрибутов на элементе страницы:
это меняет свою форму каждый раз, так как некоторые боты могут быть настроены на поиск определенных шаблонов на ваших страницах или целевых элементов.
источник
Вы не можете остановить нормальную очистку экрана. Хорошо это или плохо, но такова природа сети.
Вы можете сделать так, чтобы никто не мог получить доступ к определенным вещам (включая музыкальные файлы), если они не зарегистрированы как зарегистрированный пользователь. Это не так сложно сделать в Apache . Я предполагаю, что это не будет слишком сложно сделать и в IIS.
источник
Одним из способов является предоставление содержимого в виде атрибутов XML, строк в кодировке URL, предварительно отформатированного текста с JSON в кодировке HTML или URI данных, а затем преобразование его в HTML на клиенте. Вот несколько сайтов, которые делают это:
Skechers : XML
Интернет-магазин Chrome : JSON
Новости Bing : URL данных
Protopage : URL-кодированные строки
TiddlyWiki : HTML-сущности + предварительно отформатированный JSON
Amazon : Ленивая загрузка
XMLCalabash : пространство имен XML + пользовательский тип MIME + пользовательское расширение файла
Если вы просматриваете источник по какому-либо из вышеперечисленных пунктов, вы увидите, что очистка просто вернет метаданные и навигацию.
источник
Большинство уже было сказано, но рассматривали ли вы защиту CloudFlare? Я имею в виду это:
Другие компании, вероятно, тоже делают это, CloudFlare - единственный, кого я знаю.
Я уверен, что это усложнит их работу. Я также однажды автоматически заблокировал IP на 4 месяца, когда попытался удалить данные сайта, защищенного CloudFlare, из-за ограничения скорости (я использовал простой цикл запросов AJAX).
источник
Я согласен с большинством постов, приведенных выше, и хочу добавить, что чем более дружественна поисковая система для вашего сайта, тем более она будет полезна. Вы можете попробовать сделать несколько вещей, которые очень усложняют скребки, но это также может повлиять на ваши поисковые возможности ... Конечно, это зависит от того, насколько хорошо вы хотите, чтобы ваш сайт занимал место в поисковых системах.
источник
Если вы поместите ваш контент за капчей, это будет означать, что роботам будет трудно получить доступ к вашему контенту. Однако люди будут испытывать неудобства, так что это может быть нежелательно.
источник
Если вы хотите увидеть отличный пример, посмотрите http://www.bkstr.com/ . Они используют алгоритм aj / s для установки файла cookie, затем перезагружает страницу, чтобы он мог использовать файл cookie для проверки того, что запрос выполняется в браузере. Настольное приложение, созданное для очистки, может определенно справиться с этим, но оно остановит большую часть операций типа cURL.
источник
Скребки экрана работают, обрабатывая HTML. И если они полны решимости получить ваши данные, технически вы мало что можете сделать, потому что человеческое глазное яблоко обрабатывает все что угодно. Юридически уже было указано, что вы можете прибегнуть к помощи, и это будет моей рекомендацией.
Однако вы можете скрыть важную часть ваших данных, используя логику представления не на основе HTML
Имейте в виду, что это, вероятно, повлияет на ваш поисковый рейтинг.
источник
Генерация HTML, CSS и JavaScript. Писать генераторы легче, чем парсеры, поэтому вы можете генерировать каждую обслуживаемую страницу по-разному. Вы больше не можете использовать кеш или статический контент.
источник