Как предотвратить соскоб сайта? [закрыто]

301

У меня довольно большой музыкальный сайт с большой базой артистов. Я заметил, что другие музыкальные сайты очищают данные нашего сайта (я тут и там ввожу фиктивные имена исполнителей, а затем ищу их в Google).

Как я могу предотвратить соскоб экрана? Это вообще возможно?

пиксель
источник
9
Рассматривали ли вы попытку обнаружить их скребок по IP или аналогичным (проверьте ваши журналы) и просто подделать ваши данные полностью для них? Таким образом, да, они будут «очищать» ваш сайт, но их «данные» будут бесполезны.
Лассе В. Карлсен
30
Перевернутый Lolcats и перевернутый / зашифрованный текст кто-нибудь?
Уэйн Вернер
2
Аналогичный вопрос stackoverflow.com/questions/2705394/...
user279521
2
@JonasCz это была ироничная шутка. Печально, но подобное предложение включено в ваш ответ, хотя и подвергнуто критике.
Томаш Зато - Восстановить Монику

Ответы:

325

Примечание. Поскольку полная версия этого ответа превышает ограничение длины 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-адреса сервисов

Иногда скребки будут запускаться из сервисов веб-хостинга, таких как 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-адресов, эти статьи будут доступны только с помощью поиска. характерная черта. Это означает, что сценарий, желающий получить все статьи с вашего сайта, должен будет выполнить поиск всех возможных фраз, которые могут появиться в ваших статьях, чтобы найти их все, что будет занимать много времени, ужасно неэффективно и, будем надеяться, сделает скребок сдался.

Это будет неэффективно, если:

  • Бот / скрипт не хочет / не нуждается в полном наборе данных в любом случае.
  • Ваши статьи обслуживаются с URL-адреса, который выглядит примерно так example.com/article.php?articleId=12345. Это (и подобные вещи), которые позволят скребкам просто перебирать все articleIds и запрашивать все статьи таким образом.
  • Есть и другие способы найти все статьи, например, написать скрипт для перехода по ссылкам внутри статей, которые ведут к другим статьям.
  • Поиск что-то вроде «и» или «the» может выявить почти все, так что об этом нужно знать. (Вы можете избежать этого, только вернув 10 или 20 результатов).
  • Вам нужны поисковые системы, чтобы найти ваш контент.

Не раскрывайте свои API, конечные точки и подобные вещи:

Убедитесь, что вы не выставляете какие-либо API, даже непреднамеренно. Например, если вы используете AJAX или сетевые запросы из Adobe Flash или Java-апплетов (не дай Бог!) Для загрузки ваших данных, тривиально просмотреть сетевые запросы со страницы и выяснить, куда направляются эти запросы, и затем перепроектировать и использовать эти конечные точки в скребковой программе. Убедитесь, что вы запутываете свои конечные точки и затрудняете их использование другими, как описано.

Для сдерживания HTML-парсеров и скребков:

Поскольку анализаторы HTML работают, извлекая контент из страниц на основе идентифицируемых шаблонов в HTML, мы можем преднамеренно изменить эти шаблоны в oder, чтобы сломать эти скребки или даже порвать их. Большинство из этих советов также применимы к другим скребкам, таким как пауки и скребки.

Часто меняйте свой HTML

Скреперы, которые обрабатывают HTML непосредственно, делают это, извлекая содержимое из определенных, идентифицируемых частей вашей HTML-страницы. Например: если все страницы на вашем сайте имеют divидентификатор article-contentс текстом статьи, то написать скрипт для посещения всех страниц статьи на вашем сайте и извлечь текст содержимого элемента article-contentdiv просто. на каждой странице статьи и вуаля, скребок имеет все статьи с вашего сайта в формате, который можно использовать в другом месте.

Если вы часто меняете HTML и структуру своих страниц, такие скребки больше не будут работать.

  • Вы можете часто изменять идентификаторы и классы элементов в своем HTML, возможно, даже автоматически. Так что, если ваш div.article-contentстановится чем-то похожим div.a4c36dda13eaf0и меняется каждую неделю, скребок сначала будет работать нормально, но через неделю сломается. Обязательно измените длину ваших идентификаторов / классов, в противном случае скребок будет использовать div.[any-14-characters]для поиска нужного элемента. Остерегайтесь других подобных отверстий тоже ..

  • Если нет никакого способа найти желаемый контент из разметки, скребок сделает это из структуры HTML. Таким образом, если все ваши страницы статьи похожи в том, что каждая из них divвнутри a, divкоторая идет после a, h1является содержимым статьи, скребки получат содержание статьи на основе этого. Опять же, чтобы сломать это, вы можете добавлять / удалять дополнительную разметку в вашем HTML, периодически и случайно, например. добавив дополнительные divs или spans. При современной обработке HTML на стороне сервера это не должно быть слишком сложным.

Что нужно знать:

  • Это будет утомительно и сложно реализовать, поддерживать и отлаживать.

  • Вы будете мешать кешированию. Особенно, если вы измените идентификаторы или классы ваших элементов HTML, это потребует соответствующих изменений в ваших файлах CSS и JavaScript, что означает, что каждый раз, когда вы их изменяете, они должны будут повторно загружаться браузером. Это приведет к увеличению времени загрузки страницы для повторных посетителей и увеличению нагрузки на сервер. Если вы меняете его только раз в неделю, это не будет большой проблемой.

  • Умные скребки все равно смогут получить ваш контент, сделав вывод, где находится фактический контент, например. зная, что большой отдельный блок текста на странице, вероятно, будет настоящей статьей. Это позволяет по-прежнему находить и извлекать нужные данные со страницы. Boilerpipe делает именно это.

По сути, убедитесь, что для сценария не так просто найти фактическое, желаемое содержание для каждой подобной страницы.

См. Также Как запретить сканерам, зависящим от XPath, получать содержимое страницы, чтобы узнать, как это можно реализовать в PHP.

Изменить ваш HTML в зависимости от местоположения пользователя

Это похоже на предыдущий совет. Если вы используете другой HTML-код в зависимости от местоположения / страны вашего пользователя (определяется по IP-адресу), это может привести к поломке скребков, которые доставляются пользователям. Например, если кто-то пишет мобильное приложение, которое собирает данные с вашего сайта, оно сначала будет работать нормально, но сломаться, когда оно будет фактически распространено среди пользователей, поскольку эти пользователи могут находиться в другой стране и, таким образом, получить другой HTML, который встроенный скребок не предназначен для потребления.

Часто меняйте свой HTML, активно этим пользуйтесь!

Пример: у вас есть функция поиска на вашем сайте, расположенная по адресу example.com/search?query=somesearchquery, которая возвращает следующий HTML:

<div class="search-result">
  <h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
  <p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
  <a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)

Как вы уже догадались, это легко очистить: все, что нужно сделать скребку - это нажать на URL-адрес поиска с помощью запроса и извлечь нужные данные из возвращенного HTML-кода. В дополнение к периодическому изменению HTML, как описано выше, вы также можете оставить старую разметку со старыми идентификаторами и классами, скрыть ее с помощью CSS и заполнить ее ложными данными, тем самым отравив скребок. Вот как можно изменить страницу результатов поиска:

<div class="the-real-search-result">
  <h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
  <p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
  <a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>

<div class="search-result" style="display:none">
  <h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
  <p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
  <a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)

Это будет означать, что скребки, написанные для извлечения данных из HTML на основе классов или идентификаторов, по-прежнему будут работать, но получат поддельные данные или даже рекламу, данные, которые реальные пользователи никогда не увидят, поскольку они скрыты с помощью CSS.

Винт со скребком: вставьте поддельные, невидимые данные honeypot на свою страницу

Добавив к предыдущему примеру, вы можете добавить невидимые элементы honeypot в ваш HTML, чтобы ловить скребки. Пример, который можно добавить на ранее описанную страницу результатов поиска:

<div class="search-result" style="display:none">
  <h3 class="search-result-title">This search result is here to prevent scraping</h3>
  <p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
  Note that clicking the link below will block access to this site for 24 hours.</p>
  <a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)

Скребок, написанный для получения всех результатов поиска, подберет его, как и любые другие, реальные результаты поиска на странице, и перейдет по ссылке в поисках нужного контента. Настоящий человек никогда даже не увидит его (из-за того, что он скрыт с помощью 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, вы можете показать капчу или просто заблокировать или ограничить доступ. (Или предоставьте поддельные данные, как описано выше, или что-то еще ..)

Подделывать банально, но в качестве меры против плохо написанных скребков это стоит реализовать.

Не принимать запросы, если пользовательский агент является обычным шабером; черные списки, используемые скребками

В некоторых случаях скребки будут использовать пользовательский агент, который не использует реальный браузер или поисковик, например:

  • «Мозилла» (только это, ничего больше. Я видел несколько вопросов о том, как использовать это здесь. Настоящий браузер никогда не будет использовать только это)
  • «Java 1.7.43_u43» (по умолчанию HttpUrlConnection в Java использует что-то вроде этого.)
  • "BIZCO EasyScraping Studio 2.0"
  • "wget", "curl", "libcurl", .. (Wget и cURL иногда используются для базового анализа)

Если вы обнаружите, что определенная строка 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.

  • Скреперы могут очищать другие скребки: если есть один веб-сайт, содержимое которого было соскоблено с вашего, другие скребки могут соскрести с сайта этого скребка.

Дальнейшее чтение:

JonasCz - Восстановить Монику
источник
11
Это привело меня сюда. Довольно впечатляющий ответ. Кроме того, довольно удивительная история пересмотра. Спасибо за пост. Вы получаете upvote. Не только из-за усилий, приложенных к этому, но потому что это полезно для меня.
DaveTheMinion
1
Отличный ответ! Вот несколько мыслей. 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также баланс между временем и сложностью программирования и финансовой выгодой.
Эрик Дж.
5
@JonH, если им интересно, они это прочтут. Кроме того, я разбил его на параграфы с заголовками и подзаголовками, чтобы люди могли отсканировать его и прочитать нужные им части. На самом деле есть довольно много похожих ответов на SO, и люди их читают.
JonasCz - Восстановить Монику
2
@JoshCrozier - я просто думаю, что сайты, подобные этому, не очень хорошо справляются с таким большим количеством информации. Я не говорю, что информация плохая.
июня
2
PS Моё стеганографическое снятие отпечатков пальцев с идеи содержания может быть использовано в суде. Представьте себе шок, когда вы докажете, что владелец ваших данных получил их от вас, благодаря уникальным характеристикам непосредственно в данных ...
ErikE
241

Я предполагаю, что вы настроили robots.txt.

Как уже упоминали другие, скребки могут подделать почти каждый аспект своей деятельности, и, вероятно, очень трудно определить запросы, поступающие от плохих парней.

Я хотел бы рассмотреть:

  1. Настройте страницу /jail.html.
  2. Запретить доступ к странице в robots.txt(так что уважительные пауки никогда не будут посещать).
  3. Поместите ссылку на одну из ваших страниц, скрывая ее с помощью CSS ( display: none).
  4. Запись IP-адресов посетителей /jail.html.

Это может помочь вам быстро идентифицировать запросы от скребков, которые грубо игнорируют ваши robots.txt.

Вы также можете сделать свой /jail.htmlцелый весь веб - сайт , который имеет то же самое, точное разметку как обычные страницы, но с данными поддельных ( /jail/album/63ajdka, /jail/track/3aads8и т.д.). Таким образом, плохие скребки не будут предупреждены о «необычном вводе», пока у вас не будет возможности полностью их заблокировать.

Даниэль Треббиен
источник
48
Я видел эту технику, которую раньше называли «приманкой». Этот метод также используется в фильтрации спама, когда вы размещаете адрес электронной почты на странице, но скрываете его или даете понять, что не разрешено отправлять законную почту. Затем соберите IP-адрес любого почтового сервера, который доставляет почту на этот адрес.
Томасруттер
12
Это предполагает, что они сканируют ссылки. Большинство скребков попытаются подчиниться какой-либо форме и очистить возвращенные данные.
Байрон Уитлок
9
Я видел основанные на Perl honeypots для электронной почты, в которых есть ссылки на другие «страницы», которые создаются сценарием Perl. Законные боты, которые читают robots.txt, не смотрят на это, и они скрыты от пользователей с помощью CSS, но скребки (или сборщики электронной почты) быстро попадают в дерево страниц бесконечной глубины, все с плохими данными на них. Поместите ссылку на скрипт прямо в начале каждой из ваших страниц.
Стивен П
18
Еще одна удивительная вещь, которую нужно бросить в медовые горшки - это тиргрубинг (или брезгливость). Это старая техника, которую я люблю - когда вы идентифицируете плохого парня, вы доводите его процесс рассылки спама до беспорядка, целенаправленно сохраняя его соединения открытыми как можно дольше, физически, не отключая их. Конечно, это может предупредить их, что вы тоже к ним относитесь, но черт возьми, это весело. ru.wikipedia.org/wiki/Teergrubing
womp
11
Единственная проблема с этим подходом заключается в том, что я размещаю [img] yoursite / jail.html [/ img] на популярном форуме. Вы получите тонны IP-адресов, зарегистрированных в вашей системе, и вам будет сложно определить, какой из них плохой. Если вы хотите предотвратить подобные вещи, вам нужно добавить токен, связанный с IP, в URL. Что-то вроде jail.php? T = hoeyvm, и в базе данных у вас есть связь hoeyvm и IP-адреса, который запросил страницу.
HoLyVieR
48

Сью их.

Серьезно: Если у вас есть немного денег, поговорите с хорошим, милым, молодым юристом, который знает, как обходить Интернет. Вы действительно могли бы сделать что-то здесь. В зависимости от того, где находятся сайты, вы можете попросить адвоката написать прекращение и отказ от прав или его эквивалент в вашей стране. Вы можете хотя бы напугать ублюдков.

Документируйте вставку ваших фиктивных значений. Введите фиктивные значения, которые явно (но неясно) указывают на вас. Я думаю, что это обычная практика для компаний, занимающихся телефонными книгами, и здесь, в Германии, я думаю, что было несколько случаев, когда подражатели были разбиты поддельными записями, которые они копировали 1: 1.

Было бы обидно , если это будет водить вас в портя свой HTML код, увлекая вниз SEO, срок действия и другие вещи (даже если система шаблонов , которая использует несколько иную структуру HTML на каждом запросе на идентичные страницы уже могут помочь много против скребки, которые всегда используют структуры HTML и имена классов / идентификаторов для вывода контента.)

Случаи как это - то, для чего хороши законы об авторском праве. Срывать честную работу других людей, чтобы зарабатывать деньги, это то, с чем вы должны быть в состоянии бороться.

Уникрон
источник
9
работает только в странах с солидной правовой базой.
TomL
3
Адвокаты процветают в конфликте - и получают от этого прибыль. В редких случаях адвокат советует вам не обращаться в суд. Любой, кто скажет вам, что победа и поражение не имеет ничего общего с прекрасными понятиями «справедливости», кроме аргументов, настроений и предубеждений в тот день. Помните, что если что-то пойдет не так, вы можете нести ответственность не только за расходы вашего адвоката, но и других сторон, а также, если они решат встречный иск - хорошо. Вы можете легко потерять свой дом и любые другие активы в вашей жизни. Не азартная игра, я бы предложил. Я рекомендую вам избегать судов любой ценой.
Фрэнки
3
Я согласен с @TomL. Если они на Западе, это несколько правдоподобно. Но если они находятся в Индии / Китае / России / Украине / где бы то ни было - тогда, серьезно, минимум, нет шансов. Я могу сказать о российских судах: они даже не потрудятся работать с вашими исками.
Highstaker
35

Вы действительно ничего не можете сделать, чтобы полностью предотвратить это. Скребки могут подделать свой пользовательский агент, использовать несколько IP-адресов и т. Д. И выглядеть как обычный пользователь. Единственное, что вы можете сделать, это сделать текст недоступным во время загрузки страницы - сделать это с помощью изображения, flash или загрузить его с помощью JavaScript. Тем не менее, первые два являются плохими идеями, а последний будет проблемой доступности, если JavaScript не включен для некоторых из ваших постоянных пользователей.

Если они абсолютно бьют по вашему сайту и перелистывают все ваши страницы, вы можете сделать какое-то ограничение скорости.

Хотя есть надежда. Скреперы полагаются на данные вашего сайта в едином формате. Если бы вы могли как-то рандомизировать это, это могло бы сломать их скребок. Такие вещи, как изменение идентификатора или имени класса элементов страницы при каждой загрузке и т. Д. Но это большая работа, и я не уверен, стоит ли это того. И даже тогда они могли бы обойти это с достаточной самоотдачей.

ryeguy
источник
14
Создание системы, которая ограничивает количество страниц, которые IP-адрес может просматривать в минуту, является хорошим подспорьем, поскольку скребки экрана будут проходить по сайту намного быстрее, чем любой обычный человек.
TravisO
Согласовано. IP-адреса стоят денег и ограничены большинством хостинговых компаний.
Тал Вайс
re: «Такие вещи, как изменение идентификатора или имени класса элементов страницы при каждой загрузке и т. д.» Это не так уж плохо, если вы создаете имя класса с помощью PHP, а затем просто используете <div class = "<? Php echo $ myPHPGeneratedClassName;?>">, Вы можете даже использовать случайные строки в нем, чтобы сделать его полностью уникальным. Все, что мешает им находить шаблоны, усложняет анализ DOM.
царапает
Нетрудно найти IP. Есть много прокси, друзей компьютеров, рабочих компьютеров, школьных компьютеров, библиотечных компьютеров ...
Инкогнито
@ user257493: Да, но мы говорим о ком-то, кто собирает данные здесь. Скорее всего , они не собираются идти к этому особых усилий только для сбора урожая данных. И если они это сделают, вы в конечном итоге истощите их количество IP-адресов.
Rygguy
31

Предоставить XML API для доступа к вашим данным; таким образом, который прост в использовании. Если люди хотят получить ваши данные, они получат их, вы также можете сделать все возможное.

Таким образом, вы можете эффективно предоставлять подмножество функций, гарантируя, что, по крайней мере, скребки не будут поглощать HTTP-запросы и огромные объемы полосы пропускания.

Тогда все, что вам нужно сделать, это убедить людей, которые хотят, чтобы ваши данные использовали API. ;)

Виллихам Тотланд
источник
3
Это кажется очень разумным. Соскребание экрана чертовски сложно предотвратить, и если вы предоставите API, вы можете наложить на него некоторые ограничения, добавить уведомления («Содержимое от ----.com») и в основном контролировать, какие данные передаются.
Alecwh
6
@alecwh: и плата за доступ!
Андре Карон
3
Я наградил вас за вознаграждение, отчасти потому, что в Интернете было бы намного лучше, если бы каждый веб-сайт делал это. Будем надеяться, что это станет более распространенным.
JonasCz - Восстановить Монику
1
Как только вы заставите их зарегистрироваться на сервис, они вернутся на обычный сайт
mplungjan
Я один такой человек на противоположной стороне этого разговора. Я строю модели для бродвейских шоу, и мне приходится скрести все свои данные, а не аккуратно обращаться к ним.
Яаков Бресслер
22

Извините, это действительно довольно сложно сделать ...

Я хотел бы предложить вам вежливо попросить их не использовать ваш контент (если ваш контент защищен авторским правом).

Если это так, и они не откажутся от этого, тогда вы можете предпринять дальнейшие действия и отправить им письмо о прекращении и воздержании .

Как правило, все, что вы делаете для предотвращения соскабливания, может иметь более отрицательный эффект, например, доступность, боты / пауки и т. Д.

ящерица
источник
12

Хорошо, как и во всех сообщениях, если вы хотите, чтобы поисковая система была дружественной к поисковым системам, тогда боты могут поцарапаться.

Но вы все еще можете сделать несколько вещей, и это может быть эффективно для 60-70% -ых очищающих ботов.

Сделайте скрипт проверки, как показано ниже.

Если определенный IP-адрес посещается очень быстро, то после нескольких посещений (5-10) поместите его IP-адрес + информацию о браузере в файл или базу данных.

Следующий шаг

(Это будет фоновый процесс, который будет выполняться все время или по расписанию через несколько минут.) Создайте еще один скрипт, который будет продолжать проверять эти подозрительные IP-адреса.

Случай 1. Если пользовательский агент относится к известным поисковым системам, таким как Google, Bing , Yahoo (вы можете найти более подробную информацию о пользовательских агентах, прибегая к помощи Google). Тогда вы должны увидеть http://www.iplists.com/ . В этом списке и попробуйте сопоставить закономерности. И если это похоже на фальшивый пользовательский агент, попросите заполнить капчу при следующем посещении. (Вам нужно немного больше изучить IP-адреса ботов. Я знаю, что это достижимо, а также попробуйте использовать Whois этого IP-адреса. Это может быть полезно.)

Случай 2. Нет пользовательского агента поискового бота: просто попросите заполнить капчу при следующем посещении.

Arshdeep
источник
+1 Использование iplists.com - отличная идея
Даниэль Треббиен
10

Поздний ответ - а также этот ответ, вероятно, не тот, который вы хотите услышать ...

Я уже написал много (много десятков) различных специализированных скребков для сбора данных. (только потому, что мне нравится философия «открытых данных»).

Вот уже много советов в других ответах - теперь я буду играть роль адвоката дьявола и буду расширять и / или исправлять их эффективность.

Первый:

  • если кто-то действительно хочет ваши данные
  • Вы не можете эффективно (технически) скрыть свои данные
  • если данные должны быть общедоступными для ваших "обычных пользователей"

Попытки использовать некоторые технические барьеры не стоят проблем, вызванных:

  • для ваших постоянных пользователей, ухудшая их пользовательский опыт
  • обычным и желанным ботам (поисковым системам)
  • и т.д...

Простой HMTL - самый простой способ - это анализ простых HTML-страниц с четко определенной структурой и классами CSS. Например, достаточно проверить элемент с помощью Firebug и использовать правильные пути Xpath и / или CSS в моем скребке.

Вы можете генерировать структуру HTML динамически, а также вы можете динамически генерировать имена классов CSS (и сам CSS тоже) (например, используя некоторые случайные имена классов) - но

  • Вы хотите представить информацию своим постоянным пользователям в согласованном порядке
  • например, еще раз - достаточно еще раз проанализировать структуру страницы, чтобы настроить скребок.
  • и это можно сделать автоматически, проанализировав некоторый «уже известный контент»
    • как только кто-то уже знает (по более ранней версии), например:
    • что содержит информацию о "Фил Коллинз"
    • достаточно отобразить страницу «phil collins» и (автоматически) проанализировать, как устроена страница «сегодня» :)

Вы не можете изменить структуру для каждого ответа, потому что ваши обычные пользователи будут ненавидеть вас. Кроме того, это вызовет больше проблем для вас (техническое обслуживание), а не для скребка. Путь XPath или CSS определяется скриптом очистки автоматически из известного содержимого.

Ajax - немного сложнее в начале, но во много раз ускоряет процесс очистки :) - почему?

При анализе запросов и ответов я просто настраиваю свой собственный прокси-сервер (написанный на Perl), и мой Firefox использует его. Конечно, потому что это мой собственный прокси - он полностью скрыт - целевой сервер видит его как обычный браузер. (Итак, нет X-Forwarded-for и таких заголовков). Основываясь на журналах прокси, в основном можно определить «логику» запросов ajax, например, я могу пропустить большую часть html-скрапинга и просто использовать хорошо структурированные ответы ajax (в основном в формате JSON).

Итак, Аякс не очень помогает ...

Некоторыми более сложными являются страницы, которые используют много упакованных функций JavaScript .

Здесь можно использовать два основных метода:

  • распакуйте и поймите JS и создайте скребок, который следует логике Javascript (трудный путь)
  • или (желательно используя сам) - просто используйте Mozilla с Mozrepl для очистки. Например, настоящий анализ выполняется в полнофункциональном браузере с поддержкой javascript, который запрограммирован на щелчок по нужным элементам и просто захват «декодированных» ответов прямо из окна браузера.

Такая очистка выполняется медленно (очистка выполняется как в обычном браузере), но это

  • очень прост в настройке и использовании
  • и это почти невозможно противостоять :)
  • и «медлительность» необходима в любом случае для противодействия «блокированию быстрых запросов на основе одного IP»

User-Agent фильтрации на основе не помогает вообще. Любой серьезный data-майнер установит его в свой скребок.

Требовать логин - не помогает. Простейший способ победить (без анализа и / или написания сценария входа в систему) - это просто войти на сайт как обычный пользователь, используя Mozilla, и просто запустить скребок на основе Mozrepl ...

Помните, что обязательный вход в систему помогает анонимным ботам, но не помогает против тех, кто хочет очистить ваши данные. Он просто регистрируется на вашем сайте в качестве обычного пользователя.

Использование фреймов также не очень эффективно. Это используется многими сервисами живого кино, и это не очень трудно победить. Фреймы - это просто еще одна страница HTML / Javascript, необходимая для анализа ... Если данные стоят хлопот - майнер данных проведет необходимый анализ.

Ограничение на основе IP вообще неэффективно - здесь слишком много общедоступных прокси-серверов, а также TOR ... :) Это не замедляет очистку (для тех, кто действительно хочет получить ваши данные).

Очень тяжело скрести данные, скрытые в изображениях. (например, простое преобразование данных в изображения на стороне сервера). Использование «тессеракта» (OCR) помогает много раз - но, честно говоря, - данные должны стоить хлопот скребку. (что много раз не стоит).

С другой стороны, ваши пользователи будут ненавидеть вас за это. Я сам (даже если не очищаю) ненавижу сайты, которые не позволяют копировать содержимое страницы в буфер обмена (потому что информация находится в изображениях, или (глупые) пытаются связать правой кнопкой мыши какое-то пользовательское событие Javascript.: )

Сложнее всего сайты, которые используют java-апплеты или flash , а апплет сам использует защищенные https- запросы . Но подумайте дважды - насколько счастливыми будут ваши пользователи iPhone ...;). Поэтому в настоящее время очень немногие сайты используют их. Я блокирую весь флэш-контент в моем браузере (в обычных сеансах просмотра) и никогда не использую сайты, которые зависят от Flash.

Ваши вехи могут быть ..., так что вы можете попробовать этот метод - просто помните - вы, вероятно, потеряете некоторых из ваших пользователей. Также помните, что некоторые SWF-файлы можно декомпилировать. ;)

Captcha (хорошие - например, reCaptcha) очень помогает - но ваши пользователи будут вас ненавидеть ... - просто представьте, как ваши пользователи будут любить вас, когда им нужно будет решить некоторые капчи на всех страницах с информацией о музыкальных исполнителях.

Вероятно, не нужно продолжать - вы уже попали в картину.

Теперь, что вы должны сделать:

Помните: почти невозможно скрыть ваши данные, если вы, с другой стороны, хотите опубликовать их (в удобной форме) для своих обычных пользователей.

Так,

  • сделать ваши данные легко доступными - с помощью некоторого API
    • это позволяет легкий доступ к данным
    • например, снять нагрузку с сервера - хорошо для вас
  • установить правильные права использования (например, должен ссылаться на источник)
  • помните, что многие данные не защищены авторским правом и их сложно защитить
  • добавить поддельные данные (как вы уже сделали) и использовать легальные инструменты
    • как уже говорили другие, пошлите «письмо о прекращении и воздержании»
    • другие юридические действия (подать в суд и т. п.), вероятно, слишком дороги и их трудно выиграть (особенно против неамериканских сайтов)

Подумайте дважды, прежде чем пытаться использовать некоторые технические барьеры.

Вместо того, чтобы пытаться заблокировать майнеров данных, просто приложите больше усилий для удобства использования вашего сайта. Ваш пользователь будет любить вас. Время (и энергия), потраченное на технические барьеры, обычно не стоит - лучше потратить время, чтобы сделать сайт еще лучше ...

Кроме того, воры данных не похожи на обычных воров.

Если вы купите недорогую домашнюю сигнализацию и добавите предупреждение «этот дом подключен к полиции» - многие воры даже не попытаются взломать. Потому что один неверный шаг от него - и он собирается в тюрьму ...

Итак, вы вкладываете всего несколько баксов, а вор вкладывает много и рискуете.

Но вор данных не имеет таких рисков. наоборот - если вы сделаете один неверный шаг (например, если вы введете какую-то ошибку в результате технических барьеров), вы потеряете своих пользователей. Если робот-очиститель не будет работать в первый раз, ничего не произойдет - сборщик данных просто попробует другой подход и / или отладит скрипт.

В этом случае вам нужно инвестировать гораздо больше, а скребок - гораздо меньше.

Подумайте, куда вы хотите потратить свое время и энергию ...

Ps: английский не мой родной - так что прости мой сломанный английский ...

jm666
источник
@Parapluie Вы действительно должны прочитать о бесплатном контенте и / или о модели с открытым исходным кодом - о датах, истории, целях и этике. И особенно об открытых данных - для которых я создал большинство своих скребков ...
jm666
Я понимаю концепцию, хотя я благодарю вас за ваши рекомендации эрудита. У нас мог бы быть интересный разговор об этом; но, кажется, мой оригинальный комментарий был удален третьей стороной. И так, мы действительно свободны в конце концов?
Parapluie
8

С технической точки зрения: просто смоделируйте, что делает Google, когда вы нажимаете на них слишком много запросов одновременно. Это должно положить конец многим из этого.

С юридической точки зрения: похоже, данные, которые вы публикуете, не являются собственностью. Это означает, что вы публикуете имена, статистику и другую информацию, которая не может быть защищена авторским правом.

В этом случае скребки не нарушают авторские права, перераспределяя вашу информацию об имени исполнителя и т. Д. Однако они могут нарушать авторские права при загрузке вашего сайта в память, поскольку ваш сайт содержит элементы, защищенные авторским правом (например, макет и т. Д.).

Я рекомендую прочитать о Facebook v. Power.com и увидеть аргументы, которые Facebook использовал, чтобы остановить скриншот экрана. Есть много законных способов попытаться помешать кому-то соскрести ваш сайт. Они могут быть далеко идущими и творческими. Иногда суды покупают аргументы. Иногда они этого не делают.

Но, предполагая, что вы публикуете общедоступную информацию, которая не защищена авторским правом, как имена и базовые статистические данные ... вы просто должны оставить ее во имя свободы слова и открытых данных. То есть, что такое Интернет.

dengeltrees
источник
1
Даже если вы не сможете защитить авторские права на информацию, вы определенно можете запретить ее использование в условиях использования. Затем отправьте письмо о прекращении и отказе от ответственности за нарушение условий использования.
Андре Карон
1
Свобода слова и открытые данные - это действительно дух Интернета!
Ciara
Да, свобода слова и все такое. Но скребки вполне могут тратить значительную часть бюджета ОП или полосы пропускания, а также копировать неопубликованные данные.
jpaugh
8

Вещи, которые могут работать против начинающих скребков:

  • Блокировка IP
  • использовать много AJAX
  • проверить заголовок запроса реферера
  • требуется логин

Вещи, которые помогут в целом:

  • меняйте свой макет каждую неделю
  • robots.txt

Вещи, которые помогут, но заставят ваших пользователей ненавидеть вас:

  • CAPTCHA,
pguardiario
источник
8

Я сделал много веб-скребков и суммировал некоторые методы, чтобы остановить веб-скребки в моем блоге, основываясь на том, что меня раздражает.

Это компромисс между вашими пользователями и скребками. Если вы ограничиваете IP-адреса, используете CAPTCHA, требуете входа в систему и т. Д., Вы становитесь трудными для скребков. Но это также может отогнать ваших настоящих пользователей.

hoju
источник
8

Ваш лучший вариант, к сожалению, довольно ручной: найдите шаблоны трафика, которые, по вашему мнению, указывают на очистку, и запретите их IP-адреса.

Поскольку вы говорите об общедоступном сайте, то создание дружественной поисковой системы сайта также сделает сайт более дружелюбным. Если поисковая система может сканировать и очищать ваш сайт, то и вредоносный скребок тоже может. Это тонкая грань, чтобы идти.

STW
источник
4
Блокировка IP замедлит работу скребка, но это также много работы для вашего сервера. Допустим, я очищаю вас от 1000 прокси, у меня все еще есть данные, которые я хочу, и теперь ваш брандмауэр в беспорядке.
pguardiario
1
Когда вы это сделаете, они повернутся к вам горизонтально. 100000 адресов сегодня ничего не стоят для них, но замедляют работу вашего сайта, если вы попытаетесь заблокировать их все - и они будут поворачивать IP-адреса, чтобы не посещать их более одного или двух раз
mplungjan
6

Конечно, это возможно. Для 100% успеха переведите ваш сайт в автономный режим.

В действительности вы можете делать некоторые вещи, которые делают скребок немного сложнее. Google проверяет браузер, чтобы убедиться, что вы не робот, который просматривает результаты поиска (хотя это, как и все остальное, может быть подделано).

Вы можете делать такие вещи, как требовать несколько секунд между первым подключением к вашему сайту и последующими кликами. Я не уверен, какое будет идеальное время или как именно это сделать, но это другая идея.

Я уверен, что есть еще несколько человек, которые имеют гораздо больше опыта, но я надеюсь, что эти идеи, по крайней мере, несколько полезны.

Уэйн Вернер
источник
6

Есть несколько вещей, которые вы можете сделать, чтобы попытаться предотвратить соскоб экрана. Некоторые не очень эффективны, в то время как другие (CAPTCHA), но мешают удобству использования. Вы также должны помнить, что это может помешать законным скребкам сайта, таким как индексы поисковых систем.

Тем не менее, я предполагаю, что если вы не хотите, чтобы он был удален, это означает, что вы не хотите, чтобы поисковые системы тоже его индексировали.

Вот несколько вещей, которые вы можете попробовать:

  • Показать текст на изображении. Это достаточно надежно и менее болезненно для пользователя, чем CAPTCHA, но означает, что они не смогут вырезать и вставлять, и оно не будет красиво масштабироваться или быть доступным.
  • Используйте CAPTCHA и потребуйте, чтобы она была заполнена до возврата на страницу. Это надежный метод, но он также является самой большой болью для пользователя.
  • Требуйте, чтобы пользователь зарегистрировал учетную запись перед просмотром страниц, и подтвердите свой адрес электронной почты. Это будет довольно эффективно, но не полностью - скребок экрана может создать учетную запись и может хитро запрограммировать свой сценарий для входа в них.
  • Если строка user-agent клиента пуста, заблокируйте доступ. Скрипт очистки сайта часто будет запрограммирован лениво и не будет устанавливать строку пользовательского агента, в отличие от всех веб-браузеров.
  • Вы можете настроить черный список известных строк пользовательского агента скребка экрана по мере их обнаружения. Опять же, это поможет только лениво закодированным; программист, который знает, что он делает, может установить строку пользовательского агента для олицетворения веб-браузера.
  • Часто меняйте путь URL. Когда вы его измените, убедитесь, что старый продолжает работать, но только до тех пор, пока один пользователь может открыть свой браузер. Трудно предсказать, каким будет новый URL-путь. Это затруднит захват скриптами скриптов, если их URL жестко запрограммирован. Было бы лучше сделать это с помощью какого-то сценария.

Если бы мне пришлось это сделать, я бы, вероятно, использовал бы комбинацию трех последних, поскольку они сводят к минимуму неудобства для законных пользователей. Тем не менее, вы должны согласиться с тем, что вы не сможете блокировать всех таким образом, и как только кто-то поймет, как его обойти, он сможет его убрать навсегда. Тогда вы можете просто попытаться заблокировать их IP-адреса, когда обнаружите их.

thomasrutter
источник
6
  1. Нет, остановить невозможно (никак)
  2. Прими это. Почему бы не опубликовать как RDFa и не стать супер дружественным для поисковых систем и не поощрять повторное использование данных? Люди будут благодарить вас и предоставлять кредит в случае необходимости (см. Например, musicbrainz).

Это не тот ответ, который вам, вероятно, нужен, но зачем скрывать то, что вы пытаетесь обнародовать?

Натан
источник
5

Метод первый (только для небольших сайтов):
обслуживайте зашифрованные / закодированные данные.
Я просматривал веб-страницы, используя python (urllib, запросы, beautifulSoup и т. Д.), И обнаружил множество веб-сайтов, которые обслуживают зашифрованные / закодированные данные, которые невозможно расшифровать ни на одном языке программирования, просто потому, что метод шифрования не существует.

Я достиг этого на веб-сайте PHP, зашифровав и минимизировав выходные данные (ВНИМАНИЕ: для больших сайтов это не очень хорошая идея) в ответе всегда содержалось беспорядочное содержимое.

Пример минимизации вывода в PHP ( Как минимизировать вывод php страницы html? ):

<?php
  function sanitize_output($buffer) {
    $search = array(
      '/\>[^\S ]+/s', // strip whitespaces after tags, except space
      '/[^\S ]+\</s', // strip whitespaces before tags, except space
      '/(\s)+/s'      // shorten multiple whitespace sequences
    );
    $replace = array('>', '<', '\\1');
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
  }
  ob_start("sanitize_output");
?>

Метод второй:
если вы не можете остановить их, используйте их в качестве фальшивых / бесполезных данных.

Метод третий:
заблокируйте обычные пользовательские агенты, которые вы просматриваете, вы увидите это на крупных / больших веб-сайтах, поскольку их невозможно обработать с помощью «python3.4» в качестве вашего User-Agent.

Метод четвертый:
Убедитесь, что все пользовательские заголовки действительны, иногда я предоставляю как можно больше заголовков, чтобы мой скребок выглядел как подлинный пользователь, некоторые из них даже не являются истинными или действительными, как en-FU :).
Вот список некоторых заголовков, которые я обычно предоставляю.

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}
Сообщество
источник
2

Вместо того, чтобы заносить в черный список ботов, возможно, вам следует занести их в белый список. Если вы не хотите уничтожать результаты поиска по нескольким лучшим системам, вы можете внести в белый список их строки агента пользователя, которые обычно хорошо публикуются. Менее этичные боты имеют тенденцию подделывать строки пользовательских агентов популярных веб-браузеров. Лучшие поисковые системы должны занимать более 95% вашего трафика.

Идентификация самих ботов должна быть довольно простой, используя методы, предложенные другими авторами.

Крис
источник
2

Быстрый подход к этому будет установить ловушку / бот-ловушку.

  1. Создайте страницу, которая, если она будет открыта определенное количество раз или даже открыта вообще, будет собирать определенную информацию, такую ​​как IP-адрес и тому подобное (вы также можете учитывать нарушения или шаблоны, но эту страницу вообще не нужно открывать).

  2. Сделайте ссылку на это на своей странице, которая скрыта с помощью отображения CSS: нет; или слева: -9999px; положение: абсолютный; старайтесь размещать его в местах, которые вряд ли будут игнорироваться, например, где находится ваш контент, а не нижний колонтитул, поскольку иногда боты могут забыть об определенных частях страницы.

  3. В вашем файле robots.txt установите целую кучу запрещающих правил для страниц, которые не нужно, чтобы дружественные боты (как у них были счастливые лица!) Собирали информацию и устанавливали эту страницу как одну из них.

  4. Теперь, если дружественный бот проходит, он должен игнорировать эту страницу. Да, но это все еще не достаточно хорошо. Сделайте еще пару этих страниц или перенаправьте страницу так, чтобы она принимала разные имена. а затем поместите больше правил запрета на эти страницы прерываний в файле robots.txt рядом со страницами, которые вы хотите игнорировать.

  5. Соберите IP-адреса этих ботов или всех, кто заходит на эти страницы, не забаньте их, но сделайте функцию для отображения текста в вашем контенте, например, случайных чисел, уведомлений об авторских правах, определенных текстовых строк, отображения страшных картинок, в основном всего, что может помешать вашему хороший контент. Вы также можете установить ссылки, которые указывают на страницу, которая будет длиться вечно, т.е. в php вы можете использовать функцию sleep (). Это будет отбрасывать сканер обратно, если у него есть какое-то обнаружение для обхода страниц, загрузка которых занимает слишком много времени, так как некоторые хорошо написанные боты настроены на обработку X количества ссылок за раз.

  6. Если вы сделали конкретные текстовые строки / предложения, почему бы не перейти к вашей любимой поисковой системе и искать их, это может показать вам, где заканчивается ваш контент.

В любом случае, если вы думаете тактически и творчески, это может быть хорошей отправной точкой. Лучше всего узнать, как работает бот.

Я бы также подумал о том, чтобы использовать некоторые идентификаторы или способ отображения атрибутов на элементе страницы:

<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle"> 

это меняет свою форму каждый раз, так как некоторые боты могут быть настроены на поиск определенных шаблонов на ваших страницах или целевых элементов.

<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass"> 

id="p-12802" > id="p-00392"
Стив Чан
источник
1
Ты не просто хочешь их забанить, ты хочешь полностью с ними связаться ... Я ЛЮБЛЮ ЭТО!
Зойдберг
Стелс-запрет - это именно то, о чем я думал (он же теневой бан, адский бан).
ErikE
1

Вы не можете остановить нормальную очистку экрана. Хорошо это или плохо, но такова природа сети.

Вы можете сделать так, чтобы никто не мог получить доступ к определенным вещам (включая музыкальные файлы), если они не зарегистрированы как зарегистрированный пользователь. Это не так сложно сделать в Apache . Я предполагаю, что это не будет слишком сложно сделать и в IIS.

Дина
источник
1

Одним из способов является предоставление содержимого в виде атрибутов XML, строк в кодировке URL, предварительно отформатированного текста с JSON в кодировке HTML или URI данных, а затем преобразование его в HTML на клиенте. Вот несколько сайтов, которые делают это:

  • Skechers : XML

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
  • Интернет-магазин Chrome : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
  • Новости Bing : URL данных

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
  • Protopage : URL-кодированные строки

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : HTML-сущности + предварительно отформатированный JSON

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Amazon : Ленивая загрузка

    amzn.copilot.jQuery=i;amzn.copilot.jQuery(document).ready(function(){d(b);f(c,function() {amzn.copilot.setup({serviceEndPoint:h.vipUrl,isContinuedSession:true})})})},f=function(i,h){var j=document.createElement("script");j.type="text/javascript";j.src=i;j.async=true;j.onload=h;a.appendChild(j)},d=function(h){var i=document.createElement("link");i.type="text/css";i.rel="stylesheet";i.href=h;a.appendChild(i)}})();
    amzn.copilot.checkCoPilotSession({jsUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-js/cs-copilot-customer-js-min-1875890922._V1_.js', cssUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-css/cs-copilot-customer-css-min-2367001420._V1_.css', vipUrl : 'https://copilot.amazon.com'
  • XMLCalabash : пространство имен XML + пользовательский тип MIME + пользовательское расширение файла

       <p:declare-step type="pxp:zip">
            <p:input port="source" sequence="true" primary="true"/>
            <p:input port="manifest"/>
            <p:output port="result"/>
            <p:option name="href" required="true" cx:type="xsd:anyURI"/>
            <p:option name="compression-method" cx:type="stored|deflated"/>
            <p:option name="compression-level" cx:type="smallest|fastest|default|huffman|none"/>
            <p:option name="command" select="'update'" cx:type="update|freshen|create|delete"/>
       </p:declare-step>

Если вы просматриваете источник по какому-либо из вышеперечисленных пунктов, вы увидите, что очистка просто вернет метаданные и навигацию.

Пол Свитт
источник
Итак ... такой подход делает очистку еще проще, поскольку контент теперь имеет единый формат. Фактически, это больше не будет называться очисткой : это называется анализом , и его действительно очень легко сделать программно.
jpaugh
1

Большинство уже было сказано, но рассматривали ли вы защиту CloudFlare? Я имею в виду это:

Описание изображения

Другие компании, вероятно, тоже делают это, CloudFlare - единственный, кого я знаю.

Я уверен, что это усложнит их работу. Я также однажды автоматически заблокировал IP на 4 месяца, когда попытался удалить данные сайта, защищенного CloudFlare, из-за ограничения скорости (я использовал простой цикл запросов AJAX).

Томаш Зато - Восстановить Монику
источник
1

Я согласен с большинством постов, приведенных выше, и хочу добавить, что чем более дружественна поисковая система для вашего сайта, тем более она будет полезна. Вы можете попробовать сделать несколько вещей, которые очень усложняют скребки, но это также может повлиять на ваши поисковые возможности ... Конечно, это зависит от того, насколько хорошо вы хотите, чтобы ваш сайт занимал место в поисковых системах.

sjobe
источник
0

Если вы поместите ваш контент за капчей, это будет означать, что роботам будет трудно получить доступ к вашему контенту. Однако люди будут испытывать неудобства, так что это может быть нежелательно.

SorcyCat
источник
0

Если вы хотите увидеть отличный пример, посмотрите http://www.bkstr.com/ . Они используют алгоритм aj / s для установки файла cookie, затем перезагружает страницу, чтобы он мог использовать файл cookie для проверки того, что запрос выполняется в браузере. Настольное приложение, созданное для очистки, может определенно справиться с этим, но оно остановит большую часть операций типа cURL.

blacktie24
источник
0

Скребки экрана работают, обрабатывая HTML. И если они полны решимости получить ваши данные, технически вы мало что можете сделать, потому что человеческое глазное яблоко обрабатывает все что угодно. Юридически уже было указано, что вы можете прибегнуть к помощи, и это будет моей рекомендацией.

Однако вы можете скрыть важную часть ваших данных, используя логику представления не на основе HTML

  • Создать файл Flash для каждого исполнителя / альбома и т. Д.
  • Создать изображение для каждого исполнителя контента. Может быть, просто изображение для имени художника и т. Д. Будет достаточно. Сделайте это путем рендеринга текста в файл JPEG / PNG на сервере и ссылки на это изображение.

Имейте в виду, что это, вероятно, повлияет на ваш поисковый рейтинг.

Джеймс Вестгейт
источник
0

Генерация HTML, CSS и JavaScript. Писать генераторы легче, чем парсеры, поэтому вы можете генерировать каждую обслуживаемую страницу по-разному. Вы больше не можете использовать кеш или статический контент.

Стефан Эггермонт
источник