Предотвращение скраппинга сайтов

Web

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

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

Ajaxified paginated data

Если у вас много постраничных данных, и вы размещаете данные постранично, просто добавляя другое число в конец URL, т.е. http://www.domain.com/category/programming/2 — тогда вы облегчаете работу краулера. Первая проблема заключается в том, что эти страницы легко идентифицируются, поэтому запустить скрепер на эти страницы проще простого. Вторая проблема — независимо от URL последующих страниц в категории, более чем вероятно, что там будет следующая и предыдущая ссылка, за которую они смогут зацепиться.

Загрузка постраничных данных через javascript без перезагрузки страницы значительно усложняет работу для многих скреперов. Google только недавно сам начал анализировать javascript на странице. Недостатков в такой перезагрузке данных немного. Вы предоставляете Google для индексации несколько меньше страниц, но, технически, постраничные данные все равно должны указывать на корневую страницу категории через каноникализацию . Ajaxify ваши постраничные страницы данных.

Рандомизация вывода шаблонов

Скреперы часто немного подстраиваются под ваши данные. Они будут цепляться за определенный div id или класс для заголовка, 3-ю ячейку в каждой строке для описания и т.д. Для большинства скреперов существует легко идентифицируемая схема работы, поскольку большинство данных, поступающих из одной и той же таблицы, отображаются по одному и тому же шаблону. Произведите случайную расстановку идентификаторов div и имен классов, вставьте пустые столбцы таблицы с шириной 0. Покажите данные в таблице на одной странице, в стилизованных div и комбинации на другом шаблоне. Предсказуемо представляя данные, их можно соскабливать предсказуемо и точно.

HoneyPot

Это довольно аккуратно в своей простоте. Я встречал этот метод на нескольких страницах о предотвращении соскабливания сайтов.

  • Создайте новый файл на вашем сервере под названием gotcha.html.
  • В файл robots.txt добавьте следующее:
    User-agent: *
    Disallow: /gotcha.html

    Это указывает всем роботам и паукам, индексирующим ваш сайт, не индексировать файл gotcha.html. Любой нормальный веб-краулер будет уважать пожелания вашего файла robots.txt и не будет обращаться к этому файлу. т.е. Google и Bing . Возможно, вы действительно захотите выполнить этот шаг и подождать 24 часа, прежде чем переходить к следующему шагу. Это гарантирует, что краулер не будет случайно заблокирован вами из-за того, что он уже был в середине процесса, когда вы обновили файл robots.txt.
  • Разместите ссылку на gotcha.html где-нибудь на вашем сайте. Неважно, где. Я бы рекомендовал в футере, однако, убедитесь, что эта ссылка не видна, в CSS, display:none ;
  • Теперь запишите IP/общую информацию преступника, который посетил эту страницу, и заблокируйте его. Как вариант, вы можете придумать скрипт, который будет предоставлять им неверные и мусорные данные. Или, может быть, приятное личное сообщение от вас для них.

Обычные веб-зрители не смогут увидеть ссылку, так что она не будет случайно нажата. Авторитетные краулеры (например, Google), будут уважать пожелания вашего robots.txt и не посетят файл. Таким образом, единственные компьютеры, которые могут наткнуться на эту страницу, — это компьютеры со злыми намерениями, или кто-то просматривает ваш исходный код и случайно щелкает по нему (и хорошо, если это произойдет).

Есть несколько причин, по которым это не всегда срабатывает. Во-первых, многие скреперы работают не так, как обычные веб-краулеры, и не просто обнаруживают данные, переходя по каждой ссылке с каждой страницы вашего сайта. Скреперы часто строятся так, чтобы фиксироваться на определенных страницах и следовать только определенным структурам. Например, скрепер может быть запущен на странице категории, а затем ему будет приказано посещать только URL-адреса со словом /data в слоге. Во-вторых, если кто-то запускает свой скрепер в той же сети, что и другие, и используется общий IP, вам придется запретить всю сеть. Чтобы это стало проблемой, у вас должен быть очень популярный сайт.

Запись данных в изображения на лету

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

Альтернатива

Это не было вариантом для данного проекта. Требование входа в систему после определенного количества просмотров страниц или отображение ограниченного количества данных без входа в систему. Например, если у вас 10 колонок, отображайте только 5 для незарегистрированных пользователей.

Не совершайте эту ошибку

Не пытайтесь придумать какое-то решение на основе user-agent бота. Эта информация может быть легко подделана скрапером, который знает, что делает. Например, бот google может быть легко эмулирован. Скорее всего, вы не захотите запрещать Google

YouTube видео: Предотвращение скраппинга сайтов


.

Оцените статью
IT советы и лайфхаки, windows, технологии