Как предотвратить соскоб сайта?
У меня довольно большой музыкальный сайт с большой базой артистов. Я заметил, что другие музыкальные сайты очищают данные нашего сайта (я тут и там ввожу фиктивные имена исполнителей, а затем выполняю поиск в Google).
Как я могу предотвратить соскоб экрана? Это вообще возможно?
26 ответов
Примечание. Поскольку полная версия этого ответа превышает ограничение длины 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-адреса.
Чтобы не создавать сценарии для создания множества учетных записей, вам необходимо:
Требуйте адрес электронной почты для регистрации и проверьте этот адрес электронной почты, отправив ссылку, которая должна быть открыта для активации учетной записи. Разрешить только одну учетную запись на адрес электронной почты.
Требуется капча, которая будет решена при регистрации / создании учетной записи.
Требование создания учетной записи для просмотра контента отвлечет пользователей и поисковые системы; если вам требуется создать учетную запись для просмотра статьи, пользователи пойдут в другое место.
Блокировать доступ с облачного хостинга и соскребать 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
, Это (и подобные вещи), которые позволят скребкам просто перебирать всеarticleId
s и запросить все статьи таким образом. - Существуют и другие способы найти все статьи, например, написать скрипт для перехода по ссылкам внутри статей, которые ведут к другим статьям.
- Поиск что-то вроде "и" или "the" может выявить почти все, так что об этом нужно знать. (Вы можете избежать этого, только вернув 10 или 20 результатов).
- Вам нужны поисковые системы, чтобы найти ваш контент.
Не раскрывайте свои 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]
чтобы найти желаемый div вместо этого. Остерегайтесь других подобных отверстий тоже..Если нет никакого способа найти желаемый контент из разметки, скребок сделает это из структуры HTML. Итак, если все ваши страницы статьи похожи в том, что каждый
div
внутриdiv
который идет послеh1
является содержание статьи, скреперы получат содержание статьи на основе этого. Опять же, чтобы сломать это, вы можете добавлять / удалять дополнительную разметку в вашем HTML, периодически и случайно, например. добавление дополнительныхdiv
с илиspan
s. При современной обработке HTML на стороне сервера это не должно быть слишком сложным.
Что нужно знать:
Это будет утомительно и трудно реализовать, поддерживать и отлаживать.
Вы будете мешать кешированию. Особенно если вы измените идентификаторы или классы ваших HTML-элементов, это потребует соответствующих изменений в ваших файлах CSS и JavaScript, что означает, что каждый раз, когда вы их изменяете, они должны будут повторно загружаться браузером. Это приведет к увеличению времени загрузки страницы для повторных посетителей и увеличению нагрузки на сервер. Если вы меняете его только раз в неделю, это не будет большой проблемой.
Умные скребки все равно смогут получить ваш контент, сделав вывод, где находится фактический контент, например. зная, что большой блок текста на странице, вероятно, будет реальной статьей. Это позволяет все еще находить и извлекать нужные данные со страницы. Boilerpipe делает именно это.
По сути, убедитесь, что для сценария не так просто найти фактическое, желаемое содержание для каждой подобной страницы.
См. Также Как запретить сканерам, зависящим от XP ath, получать содержимое страницы, чтобы узнать, как это можно реализовать в 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-адреса.
Не забудьте запретить свою приманку (
/scrapertrap/
) в вашем файле robots.txt, чтобы поисковые роботы не попадали в него.Вы можете / должны сочетать это с предыдущим советом частого изменения HTML.
Также часто меняйте это, так как скребки научатся избегать этого. Измените адрес honeypot и текст. Также хочу рассмотреть возможность изменения встроенного CSS, используемого для сокрытия, и использовать вместо него атрибут ID и внешний CSS, поскольку скребки научатся избегать всего, что имеет
style
Атрибут с CSS используется для скрытия содержимого. Также попробуйте только включить его иногда, чтобы скребок работал изначально, но через некоторое время ломается. Это также относится к предыдущему совету.Злоумышленники могут запретить доступ для реальных пользователей, поделившись ссылкой на свой honeypot или даже вставив эту ссылку где-нибудь в виде изображения (например, на форуме). Часто меняйте URL, и делайте время запрета относительно коротким.
Подавать поддельные и бесполезные данные, если вы обнаружите скребок
Если вы обнаружите то, что явно является скребком, вы можете подать поддельные и бесполезные данные; это повредит данные, которые скребок получает с вашего сайта. Вы также должны сделать невозможным отличить такие фальшивые данные от реальных данных, чтобы скребки не знали, что они облажались.
Как пример: у вас есть новостной сайт; если вы обнаружите скребок, вместо того, чтобы блокировать доступ, подайте поддельные, случайно сгенерированные статьи, и это отравит данные, которые получает скребок. Если вы сделаете свои фальшивые данные неотличимыми от реальных вещей, скребкам будет трудно получить то, что они хотят, а именно реальные, реальные данные.
Не принимать запросы, если пользовательский агент пуст / отсутствует
Часто лениво написанные скребки не будут отправлять заголовок User Agent со своим запросом, тогда как все браузеры, а также поисковики поисковых систем будут отправлять.
Если вы получили запрос, в котором отсутствует заголовок User Agent, вы можете показать капчу или просто заблокировать или ограничить доступ. (Или предоставьте поддельные данные, как описано выше, или что-то еще..)
Подделывать банально, но в качестве меры против плохо написанных скребков это стоит реализовать.
Не принимать запросы, если пользовательский агент является обычным шабером; черные списки, используемые скребками
В некоторых случаях скребки будут использовать пользовательский агент, который не использует реальный браузер или поисковик, например:
- "Mozilla" (только это, ничего больше. Я видел несколько вопросов о том, как использовать это здесь. Настоящий браузер никогда не будет использовать только это)
- "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.
Скреперы могут очищать другие скребки: если есть один веб-сайт, содержимое которого было соскоблено с вашего, другие скребки могут соскрести с сайта этого скребка.
Дальнейшее чтение:
Статья Википедии о веб-соскобе. Множество деталей о задействованных технологиях и различных типах веб-скребка.
Остановить сценаристов от сотрясения вашего сайта сотни раз в секунду. Q & A по очень похожей проблеме - боты проверяют сайт и покупают вещи, как только они поступят в продажу. Много актуальной информации, особенно на капчи и ограничение скорости.
Я предполагаю, что вы создали robots.txt
,
Как уже упоминали другие, скребки могут подделать почти каждый аспект своей деятельности, и, вероятно, очень трудно определить запросы, поступающие от плохих парней.
Я хотел бы рассмотреть:
- Настроить страницу,
/jail.html
, - Запретить доступ к странице в
robots.txt
(так что уважительные пауки никогда не будут посещать). - Поместите ссылку на одну из ваших страниц, скрывая ее с помощью CSS (
display: none
). - Записать IP-адреса посетителей
/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 (вы можете найти больше информации о пользовательских агентах, покинув ее). Тогда вы должны увидеть http://www.iplists.com/. В этом списке и попробуйте сопоставить закономерности. И если это похоже на фальшивый пользовательский агент, попросите заполнить капчу при следующем посещении. (Вам нужно немного больше изучить IP-адреса ботов. Я знаю, что это достижимо, а также попробовать whois этого IP-адреса. Это может быть полезно.)
Случай 2. Нет пользовательского агента поискового бота: просто попросите заполнить CAPTCHA при следующем посещении.
Поздний ответ - а также этот ответ, вероятно, не тот, который вы хотите услышать...
Я уже написал много (много десятков) различных специализированных скребков для сбора данных. (только потому, что мне нравится философия "открытых данных").
Вот уже много советов в других ответах - теперь я буду играть роль адвоката дьявола и буду расширять и / или исправлять их эффективность.
Первый:
- если кто-то действительно хочет ваши данные
- Вы не можете эффективно (технически) скрыть свои данные
- если данные должны быть общедоступными для ваших "обычных пользователей"
Попытка использовать некоторые технические барьеры не стоит проблем, вызванных:
- для ваших постоянных пользователей, ухудшая их пользовательский опыт
- обычным и желанным ботам (поисковым системам)
- так далее...
Обычный 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 совсем не помогает. Любой серьезный майнер данных установит его в свой скребок.
Требовать логин - не помогает. Самый простой способ победить (без анализа и / или написания сценария входа в систему) - это просто войти на сайт как обычный пользователь, используя Mozilla, и просто запустить скребок на основе Mozrepl...
Помните, что обязательный вход в систему помогает анонимным ботам, но не помогает тем, кто хочет проверить ваши данные. Он просто регистрируется на вашем сайте в качестве обычного пользователя.
Использование фреймов также не очень эффективно. Это используется многими сервисами живого кино, и это не очень трудно победить. Фреймы - это просто еще одна страница HTML/Javascript, необходимая для анализа... Если данные стоят хлопот - майнер данных проведет необходимый анализ.
Ограничение на основе IP вообще не эффективно - здесь слишком много общедоступных прокси-серверов, а также TOR...:) Это не замедляет очистку (для тех, кто действительно хочет получить ваши данные).
Очень тяжело скрести данные, спрятанные в изображениях. (например, простое преобразование данных в изображения на стороне сервера). Использование "тессеракта" (OCR) помогает много раз - но, честно говоря, - данные должны стоить хлопот скребку. (что много раз не стоит).
С другой стороны, ваши пользователи будут ненавидеть вас за это. Я сам (даже если не очищаю) ненавижу веб-сайты, которые не позволяют копировать содержимое страницы в буфер обмена (потому что информация находится в изображениях, или (глупые) пытаются связать правой кнопкой мыши какое-то пользовательское событие Javascript.:)
Сложнее всего сайты, которые используют java-апплеты или flash, а апплет сам использует защищенные https- запросы. Но подумайте дважды - насколько счастливыми будут ваши пользователи iPhone...;). Поэтому в настоящее время очень немногие сайты используют их. Я блокирую весь флэш-контент в моем браузере (в обычных сеансах просмотра) и никогда не использую сайты, которые зависят от Flash.
Ваши вехи могут быть..., так что вы можете попробовать этот метод - просто помните - вы, вероятно, потеряете некоторых из ваших пользователей. Также помните, что некоторые SWF-файлы можно декомпилировать.;)
Captcha (хорошие - например, reCaptcha) очень помогает - но ваши пользователи будут вас ненавидеть... - просто представьте, как ваши пользователи будут любить вас, когда им нужно будет решить некоторые капчи на всех страницах с информацией о музыкальных исполнителях.
Вероятно, не нужно продолжать - вы уже попали в картину.
Теперь, что вы должны сделать:
Помните: почти невозможно скрыть ваши данные, если вы, с другой стороны, хотите опубликовать их (в удобной форме) для своих обычных пользователей.
Так,
- сделать ваши данные легко доступными - с помощью некоторого API
- это позволяет легкий доступ к данным
- например, снять нагрузку с вашего сервера - хорошо для вас
- установить правильные права использования (например, должен ссылаться на источник)
- помните, что многие данные не защищены авторским правом и их сложно защитить
- добавить поддельные данные (как вы уже сделали) и использовать легальные инструменты
- как уже говорили другие, пошлите "письмо о прекращении и воздержании"
- другие юридические действия (подать в суд и т. п.), вероятно, слишком дороги и их трудно выиграть (особенно против неамериканских сайтов)
Подумайте дважды, прежде чем пытаться использовать некоторые технические барьеры.
Вместо того, чтобы пытаться заблокировать данные-майнеры, просто приложите больше усилий для удобства использования вашего сайта. Ваш пользователь будет любить вас. Время (и энергия), потраченное на технические барьеры, обычно не стоит - лучше потратить время, чтобы сделать сайт еще лучше...
Кроме того, воры данных не похожи на обычных воров.
Если вы купите недорогую домашнюю сигнализацию и добавите предупреждение "этот дом подключен к полиции" - многие воры даже не попытаются взломать. Потому что один неверный шаг от него - и он собирается в тюрьму...
Итак, вы вкладываете всего несколько баксов, а вор вкладывает много и рискуете.
Но вор данных не имеет таких рисков. наоборот - если вы сделаете один неверный шаг (например, если вы введете некоторую ошибку в результате технических барьеров), вы потеряете своих пользователей. Если робот-очиститель не будет работать в первый раз, ничего не произойдет - сборщик данных просто попробует другой подход и / или отладит скрипт.
В этом случае вам нужно инвестировать гораздо больше, а скребок - гораздо меньше.
Подумайте, куда вы хотите потратить свое время и энергию...
Ps: английский не мой родной - так что прости мой сломанный английский...
Что может сработать против начинающих скребков:
- Блокировка IP
- использовать много AJAX
- проверить заголовок запроса реферера
- требуется логин
Вещи, которые помогут в целом:
- меняйте свой макет каждую неделю
- robots.txt
Вещи, которые помогут, но заставят ваших пользователей ненавидеть вас:
- CAPTCHA,
Я сделал много веб-скребков и суммировал некоторые методы, чтобы остановить веб-скребки в моем блоге, основываясь на том, что меня раздражает.
Это компромисс между вашими пользователями и скребками. Если вы ограничиваете IP-адреса, используете CAPTCHA, требуете входа в систему и т. Д., Вы становитесь трудными для скребков. Но это также может отогнать ваших настоящих пользователей.
С технической точки зрения: просто смоделируйте, что делает Google, когда вы задаете им слишком много запросов одновременно. Это должно положить конец многим из этого.
С юридической точки зрения: похоже, данные, которые вы публикуете, не являются собственностью. Это означает, что вы публикуете имена, статистику и другую информацию, которая не может быть защищена авторским правом.
В этом случае скребки не нарушают авторские права, перераспределяя вашу информацию об имени исполнителя и т. Д. Однако они могут нарушать авторские права при загрузке вашего сайта в память, поскольку ваш сайт содержит элементы, защищенные авторским правом (например, макет и т. Д.).
Я рекомендую прочитать о Facebook v. Power.com и увидеть аргументы, которые Facebook использовал, чтобы остановить скриншот экрана. Есть много законных способов попытаться помешать кому-то соскрести ваш сайт. Они могут быть далеко идущими и творческими. Иногда суды покупают аргументы. Иногда они этого не делают.
Но, предполагая, что вы публикуете общедоступную информацию, которая не защищена авторским правом, например, имена и основные статистические данные... вы просто должны оставить ее во имя свободы слова и открытых данных. То есть, что такое Интернет.
Ваш лучший вариант, к сожалению, довольно ручной: найдите шаблоны трафика, которые, по вашему мнению, указывают на очистку, и запретите их IP-адреса.
Поскольку вы говорите об общедоступном сайте, то создание дружественной поисковой системы сайта также сделает сайт более дружелюбным. Если поисковая система может сканировать и очищать ваш сайт, то и вредоносный скребок тоже может. Это тонкая грань, чтобы идти.
Конечно, это возможно. Для 100% успеха переведите ваш сайт в автономный режим.
В действительности вы можете делать некоторые вещи, которые делают скребок немного сложнее. Google проверяет браузер, чтобы убедиться, что вы не робот, который просматривает результаты поиска (хотя это, как и все остальное, может быть подделано).
Вы можете сделать что-то вроде нескольких секунд между первым подключением к вашему сайту и последующими кликами. Я не уверен, какое будет идеальное время или как именно это сделать, но это другая идея.
Я уверен, что есть еще несколько человек, которые имеют гораздо больше опыта, но я надеюсь, что эти идеи, по крайней мере, несколько полезны.
- Нет, остановить невозможно (никак)
- Прими это. Почему бы не опубликовать как RDFa, не стать супер дружественным для поисковых систем и не поощрять повторное использование данных? Люди будут благодарить вас и предоставлять кредит в случае необходимости (см. Например, musicbrainz).
Это не тот ответ, который вам, вероятно, нужен, но зачем скрывать то, что вы пытаетесь обнародовать?
Есть несколько вещей, которые вы можете сделать, чтобы попытаться предотвратить скрининг экрана. Некоторые не очень эффективны, в то время как другие (CAPTCHA), но мешают удобству использования. Вы также должны помнить, что это может помешать законным скребкам сайта, таким как индексы поисковых систем.
Тем не менее, я предполагаю, что если вы не хотите, чтобы он был удален, это означает, что вы не хотите, чтобы поисковые системы тоже его индексировали.
Вот несколько вещей, которые вы можете попробовать:
- Показать текст на изображении. Это достаточно надежно и менее болезненно для пользователя, чем CAPTCHA, но означает, что они не смогут вырезать и вставлять, и оно не будет красиво масштабироваться или быть доступным.
- Используйте CAPTCHA и потребуйте, чтобы она была заполнена до возврата на страницу. Это надежный метод, но он также является самой большой болью для пользователя.
- Требуйте от пользователя регистрации учетной записи перед просмотром страниц и подтвердите свой адрес электронной почты. Это будет довольно эффективно, но не полностью - скребок экрана может создать учетную запись и может хитро запрограммировать свой сценарий для входа в них.
- Если строка user-agent клиента пуста, заблокируйте доступ. Скрипт очистки сайта часто будет запрограммирован лениво и не будет устанавливать строку пользовательского агента, в отличие от всех веб-браузеров.
- Вы можете настроить черный список известных строк пользовательского агента скребка экрана по мере их обнаружения. Опять же, это поможет только лениво закодированным; программист, который знает, что он делает, может установить строку пользовательского агента для олицетворения веб-браузера.
- Часто меняйте путь URL. Когда вы его измените, убедитесь, что старый продолжает работать, но только до тех пор, пока один пользователь может открыть свой браузер. Трудно предсказать, каким будет новый URL-путь. Это затруднит захват скриптами скриптов, если их URL жестко запрограммирован. Было бы лучше сделать это с помощью какого-нибудь сценария.
Если бы мне пришлось это сделать, я бы, вероятно, использовал комбинацию трех последних, потому что они сводят к минимуму неудобства для законных пользователей. Тем не менее, вы должны согласиться с тем, что вы не сможете блокировать всех таким образом, и как только кто-то поймет, как его обойти, он сможет его поцарапать навсегда. Тогда вы можете просто попытаться заблокировать их IP-адреса, когда обнаружите их.
Метод первый (только для небольших сайтов):
Обслуживайте зашифрованные / закодированные данные.
Я просматривал веб-страницы, используя 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" в качестве пользователя-агента.
Метод четвертый:
Убедитесь, что все пользовательские заголовки верны, я иногда предоставляю как можно больше заголовков, чтобы мой скребок казался подлинным пользователем, некоторые из них даже не являются истинными или действительными, как 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"
}
Вместо того, чтобы заносить в черный список ботов, возможно, вам следует занести их в белый список. Если вы не хотите уничтожать результаты поиска по нескольким лучшим системам, вы можете внести в белый список их строки агента пользователя, которые обычно хорошо публикуются. Менее этичные боты имеют тенденцию подделывать строки пользовательских агентов популярных веб-браузеров. Лучшие поисковые системы должны занимать более 95% вашего трафика.
Идентификация самих ботов должна быть довольно простой, используя методы, предложенные другими авторами.
Быстрый подход к этому будет установить ловушку / бот-ловушку.
Создайте страницу, которая, если она открывается определенное количество раз или даже открывается вообще, будет собирать определенную информацию, такую как IP-адрес и еще много чего (вы также можете учитывать нарушения или шаблоны, но эту страницу вообще не нужно открывать).
Сделайте ссылку на это на своей странице, которая скрыта с помощью отображения CSS: нет; или слева:-9999px; положение: абсолютное; старайтесь размещать его в местах, которые вряд ли будут игнорироваться, например, там, где падает ваш контент, а не в нижнем колонтитуле, поскольку иногда боты могут забыть об определенных частях страницы.
В вашем файле robots.txt установите целую кучу запрещающих правил для страниц, на которые вы не хотите, чтобы дружественные боты (как у них были счастливые лица!) Собирали информацию и устанавливали эту страницу как одну из них.
Теперь, если дружественный бот проходит, он должен игнорировать эту страницу. Да, но это все еще не достаточно хорошо. Сделайте еще пару таких страниц или перенаправьте страницу так, чтобы она принимала разные имена. а затем поместите больше правил запрета на эти страницы ловушек в файле robots.txt рядом со страницами, которые вы хотите игнорировать.
Соберите IP-адреса этих ботов или всех, кто заходит на эти страницы, не забаньте их, но сделайте функцию для отображения текста в вашем контенте, например, случайных чисел, уведомлений об авторских правах, определенных текстовых строк, отображения страшных картинок, в основном всего, что может помешать вашему хороший контент. Вы также можете установить ссылки, которые указывают на страницу, которая будет длиться вечно, т.е. в php вы можете использовать функцию sleep(). Это будет отбрасывать сканер обратно, если у него есть какое-то обнаружение для обхода страниц, загрузка которых занимает слишком много времени, так как некоторые хорошо написанные боты настроены на одновременную обработку X ссылок.
Если вы сделали конкретные текстовые строки / предложения, почему бы не перейти к вашей любимой поисковой системе и искать их, это может показать вам, где заканчивается ваш контент.
Во всяком случае, если вы думаете, тактически и творчески, это может быть хорошей отправной точкой. Лучше всего узнать, как работает бот.
Я бы также подумал о том, чтобы использовать некоторые идентификаторы или способ отображения атрибутов на элементе страницы:
<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"
Вы не можете остановить нормальную очистку экрана. Хорошо это или плохо, но такова природа сети.
Вы можете сделать так, чтобы никто не мог получить доступ к определенным вещам (включая музыкальные файлы), если они не зарегистрированы как зарегистрированный пользователь. Это не так сложно сделать в Apache. Я предполагаю, что это не будет слишком сложно сделать в IIS.
Большинство уже сказано, но рассматривали ли вы защиту CloudFlare? Я имею в виду это:
Другие компании, вероятно, делают это тоже, CloudFlare - единственный, кого я знаю.
Я уверен, что это усложнит их работу. Я также однажды автоматически заблокировал IP на 4 месяца, когда попытался удалить данные сайта, защищенного CloudFlare, из-за ограничения скорости (я использовал простой цикл запросов AJAX).
Я согласен с большинством постов, приведенных выше, и хочу добавить, что чем более дружественна поисковая система для вашего сайта, тем более она будет полезна. Вы можете попробовать сделать несколько вещей, которые очень усложняют скребки, но это также может повлиять на ваши поисковые возможности... Конечно, это зависит от того, насколько хорошо вы хотите, чтобы ваш сайт занимал место в поисковых системах.
Одним из способов является предоставление содержимого в виде атрибутов XML, строк в кодировке URL, предварительно отформатированного текста с JSON в кодировке HTML или URI данных, а затем преобразование его в HTML на клиенте. Вот несколько сайтов, которые делают это:
Skechers: XML
<document filename="" height="" width="" title="SKECHERS" linkType="" linkUrl="" imageMap="" href="http://www.bobsfromskechers.com" alt="BOBS from Skechers" title="BOBS from Skechers" />
Интернет-магазин 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> {"tiddlers": { "GettingStarted": { "title": "GettingStarted", "text": "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>
Если вы просматриваете источник по какому-либо из вышеперечисленных пунктов, вы увидите, что очистка просто вернет метаданные и навигацию.
Если вы хотите увидеть отличный пример, посмотрите http://www.bkstr.com/. Они используют алгоритм a j/s для установки файла cookie, затем перезагружает страницу, чтобы он мог использовать файл cookie для проверки того, что запрос выполняется в браузере. Настольное приложение, созданное для очистки, может определенно справиться с этим, но оно остановит большую часть операций типа cURL.
Генерация HTML, CSS и JavaScript. Писать генераторы проще, чем парсеры, поэтому вы можете генерировать каждую обслуживаемую страницу по-разному. Вы больше не можете использовать кеш или статический контент.
Если вы разместите ваш контент за капчей, это будет означать, что роботам будет трудно получить доступ к вашему контенту. Однако люди будут испытывать неудобства, так что это может быть нежелательно.
Скребки экрана работают, обрабатывая HTML. И если они полны решимости получить ваши данные, технически вы мало что можете сделать, потому что человеческое глазное яблоко обрабатывает все что угодно. Юридически уже было указано, что вы можете прибегнуть к помощи, и это будет моей рекомендацией.
Однако вы можете скрыть важную часть ваших данных, используя логику представления не на основе HTML
- Создать файл Flash для каждого исполнителя / альбома и т. Д.
- Генерация изображения для каждого исполнителя контента. Может быть, просто изображение для имени художника и т. Д. Будет достаточно. Сделайте это путем рендеринга текста в файл JPEG/ PNG на сервере и ссылки на это изображение.
Имейте в виду, что это, вероятно, повлияет на ваш поисковый рейтинг.