Примечание. Поскольку полная версия этого ответа превышает ограничение длины 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
. Это (и подобные вещи), которые позволят скребкам просто перебирать все 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]
для поиска нужного элемента. Остерегайтесь других подобных отверстий тоже ..
Если нет никакого способа найти желаемый контент из разметки, скребок сделает это из структуры HTML. Таким образом, если все ваши страницы статьи похожи в том, что каждая из них div
внутри a, div
которая идет после a, h1
является содержимым статьи, скребки получат содержание статьи на основе этого. Опять же, чтобы сломать это, вы можете добавлять / удалять дополнительную разметку в вашем HTML, периодически и случайно, например. добавив дополнительные div
s или span
s. При современной обработке HTML на стороне сервера это не должно быть слишком сложным.
Что нужно знать:
Это будет утомительно и сложно реализовать, поддерживать и отлаживать.
Вы будете мешать кешированию. Особенно, если вы измените идентификаторы или классы ваших элементов HTML, это потребует соответствующих изменений в ваших файлах CSS и JavaScript, что означает, что каждый раз, когда вы их изменяете, они должны будут повторно загружаться браузером. Это приведет к увеличению времени загрузки страницы для повторных посетителей и увеличению нагрузки на сервер. Если вы меняете его только раз в неделю, это не будет большой проблемой.
Умные скребки все равно смогут получить ваш контент, сделав вывод, где находится фактический контент, например. зная, что большой отдельный блок текста на странице, вероятно, будет настоящей статьей. Это позволяет по-прежнему находить и извлекать нужные данные со страницы. Boilerpipe делает именно это.
По сути, убедитесь, что для сценария не так просто найти фактическое, желаемое содержание для каждой подобной страницы.
См. Также Как запретить сканерам, зависящим от XPath, получать содержимое страницы, чтобы узнать, как это можно реализовать в PHP.
Изменить ваш HTML в зависимости от местоположения пользователя
Это похоже на предыдущий совет. Если вы используете другой HTML-код в зависимости от местоположения / страны вашего пользователя (определяется по IP-адресу), это может привести к поломке скребков, которые доставляются пользователям. Например, если кто-то пишет мобильное приложение, которое собирает данные с вашего сайта, оно сначала будет работать нормально, но сломаться, когда оно будет фактически распространено среди пользователей, поскольку эти пользователи могут находиться в другой стране и, таким образом, получить другой HTML, который встроенный скребок не предназначен для потребления.
Часто меняйте свой HTML, активно этим пользуйтесь!
Пример: у вас есть функция поиска на вашем сайте, расположенная по адресу example.com/search?query=somesearchquery
, которая возвращает следующий HTML:
<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.
Скреперы могут очищать другие скребки: если есть один веб-сайт, содержимое которого было соскоблено с вашего, другие скребки могут соскрести с сайта этого скребка.
Дальнейшее чтение: