Як запобігти вискоблюванню сайту? [зачинено]


301

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

Як я можу запобігти вискоблюванню екрана? Чи можливо це навіть?


9
Чи обмірковували ви намагатися виявити їх скрепер через IP чи подібне (перевірити свої журнали) і просто підробили ці дані для них? Таким чином, так, вони "зішкріб" ваш сайт, але їх "дані" виявляться марними.
Лассе В. Карлсен

30
Перевернуті підказки і перевернутий / зашифрований текст кого-небудь?
Вейн Вернер

2
Аналогічне питання stackoverflow.com/questions/2705394 / ...
user279521


2
@JonasCz це був іронічний жарт. Сумна річ, схожа пропозиція включена у вашу відповідь, хоч і критикується.
Томаш Зато - Відновити Моніку

Відповіді:


325

Примітка: Оскільки повна версія цієї відповіді перевищує межу довжини переповнення стека, вам потрібно буде перейти до GitHub, щоб прочитати розширену версію з додатковими порадами та деталями.


Для того, щоб перешкодити вискоблюванню (також відомі як Веб-розробка , Екранна розробка , видобуток веб-даних , збирання веб-сторінок або вилучення веб-даних ), це допомагає дізнатися, як працюють ці скребки, і, за розширенням, що заважає їм працювати добре.

Існують різні типи скребків, і кожен працює по-різному:

  • Павуки, такі як бот Google або копіювачі веб-сайтів, як HTtrack , які рекурсивно переходять посилання на інші сторінки, щоб отримати дані. Вони іноді використовуються для цільового скреблінгу для отримання конкретних даних, часто в поєднанні з HTML-аналізатором для отримання потрібних даних з кожної сторінки.

  • Сценарії оболонки: Іноді для вискоблювання використовуються звичайні інструменти Unix: Wget або Curl для завантаження сторінок та Grep (Regex) для отримання даних.

  • HTML-аналізатори, наприклад, на основі Jsoup, Scrapy та інших. Подібно до таких, що базуються на регулярних виразках оболонки скрипта, вони працюють шляхом вилучення даних зі сторінок на основі шаблонів у HTML, зазвичай ігноруючи все інше.

    Наприклад: Якщо на вашому веб-сайті є функція пошуку, такий скрепер може подати запит на пошук, а потім отримати всі посилання на результати та їхні заголовки зі сторінки результатів HTML, щоб спеціально отримати лише посилання на результати пошуку та їх заголовки . Це найпоширеніші.

  • Екрани, засновані на напр. Selenium або PhantomJS , які відкривають ваш веб-сайт у справжньому браузері, запускають JavaScript, AJAX тощо, а потім отримують потрібний текст із веб-сторінки, як правило:

    • Отримання HTML з браузера після завантаження вашої сторінки та запуску JavaScript, а потім за допомогою HTML-аналізатора для отримання потрібних даних. Це найпоширеніші, і тому багато методів зламування HTML-аналізаторів / скреперів також працюють тут.

    • Зробіть скріншот візуалізованих сторінок, а потім використовуйте OCR для отримання потрібного тексту із скріншоту. Це рідкісні випадки, і налаштовано це лише спеціальні скрепери, які дуже хочуть ваших даних.

  • Webscraping послуги , такі як ScrapingHub або Кімоно . Насправді, є люди, завдання яких - розібратися, як зішкрібати ваш сайт та витягнути вміст для інших.

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

  • Вбудовування вашого веб-сайту на сторінки інших сайтів за допомогою кадрів та вбудовування вашого сайту в мобільні додатки.

    Мобільні програми (Android та iOS) не вкладаються технічно, але вбудовують веб-сайти та вводять користувацькі CSS та JavaScript, тим самим повністю змінюючи зовнішній вигляд ваших сторінок.

  • Людська копія - вставка: люди копіюють та вставляють ваш вміст, щоб використовувати його в іншому місці.

Між цими різними видами скреперів багато перекривається, і багато скреперів поводитимуться аналогічно, навіть якщо вони використовують різні технології та методи.

Ці поради, в основному, мої власні ідеї, різні труднощі, з якими я стикався під час написання скребків, а також шматочки інформації та ідеї з різних інтерв'ю.

Як припинити вичісування

Ви не можете повністю запобігти цьому , оскільки все, що ви робите, рішучі скребки все ще можуть з’ясувати, як вичісувати. Однак ви можете зупинити багато вискоблювання, виконавши кілька речей:

Стежте за своїми журналами та моделями трафіку; обмежте доступ, якщо ви бачите незвичну активність:

Регулярно перевіряйте свої журнали, і в разі незвичної активності, яка вказує на автоматизований доступ (скребки), наприклад, багато подібних дій з однієї і тієї ж IP адреси, ви можете заблокувати або обмежити доступ.

Зокрема, деякі ідеї:

  • Обмеження швидкості:

    Дозволити користувачам (і скреперам) виконувати обмежену кількість дій за певний час - наприклад, дозволяти лише кілька пошуків за секунду з будь-якої конкретної IP-адреси чи користувача. Це уповільнить скребки та зробить їх неефективними. Ви також можете показати капчу, якщо дії виконуються занадто швидко або швидше, ніж справжній користувач.

  • Виявити незвичну активність:

    Якщо ви бачите незвичну активність, наприклад, багато подібних запитів із певної IP-адреси, якщо хтось переглядає надмірну кількість сторінок або виконує незвичну кількість пошукових запитів, ви можете запобігти доступу або показати капташ для наступних запитів.

  • Не слідкуйте за обмеженням та обмеженням швидкості за IP-адресою - використовуйте й інші показники:

    Якщо ви блокуєте чи обмежуєте ставку, не робіть це лише за IP-адресою; ви можете використовувати інші показники та методи для ідентифікації конкретних користувачів або скреперів. Деякі показники, які можуть допомогти вам визначити конкретних користувачів / скреперів, включають:

    • Як швидко користувачі заповнюють форми і де натискають кнопку;

    • Ви можете зібрати багато інформації за допомогою JavaScript, наприклад розмір / роздільну здатність екрана, часовий пояс, встановлені шрифти тощо; ви можете використовувати це для ідентифікації користувачів.

    • HTTP-заголовки та їх замовлення, особливо User-Agent.

    Наприклад, якщо ви отримуєте багато запитів з однієї IP-адреси, усі, що використовують один і той же агент користувача, розмір екрана (визначений JavaScript) та користувач (в цьому випадку скрепер), завжди натискають на кнопку так само і на регулярні інтервали, це, мабуть, скребок екрану; і ви можете тимчасово заблокувати подібні запити (наприклад, заблокувати всі запити за допомогою цього агента користувача та розмір екрана, що надходить з цієї конкретної IP-адреси), і таким чином ви не заважатимете реальним користувачам на цій IP-адресі, наприклад. у випадку спільного підключення до Інтернету.

    Ви також можете скористатися цим додатком, оскільки ви можете ідентифікувати подібні запити, навіть якщо вони надходять з різних IP-адрес, що свідчить про розподілене скреблінг (скрепер за допомогою ботнету або мережі проксі-серверів). Якщо ви отримаєте багато ідентичних запитів, але вони надходять з різних IP-адрес, ви можете заблокувати. Знову ж таки, пам’ятайте, що не випадково блокуйте реальних користувачів.

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

    Пов’язані запитання щодо обміну стеками безпеки:

  • Замість тимчасового блокування доступу використовуйте Captcha:

    Найпростішим способом здійснення обмеження швидкості буде тимчасове блокування доступу на певний проміжок часу, однак використання Captcha може бути краще, див. Розділ Captchas далі.

Потрібна реєстрація та реєстрація

Потрібно створити обліковий запис, щоб переглянути ваш вміст, якщо це можливо для вашого сайту. Це хороший стримуючий засіб для скреперів, але також є хорошим стримуючим фактором для реальних користувачів.

  • Якщо вам потрібне створення облікового запису та вхід у систему, ви можете точно відслідковувати дії користувача та скрепера. Таким чином, ви зможете легко визначити, коли для скребки використовується певний обліковий запис, і заборонити його. Такі речі, як обмеження швидкості або виявлення зловживань (наприклад, величезна кількість пошукових запитів за короткий час), стають простішими, оскільки ви можете визначити конкретні скребки замість лише IP-адрес.

Щоб уникнути створення сценаріїв багатьох облікових записів, слід:

  • Потрібна адреса електронної пошти для реєстрації та підтвердьте цю електронну адресу, надіславши посилання, яке необхідно відкрити для активації облікового запису. Дозволити лише один обліковий запис на адресу електронної пошти.

  • Потрібна розв’язання капчу під час реєстрації / створення облікового запису.

Необхідність створення облікового запису для перегляду вмісту призведе до відхилення користувачів та пошукових систем; якщо вам потрібно створити обліковий запис для перегляду статті, користувачі перейдуть в інше місце.

Блокуйте доступ із хмарного хостингу та IP-адрес служб скребки

Іноді скребки будуть запускатися з веб-служб хостингу, таких як веб-сервіси Amazon або GAE або VPS. Обмежте доступ до вашого веб-сайту (або покажіть капчу) для запитів, що походять з IP-адрес, використовуваних такими хмарними хостинговими службами.

Так само ви можете обмежити доступ з IP-адрес, які використовуються проксі-провайдерами або VPN-провайдерами, оскільки скрепери можуть використовувати такі проксі-сервери, щоб уникнути виявлення багатьох запитів.

Будьте уважні, заблокувавши доступ з проксі-серверів та VPN, ви негативно вплинете на реальних користувачів.

Зробіть повідомлення про помилку недискриптом, якщо ви блокуєте

Якщо ви блокуєте / обмежуєте доступ, вам слід переконатися, що ви не скажете скребку, що викликало блок, тим самим даючи їм підказки, як виправити їх скребок. Тож поганою ідеєю було б показати сторінки помилок з текстом на кшталт:

  • Забагато запитів з вашої IP-адреси. Повторіть спробу пізніше.

  • Помилка, заголовок агента користувача немає!

Натомість покажіть дружнє повідомлення про помилку, яке не повідомляє скребку, що його спричинило. Щось подібне набагато краще:

  • Вибачте, щось пішло не так. Ви можете зв’язатися із службою підтримки за допомогою helpdesk@example.com, якщо проблема не зникне.

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

Використовуйте Captchas, якщо ви підозрюєте, що ваш веб-сайт доступний за допомогою скрепера.

Captchas ("Повністю автоматизований тест, щоб розказати комп’ютери та люди") дуже ефективні проти зупинки скреперів. На жаль, вони також дуже ефективні при дратуванні користувачів.

Таким чином, вони корисні, коли ви підозрюєте про можливий скрепер, і хочете припинити вичісування, не блокуючи також доступ у випадку, якщо це не скрепер, а справжній користувач. Можливо, ви захочете розглянути показ капчу, перш ніж дозволити доступ до вмісту, якщо ви підозрюєте, що скрепер.

Що потрібно пам’ятати при використанні Captchas:

  • Не скочуйте самостійно, використовуйте щось на кшталт reCaptcha Google : Це набагато простіше, ніж самостійно впроваджувати капчу, це зручніше у користуванні, ніж якесь розмите і викривлене текстове рішення, яке ви можете придумати самостійно (користувачі часто потребують лише позначки, щоб поставити галочку ), і скриптеру також вирішити набагато складніше, ніж просте зображення, подане з вашого сайту

  • Не включайте рішення з капчу в розмітку HTML: я фактично бачив один веб-сайт, який мав рішення для капчу на самій сторінці (хоча і досить добре прихований), що робить її досить марною. Не роби щось подібне. Знову ж, скористайтеся такою послугою, як reCaptcha, і у вас не виникне подібних проблем (якщо ви правильно їх використовуєте).

  • Капчі можна вирішити оптом: Є послуги, що розв’язують капчу, де реальні, низькооплачувані, люди вирішують капчі масово. Знову ж таки, використання reCaptcha є хорошою ідеєю, оскільки вони мають захист (наприклад, порівняно короткий час, який користувач має для вирішення капчу). Цей вид послуги навряд чи буде використаний, якщо ваші дані не є дійсно цінними.

Подайте текстовий вміст як зображення

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

Однак це погано для читачів екранів, пошукових систем, продуктивності та майже всього іншого. Це також заборонено в деяких місцях (через доступність, наприклад, Закон про американців з обмеженими фізичними можливостями), і також легко обійти деяким OCR, тому не робіть цього.

Ви можете зробити щось подібне із спрайтами CSS, але це страждає від тих же проблем.

Не виставляйте повний набір даних:

Якщо це можливо, не надайте спосіб сценарію / боту отримати весь свій набір даних. Як приклад: у вас є сайт новин з великою кількістю окремих статей. Ви можете зробити ці статті доступними лише шляхом пошуку їх за допомогою пошуку на сайті, і, якщо у вас немає списку всіх статей на сайті та їх URL-адрес, доступ до цих статей буде доступний лише за допомогою пошуку особливість. Це означає, що сценарій, який хоче видалити всі статті з вашого сайту, повинен буде здійснити пошук усіх можливих фраз, які можуть з’явитися у ваших статтях, щоб знайти їх усі, що буде трудомістким, жахливо неефективним і, сподіваємось, зробить скребок здається.

Це буде неефективно, якщо:

  • Бот / скрипт взагалі не хоче / не потребує повного набору даних.
  • Ваші статті подаються з URL-адреси, яка виглядає приблизно так example.com/article.php?articleId=12345. Це (і подібні речі), які дозволять скреперам просто перебирати всі articleIdзапити та запитувати всі статті таким чином.
  • Є й інші способи, як врешті-решт знайти всі статті, наприклад, написання сценарію, щоб перейти за посиланнями у межах статей, які призводять до інших статей.
  • Пошук чогось типу "і" або "the" може виявити майже все, тому слід пам’ятати. (Ви можете уникнути цього, лише повернувши топ 10 або 20 результатів).
  • Для пошуку вашого вмісту потрібні пошукові системи.

Не піддавайте свої API, кінцеві точки тощо:

Переконайтеся, що ви не піддаєте жодних API, навіть ненавмисно. Наприклад, якщо ви використовуєте AJAX або мережеві запити з Adobe Flash або Java Applets (не дай Бог!) Для завантаження своїх даних, неважливо переглянути мережеві запити зі сторінки та з'ясувати, куди вони йдуть, і потім реверсуйте інженер і використовуйте ці кінцеві точки в програмі скрепера. Переконайтеся, що ви затуманили свої кінцеві точки та зробили їх важкими для використання, як описано.

Щоб відмовитися від парсерів HTML та скреперів:

Оскільки HTML-аналізатори працюють, витягуючи вміст зі сторінок на основі ідентифікованих шаблонів у HTML, ми можемо навмисно змінити ці шаблони в одер, щоб зламати ці скребки або навіть накрутити їх. Більшість цих порад стосується і інших скреперів, таких як павуки та скрінгопери.

Часто змінюйте свій HTML

Шкребки, які обробляють HTML безпосередньо, роблять це шляхом вилучення вмісту з конкретних, ідентифікованих частин вашої HTML-сторінки. Наприклад: Якщо на всіх сторінках вашого веб-сайту є divідентифікатор article-content, який містить текст статті, то тривіально написати сценарій для відвідування всіх сторінок статті на вашому веб-сайті та витягнути текст вмісту article-contentділа на кожній сторінці статті та voilà, скребок містить усі статті з вашого сайту у форматі, який можна повторно використовувати в іншому місці.

Якщо ви часто змінюєте HTML та структуру ваших сторінок, такі скребки більше не працюватимуть.

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

  • Якщо немає можливості знайти потрібний вміст у розмітці, скрепер зробить це так, як структурується HTML. Отже, якщо всі ваші сторінки статей схожі за тим, що кожна divвнутрішня частина, divяка з’являється після а, h1є вмістом статті, скребки отримають вміст статті на основі цього. Знову ж таки, щоб порушити це, ви можете додавати / видаляти зайву розмітку до свого HTML, періодично та випадковим чином, наприклад. додавання додаткових divs або spans. У сучасній обробці HTML на стороні сервера це не повинно бути занадто важким.

Що слід пам’ятати:

  • Це буде виснажливим і важким у виконанні, підтримці та налагодженні.

  • Ви будете перешкоджати кешування. Особливо, якщо ви змінюєте ідентифікатори або класи ваших HTML-елементів, для цього знадобляться відповідні зміни у ваших CSS-файлах та JavaScript-файлах, а це означає, що кожен раз, коли ви їх змінюєте, їх доведеться повторно завантажувати браузером. Це призведе до збільшення часу завантаження сторінки для повторних відвідувачів та збільшення завантаження сервера. Якщо ви будете змінювати її лише раз на тиждень, це не буде великою проблемою.

  • Розумні скребки все одно зможуть отримати ваш вміст, зробивши висновок про місце фактичного вмісту, наприклад. знаючи, що великий єдиний блок тексту на сторінці, ймовірно, буде фактичною статтею. Це дає можливість все ще знаходити та витягувати потрібні дані зі сторінки. Boilerpipe робить саме це.

По суті, переконайтеся, що сценарій не може легко знайти потрібний вміст для кожної подібної сторінки.

Див. Також Як заборонити сканерам залежно від XPath отримувати вміст сторінки для отримання детальної інформації про те, як це можна реалізувати в PHP.

Змініть свій HTML залежно від місцезнаходження користувача

Це схоже на попередню пораду. Якщо ви обслуговуєте інший HTML на основі місцезнаходження / країни вашого користувача (визначається IP-адресою), це може зламати скребки, які доставляються користувачам. Наприклад, якщо хтось пише мобільний додаток, який викреслює дані з вашого веб-сайту, він спочатку буде нормально працювати, але зламається, коли він фактично поширюється на користувачів, оскільки ці користувачі можуть бути в іншій країні, і таким чином отримати інший HTML, який вбудований скребок не був розроблений для споживання.

Часто змінюйте свій HTML, активно вкручуйте скребки, роблячи це!

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

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

Як ви вже здогадалися, це легко скребкувати: все, що потрібно зробити скрепер, це натиснути на пошукову URL-адресу із запитом та витягнути потрібні дані з поверненого HTML-коду. На додаток до періодичної зміни HTML, як описано вище, ви також можете залишити стару розмітку зі старими ідентифікаторами та класами, заховати її CSS та заповнити її підробленими даними, отруюючи тим самим скрепер. Ось як можна змінити сторінку результатів пошуку:

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

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

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

Гвинт за допомогою скребка: Вставте на свою сторінку підроблені, невидимі дані медового горщика

Додавши до попереднього прикладу, ви можете додати в свій 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/свій робот.txt.

Ви можете змусити scrapertrap.phpзробити щось на зразок блокування доступу до IP-адреси, яка відвідала його, або примусити кепчу до всіх наступних запитів із цього IP-адреси.

  • Не забудьте заборонити ваш медовий горщик ( /scrapertrap/) у вашому файлі robots.txt, щоб боти пошукової системи не потрапили в нього.

  • Ви можете / слід поєднувати це з попередньою порадою часто змінювати свій HTML.

  • Міняйте це також часто, оскільки скребки з часом навчаться цього уникати. Змініть URL-адресу та текст медом. Також хочеться розглянути можливість зміни вбудованого CSS, який використовується для приховування, і використовувати атрибут ID та зовнішній CSS замість цього, оскільки скрепери навчаться уникати всього, що має styleатрибут із CSS, який використовується для приховування вмісту. Також спробуйте лише ввімкнути це іноді, тому скрепер працює спочатку, але через деякий час виходить з ладу. Це стосується і попередньої поради.

  • Зловмисники можуть перешкоджати доступу реальних користувачів, поділившись посиланням на ваш медовий горщик або навіть вставляючи його десь як зображення (наприклад, на форумі). Часто змінюйте URL-адресу та робіть будь-який час заборони відносно коротким.

Подавайте підроблені та марні дані, якщо виявите скрепер

Якщо ви виявите, що, очевидно, скрепер, ви можете подавати підроблені та марні дані; це пошкодить дані, які скрепер отримує з вашого веб-сайту. Вам також слід унеможливити відмежування таких підроблених даних від реальних даних, щоб скрепери не знали, що їх накручують.

Як приклад: у вас є веб-сайт з новинами; якщо ви виявите скрепер, замість того, щоб блокувати доступ, подайте підроблені, випадково створені статті, і це отруїть дані, які отримує скрепер. Якщо ви зробите свої підроблені дані, не відмінні від реальних, вам буде важко скреперам отримати те, що вони хочуть, а саме фактичні, реальні дані.

Не приймайте запити, якщо Агент користувача порожній / відсутній

Часто ліниво написані скребки не надсилають заголовка агента користувача зі своїм запитом, тоді як усі браузери, а також павуки пошукової системи.

Якщо ви отримаєте запит, у якому немає заголовка 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, це може бути скребок.

Не забувайте, що боти пошукових систем, старовинні мобільні пристрої, зчитувачі екранів та неправильно налаштовані пристрої можуть також не вимагати активів.

Використовувати та вимагати печиво; використовувати їх для відстеження дій користувачів та скрепера.

Ви можете вимагати включення файлів cookie для перегляду вашого веб-сайту. Це відлякує недосвідчених і новачків скреперів, однак для скрепера легко надіслати файли cookie. Якщо ви користуєтесь ними та вимагаєте їх, ви можете відстежувати дії користувачів та скреперів із ними, і таким чином реалізовувати обмеження швидкості, блокування чи показ каптачів на кожного користувача замість основи на основі IP-адреси.

Наприклад: коли користувач здійснює пошук, встановіть унікальний cookie-ідентифікатор. Коли переглядаються сторінки результатів, перевірте це 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 кінцевих точок, які він використовує.

  • Скребки можуть скребати інші скребки: Якщо на одному веб-сайті є вміст, зібраний з вашого, інші скребки можуть скребти з веб-сайту цього скрепера.

Подальше читання:


11
Це привело мене сюди. Досить вражаюча відповідь. Також досить дивовижна історія перегляду. Дякую за пост. Ви отримуєте нагороду. Не лише через докладених до цього зусиль, а тому, що це для мене корисно.
DaveTheMinion

1
Чудова відповідь! Ось кілька думок. A real browser will (almost always) request and download assets such as images and CSSтакож стосується читачів доступності? CAPTCHA порушена, тому принаймні професійні послуги, ймовірно, не перешкоджають цьому. Використання файлів cookie вимагає сповіщення / згоди в ЄС. Find a balance between usability for real users and scraper-proofnessтакож збалансувати час / складність програмування проти фінансової вигоди.
Ерік Дж.

5
@JonH, Якщо вони зацікавлені, вони прочитають його. Крім того, я розбив його на абзаци з заголовками та підзаголовками, тому люди можуть сканувати його та читати потрібні їм частини. Насправді існує дуже багато подібних довгих відповідей на ПС, і люди їх читають.
JonasCz

2
@JoshCrozier - Я просто думаю, що сайти на кшталт цього не грають добре з такою інформацією. Я не кажу, що інформація погана.
JonH

2
PS Мій стеганографічний відбиток контенту ідеї, можливо, може бути використаний у суді. Уявіть собі шок, коли ви докажете, що володар ваших даних отримав їх від вас, завдяки унікальним характеристикам безпосередньо в даних ...
ErikE

241

Я припускаю, що ви поставили robots.txt.

Як зазначали інші, скребки можуть підробляти майже кожен аспект своєї діяльності, і, ймовірно, дуже важко визначити запити, які надходять від поганих хлопців.

Я б врахував:

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

Це може допомогти вам швидко визначити запити скреперів, які явно не враховують ваші robots.txt.

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


48
Раніше я бачив цю техніку, яку називали "медоносом". Це техніка, яка також застосовується при фільтрації спаму, де ви ставите адресу електронної пошти на сторінку, але приховуєте її або даєте зрозуміти, що люди не надсилають законну пошту. Потім збирайте IP-адресу будь-якого поштового сервера, який доставляє пошту на цю адресу.
thomasrutter

12
Це передбачає, що вони сканують посилання. Більшість скреперів спробують подати якусь форму та скребки повернутих даних.
Байрон Вітлок

9
Я бачив медові горщики на основі Perl для електронної пошти, які містять посилання на інші "сторінки", що генеруються сценарієм Perl. Законні боти, які читають robots.txt, не дивляться на це, і це приховано від користувачів за допомогою CSS, але скребки (або комбайни електронної пошти) швидко потрапляють у дерево нескінченної глибини сторінок, у них всі погані дані. Покладіть посилання на сценарій прямо на початку кожної сторінки.
Стівен П

18
Ще одна дивовижна річ, яку потрібно підкинути для медоносних горщиків, - це підривання (або блукання). Це стара методика, яку я люблю - коли ви виявляєте поганого хлопця, ви доводите його до спаму / скреблінгу, цілеспрямовано тримаючи його зв’язки настільки довго, наскільки це фізично можливо, не вимикаючи їх. Звичайно, це може попередити їх, що ви також на них, але, чорт забирай, це весело. en.wikipedia.org/wiki/Teergrubing
матка

11
Єдина проблема з таким підходом полягає в тому, якщо я розміщу [ img] yoursite / jail.html [/ img] на популярному форумі. Ви отримаєте тонни IP-адрес, зафіксованих у вашій системі, і важко буде відфільтрувати, хто з них поганий. Якщо ви хочете запобігти такій речі, вам потрібно додати маркер, пов’язаний з IP-адресою, в URL-адресу. Щось на кшталт jail.php? T = hoeyvm, і в базі даних ви маєте асоціацію hoeyvm та IP, які запросили сторінку.
HoLyVieR

48

Сью їх.

Серйозно: Якщо у вас є гроші, поговоріть з добрим, хорошим, молодим юристом, який знає їхній шлях по Інтернету. Ви справді могли щось зробити тут. Залежно від того, де розміщені сайти, у вашої країни адвокат може написати адвокат про припинення дії або його еквівалент. Можливо, ви зможете хоча б налякати сволотів.

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

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

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


9
працює лише в країнах із міцними правовими рамками.
TomL

3
Юристи процвітають на конфлікті - і отримують від цього прибуток. Рідко, якщо коли-небудь адвокат порадить вам не звертатися до суду. Кожен, хто має, скаже вам, що виграш і програш не має нічого спільного з прекрасними поняттями «справедливості», крім аргументів, настроїв та упередженості в день. Пам’ятайте, якщо це піде не так, ви можете нести відповідальність не тільки за витрати свого адвоката, але й за інші сторони, і якщо вони вирішать подати позов - добре. Ви можете легко втратити свій будинок та будь-які інші активи у своєму житті. Я б не запропонував азартні ігри. Я рекомендую вам уникати судів за будь-яку ціну.
Френкі

3
Я згоден з @TomL. Якщо вони є на Заході, це дещо правдоподібно. Але якщо вони знаходяться в Індії / Китаї / Росії / Україні / що завгодно - то, серйозно, мінімум до жодних випадків. Я можу сказати про російські суди: вони навіть не будуть заважати працювати з вашими позовами.
Highstaker

35

Ви не можете зробити нічого, щоб повністю запобігти цьому. Скребки можуть підробляти свого користувальницького агента, використовувати декілька IP-адрес тощо і виглядати як звичайний користувач. Єдине, що ви можете зробити, це зробити текст недоступним під час завантаження сторінки - зробити його зображенням, спалахом або завантажити його JavaScript. Однак перші два - це погані ідеї, і остання буде проблемою доступності, якщо JavaScript не буде ввімкнено для деяких ваших постійних користувачів.

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

Хоча є якась надія. Скребки покладаються на те, що дані вашого веб-сайту мають відповідність формату. Якщо ви можете якось їх рандомізувати, це може зламати їх скребок. Такі речі, як зміна ідентифікаторів або назв класів елементів сторінки при кожному завантаженні тощо. Але це ще велика робота, і я не впевнений, чи варто цього. І навіть тоді вони могли, мабуть, обійти його з достатньою відданістю.


14
Створення системи, яка обмежує кількість сторінок, на які може переглядати IP-адреса за хвилину, є гарним злом, оскільки скребки екрана прорвуть сайт набагато швидше, ніж будь-який звичайний чоловік.
TravisO

Домовились. IP-адреси коштують грошей і обмежені більшістю компаній-хостингів.
Тал Вайс

re: "Такі речі, як зміна ідентифікаторів або назв класів елементів сторінки при кожному завантаженні тощо". Це не так вже й погано, якщо ви створюєте ім'я класу через PHP, а потім просто використовуєте <div class = "<? Php echo $ myPHPGeneratedClassName;?>"> Ви можете навіть використовувати в ньому випадкові рядки, щоб зробити його абсолютно унікальним. Все, що заважає їм знаходити шаблони, значно важче розбирають з DOM.
ніггель

Знайти IP не важко. Існує безліч проксі, друзів, робочих комп'ютерів, шкільних комп'ютерів, бібліотечних комп'ютерів ...
Incognito

@ user257493: Це правда, але ми говоримо про когось, хто записує дані тут. Швидше за все , вони не збираються йти до цього особливих зусиль тільки для збору врожаю даних. І якщо вони зроблять це, ви з часом вичерпаєте постачання IP-адрес.
ryeguy

31

Надайте API XML для доступу до своїх даних; таким простим у використанні способом. Якщо люди захочуть ваші дані, вони отримають їх, ви також можете вийти назовні.

Таким чином ви зможете ефективно надати підмножину функціональних можливостей, гарантуючи, що, принаймні, скребки не будуть забивати HTTP-запити та велику кількість пропускної здатності.

Тоді все, що вам потрібно зробити, - це переконати людей, які хочуть, щоб ваші дані користувалися API. ;)


3
Це здається дуже розумним. Скрабання екрана важко запобігти, і якщо ви надаєте API, ви можете покласти на нього деякі обмеження, додати повідомлення ("Вміст від ----.com") і в основному контролювати, які дані надаються.
alecwh

6
@alecwh: і платити за доступ!
Андре Карон

3
Я нагородив вас винагородою, почасти тому, що Інтернет був би набагато кращим, якби кожен веб-сайт робив це. Будемо сподіватися, що це стане більш поширеним.
JonasCz

1
Як тільки ви
змусите

Я одна така людина з протилежного боку цієї розмови. Я будую моделі для шоу на Бродвеї і мушу чистити всі свої дані, а не акуратно отримувати доступ.
Яаков

22

Вибачте, це дійсно досить важко зробити ...

Я б запропонував вам ввічливо попросити їх не використовувати ваш контент (якщо ваш вміст захищений авторським правом).

Якщо це так, і вони не знімають його, то ви можете вжити фургурних дій і надіслати їм лист про припинення і відмову .

Як правило, все, що ви робите для запобігання вискоблювання, можливо, призведе до більш негативного ефекту, наприклад, доступності, ботів / павуків тощо.


12

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

Але ви все одно можете зробити кілька речей, і це може бути афективно для 60-70% скребтів ботів.

Складіть сценарій перевірки, як показано нижче.

Якщо певна IP-адреса відвідує дуже швидко, після кількох відвідувань (5-10) введіть її IP-адресу + інформацію про браузер у файл або базу даних.

Наступний крок

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

Випадок 1. Якщо Агент користувача має відому пошукову систему, таку як Google, Bing , Yahoo (ви можете знайти більше інформації про користувацьких агентів, переглянувши його). Тоді ви повинні побачити http://www.iplists.com/ . Цей список і спробуйте відповідати шаблонам. І якщо це здається підробленим користувальницьким агентом, тоді попросіть заповнити CAPTCHA при наступному відвідуванні. (Вам потрібно трохи більше вивчити IP-адреси ботів. Я знаю, що це досяжно, а також спробувати хтось із IP-адреси. Це може бути корисно.)

Випадок 2. Немає користувацького агента пошукового бота: Просто попросіть заповнити CAPTCHA при наступному відвідуванні.


+1 Використання iplists.com - відмінна ідея
Даніель Треббіен

10

Пізня відповідь - і ця відповідь, ймовірно, не є тією, яку ви хочете почути ...

Я вже написав багато (багато десятків) різних спеціалізованих скребків з видобутку даних. (тільки тому, що мені подобається філософія "відкритих даних").

Ось вже багато порад в інших відповідях - тепер я буду грати роль адвоката диявола і розширюватимуть та / або коригуватимуть їх ефективність.

Спочатку:

  • якщо хтось дійсно хоче ваших даних
  • ви не можете ефективно (технічно) приховати свої дані
  • якщо дані мають бути загальнодоступними для ваших "постійних користувачів"

Намагання використовувати деякі технічні бар'єри не варте неприємностей, викликаних:

  • постійним користувачам, погіршуючи їхній досвід роботи
  • регулярні та бажані боти (пошукові системи)
  • тощо ...

Звичайний HMTL - найпростіший спосіб розбору простих HTML-сторінок, з чітко визначеною структурою та класами css. Наприклад, досить перевірити елемент за допомогою Firebug і використовувати правильний Xpaths та / або CSS шлях у моєму скребку.

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

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

Ви не можете змінити структуру для кожної відповіді, тому що ваші постійні користувачі будуть ненавидіти вас. Також це спричинить більше проблем для вас (технічного обслуговування), а не для скребка. Шлях XPath або CSS визначається за допомогою сценарію скребки з відомого вмісту.

Аякс - трохи важче на початку, але багато разів прискорює процес вискоблювання :) - чому?

Аналізуючи запити та відповіді, я просто налаштовую власний проксі-сервер (написаний в perl) і мій firefox використовує його. Звичайно, оскільки це мій власний проксі - він повністю прихований - цільовий сервер розглядає його як звичайний браузер. (Отже, ніяких X-Forwarded-for та таких заголовків). Виходячи з журналів проксі, здебільшого можна визначити "логіку" запитів ajax, наприклад, я міг пропустити більшість html-скреблівок і просто використовувати добре структуровані відповіді на ajax (переважно у форматі JSON).

Отже, аякс не дуже допомагає ...

Дещо складнішими є сторінки, на яких використовуються багато упакованих функцій javascript .

Тут можливе використання двох основних методів:

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

Таке скребкування відбувається повільно (вискоблювання робиться, як у звичайному браузері), але це так

  • дуже простий у налаштуванні та використанні
  • і з цим протистояти майже неможливо :)
  • і "повільність" все одно потрібна для протидії "блокуванню швидких запитів на основі IP-адрес"

User-Agent фільтрації на основі не допомагає взагалі. Будь-який серйозний медодавець встановить його на якийсь правильний у своєму скребку.

Вимагати входу - не допомагає. Найпростіший спосіб перемогти його (без будь-якого аналізу та / або скриптування протоколу входу) - це просто увійти на сайт як звичайний користувач, використовуючи Mozilla і після цього просто запустити скрепер на основі Mozrepl ...

Пам'ятайте, що вхід вимагає анонімних ботів, але не допомагає проти того, хто хоче скребкувати ваші дані. Він просто зареєструється на вашому сайті як звичайний користувач.

Використання кадрів також не дуже ефективно. Цим користуються багато служб живих фільмів, і це не дуже важко перемогти. Кадри - це просто ще одна сторінка HTML / Javascript, необхідна для аналізу ... Якщо дані варті проблем - майстер даних зробить необхідний аналіз.

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

Дуже важко записувати дані, заховані в зображеннях. (наприклад, просто перетворення даних у зображення на стороні сервера). Використання "tesseract" (OCR) допомагає багато разів - але, чесно кажучи, - дані повинні вартувати неприємностей для скрепера. (що багато разів не варто).

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

Найскладнішими є сайти, які використовують аплети Java або Flash , і аплет використовує захищені https- запити внутрішньо . Але подумайте двічі - наскільки щасливими будуть ваші користувачі iPhone ...;). Тому в даний час дуже мало сайтів використовують їх. Сам я, блокуючи весь вміст флеш у моєму браузері (у звичайних сесіях перегляду) - і ніколи не використовуючи сайти, які залежать від Flash.

Ваші віхи можуть бути ..., тож ви можете спробувати цей метод - просто пам’ятайте - ви, ймовірно, втратите деяких своїх користувачів. Також пам’ятайте, що деякі файли SWF можна декомпілювати. ;)

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

Напевно, не потрібно продовжувати - ви вже потрапили до картини.

Тепер, що вам потрібно зробити:

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

Тому,

  • зробити ваші дані легко доступними - за допомогою деяких API
    • це дозволяє легко отримати доступ до даних
    • наприклад, вивантажте ваш сервер від вискоблювання - добре для вас
  • налаштування правильних прав на користування (наприклад, потрібно вказати джерело)
  • Пам'ятайте, багато даних не можуть захищати авторські права - і їх важко захистити
  • додайте кілька підроблених даних (як ви вже зробили) та скористайтеся юридичними інструментами
    • як уже говорили інші, надішліть "лист про припинення і відступ"
    • інші юридичні дії (позов тощо), ймовірно, є надто дорогими і важкими для виграшу (особливо щодо сайтів, які не входять у США)

Подумайте двічі, перш ніж ви спробуєте використовувати деякі технічні бар'єри.

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

Також злодії даних не схожі на звичайних злодіїв.

Якщо ви купуєте недорогу домашню сигналізацію та додаєте попередження «цей будинок підключений до міліції» - багато злодіїв навіть не намагатимуться ввірватися. Тому що один неправильний хід ним - і він збирається до в'язниці ...

Отже, ви вкладаєте лише кілька доларів, але злодій вкладає та багато ризикує.

Але злодій даних не має таких ризиків. навпаки - якщо ви зробите один неправильний крок (наприклад, якщо ви введете якусь помилку внаслідок технічних бар'єрів), ви втратите своїх користувачів. Якщо бот для вискоблювання не працюватиме вперше, нічого не станеться - майстер даних просто спробує інший підхід та / або налагодить сценарій.

У цьому випадку вам потрібно вкласти набагато більше - а скрепер інвестувати набагато менше.

Просто подумайте, куди ви хочете вкласти свій час та енергію ...

Ps: англійська мова не є моєю рідною - тож пробачте мою розбиту англійську ...


@Parapluie Ви дійсно повинні прочитати про Безкоштовний контент та / або про модель з відкритим кодом - про дати, історію, цілі та етику. І особливо про відкриті дані - для яких я створив більшість своїх скребків ...
jm666

Я розумію цю концепцію, хоча дякую вам за ваші ерудовані рекомендації. Ми, можливо, мали про це цікаву розмову; але, схоже, мій оригінальний коментар був видалений третьою стороною. І так, чи ми справді вільні?
Parapluie

8

З технічної точки зору: просто моделюйте те, що робить Google, коли ви отримуєте за них занадто багато запитів одночасно. Це повинно зупинити багато цього.

З юридичної точки зору. Це здається, що дані, які ви публікуєте, не є власними. Це означає, що ви публікуєте імена та статистику та іншу інформацію, яка не може бути захищена авторським правом.

Якщо це так, скребки не порушують авторські права шляхом перерозподілу вашої інформації про ім’я виконавця тощо. Однак вони можуть порушувати авторські права під час завантаження вашого веб-сайту в пам'ять, оскільки на його веб-сайті містяться елементи, захищені авторським правом (наприклад, макет тощо).

Рекомендую почитати про Facebook v. Power.com та переглянути аргументи, якими користувався Facebook, щоб зупинити вичісування екрана. Існує багато законних способів, які можна намагатися не допустити, щоб хтось скребав ваш веб-сайт. Вони можуть бути далекосяжними і образними. Іноді суди купують аргументи. Іноді цього не роблять.

Але, припускаючи, що ви публікуєте інформацію про загальнодоступний домен, яку не можна захистити авторськими правами, як імена та основні статистичні дані ... ви повинні просто відпустити це на ім'я вільної мови та відкритих даних. Тобто, про що все в Інтернеті.


1
Незважаючи на те, що ви, можливо, не зможете захистити авторські права на інформацію, ви, безумовно, можете поставити застереження про скрап в умовах використання. Потім надішліть листа про припинення та відмову від порушення умов використання.
Андре Карон

1
Вільне слово та відкриті дані - це справді дух Інтернету!
Ciara

Так, вільна мова і все це. Але скрепери цілком можуть витрачати значну кількість бюджету або пропускної здатності ОП, а також копіювати дані, що не підлягають копіюванню.
jpaugh

8

Речі, які можуть працювати проти початкових скреперів:

  • Блокування IP-адреси
  • використовувати багато аяксу
  • перевірити заголовок запиту реферала
  • вимагати входу

Те, що допоможе в цілому:

  • щотижня змінюйте макет
  • robots.txt

Те, що допоможе, але змусить вас ненавидіти користувачів:

  • капчу

8

Я зробив багато веб-скребтування та узагальнив деякі методи зупинення веб-скребків у своєму блозі, виходячи з того, що мені дратує.

Це компроміс між вашими користувачами та скребками. Якщо ви обмежуєте IP-адреси, використовуєте CAPTCHA, вимагаєте входу в систему і т. Д., Вам важко зробити скрепери. Але це також може відігнати справжніх користувачів.


8

На жаль, ваш найкращий варіант, на жаль, досить ручний: шукайте схеми трафіку, які, на вашу думку, вказують на скребки та забороняють їх IP-адреси.

Оскільки ви говорите про загальнодоступний сайт, то, якщо зробити пошукову машину зручною, сайт також зробить її зручною. Якщо пошукова система може сканувати і вишкребти ваш сайт, тоді може також і шкідливий скрепер. Це тонка лінія ходити.


4
Блокування ІР уповільнить скрепер, але це також багато роботи для вашого сервера. Скажімо, я забиваю вас на 1000 проксі, я все ще отримав потрібні дані, і тепер ваш брандмауер безлад.
pguardiario

1
Коли ви це зробите, вони будуть йти горизонтально на вас. 100000 адрес сьогодні нічого не коштує для них, але сповільнює ваш сайт, якщо ви спробуєте заборонити їх усім - і вони повертатимуть IP-адреси, щоб не відвідувати більше одного або двох разів
mplungjan

6

Звичайно, це можливо. Для 100% успіху зніміть свій сайт в автономному режимі.

Насправді ви можете зробити деякі речі, які роблять вичісування трохи складніше. Google перевіряє веб-переглядач, щоб переконатися, що ви не робот, чистить результати пошуку (хоча це, як і більшість усього іншого, можна підробити).

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

Я впевнений, що є кілька інших людей, які мають набагато більше досвіду, але сподіваюся, що ці ідеї принаймні дещо корисні.


6

Є кілька речей, щоб спробувати запобігти вискоблюванню екрана. Деякі не дуже ефективні, тоді як інші (CAPTCHA) є, але перешкоджають застосуванню. Ви також повинні пам’ятати, що це може перешкоджати законним скреперам сайтів, таким як індекси пошукових систем.

Однак я припускаю, що якщо ви не хочете, щоб це було скреблено, це означає, що ви також не хочете, щоб пошукові системи його індексували.

Ось декілька речей, які можна спробувати:

  • Покажіть текст на зображенні. Це досить надійно і менше не загрожує користувачеві, ніж CAPTCHA, але означає, що вони не зможуть різати та вставляти, і це не зможе чітко масштабуватись або бути доступним.
  • Використовуйте CAPTCHA та вимагайте його заповнити перед поверненням сторінки. Це надійний метод, але і найбільший біль, який накладають користувачеві.
  • Попросіть користувача зареєструватися в обліковому записі перед переглядом сторінок та підтвердити свою електронну адресу. Це буде досить ефективно, але не зовсім - екран-скрепер може створити обліковий запис і, можливо, вміло запрограмувати їх сценарій для входу в них.
  • Якщо рядок-агент-агент клієнта порожній, заблокуйте доступ. Сценарій скребкування сайту часто буде ліниво запрограмований і не встановлюватиме рядок агент-користувача, тоді як всі веб-браузери будуть.
  • Ви можете встановити чорний список відомих рядків користувацьких агентів скрепера екрану під час їх виявлення. Знову ж, це допоможе лише ліниво закодованим; програміст, який знає, що він робить, може встановити рядок агента користувача, щоб представити себе веб-браузером.
  • Часто змінюйте шлях до URL-адреси. Коли ви зміните його, переконайтеся, що старий продовжує працювати, але лише до тих пір, поки один користувач може відкрити свій браузер. Не важко передбачити, яким буде новий шлях до URL-адреси. Це буде ускладнити сценарії, щоб захопити його, якщо їх URL-адреса жорстко закодована. Найкраще це зробити за допомогою якогось сценарію.

Якби мені довелося це зробити, я, мабуть, використовував би комбінацію останніх трьох, оскільки вони мінімізують незручності для законних користувачів. Однак вам доведеться погодитись, що ви не зможете заблокувати всіх таким чином, і як тільки хтось зрозуміє, як його обійти, він зможе його назавжди зішкребти. Тоді ви можете просто спробувати заблокувати їхні IP-адреси, коли ви їх виявите.


6
  1. Ні, зупинитись не можна (жодним чином)
  2. Прийняти це. Чому б не опублікувати як RDFa і не стати зручною для пошукової системи та заохотити повторне використання даних? Люди будуть дякувати вам і надаватимуть належний кредит (див. Приклад musicbrainz).

Напевно, ви не хочете відповіді, але навіщо ховати те, що ви намагаєтесь оприлюднити?


5

Спосіб перший (лише для невеликих сайтів):
подавати зашифровані / закодовані дані.
Я пробиваю Інтернет за допомогою python (urllib, запити, beautifulSoup тощо) та знайшов багато веб-сайтів, які подають зашифровані / закодовані дані, які не можуть бути розшифровані в будь-якій мові програмування просто тому, що метод шифрування не існує.

Я домігся цього на веб-сайті PHP, зашифрувавши та мінімізувавши вихід (ПОПЕРЕДЖЕННЯ: це не гарна ідея для великих сайтів), відповідь завжди змішувався контентом.

Приклад мінімізації виводу в PHP ( Як мінімізувати html-вихід з PHP-сторінки? ):

<?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"
}

2

Замість того, щоб ботів у чорному списку, можливо, вам слід додати їх у білий список. Якщо ви не хочете вбивати результати пошуку для перших кількох двигунів, ви можете додати до списку їхніх рядків користувацьких агентів, які, як правило, широко розрекламовані. Менш етичні боти, як правило, створюють рядки популярних веб-браузерів. Кілька перших пошукових систем повинні привертати 95% вашого трафіку.

Ідентифікація самих ботів має бути досить простою, використовуючи методи, запропоновані іншими плакатами.


2

Швидким підходом до цього було б встановити пастку "бобі" / бота.

  1. Створіть сторінку, яка, якщо вона відкрита певну кількість разів або взагалі відкрита, збиратиме певну інформацію, наприклад, IP та інше (ви також можете враховувати нерівності або шаблони, але цю сторінку взагалі не потрібно відкривати).

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

  3. У вашому файлі robots.txt встановіть цілу купу правил заборони на сторінки, на яких ви не бажаєте дружніх ботів (LOL, як у них щасливі обличчя!), Щоб збирати інформацію та встановлювати цю сторінку як одну з них.

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

  5. Збирайте IP цих ботів або будь-кого, хто заходить на ці сторінки, не забороняйте їх, але створіть функцію для відображення тексту, що поширюється у вашому вмісті, як-от випадкові номери, повідомлення про авторські права, конкретні текстові рядки, відображення страшних зображень, в основному будь-що, що перешкоджає вашим хороший зміст. Ви також можете встановити посилання, які вказують на сторінку, яка вічно завантажиться, тобто. у php ви можете використовувати функцію сну (). Це дозволить відбити сканер назад, якщо він має якесь виявлення для обходу сторінок, які занадто довго завантажуються, оскільки деякі добре написані боти встановлюються для обробки кількості X посилань одночасно.

  6. Якщо ви створили конкретні текстові рядки / пропозиції, чому б не зайти в улюблену пошукову систему і шукати їх, це може показати вам, де закінчується ваш вміст.

У будь-якому випадку, якщо ви думаєте тактично та креативно, це може бути гарною відправною точкою. Найкраще було б дізнатися, як працює бот.

Я б також подумав про шахрайство з деякими ідентифікаторами або способами відображення атрибутів на елементі сторінки:

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

що змінює свою форму щоразу, оскільки деякі боти можуть бути налаштовані на пошук конкретних шаблонів на ваших сторінках або націлених елементів.

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

id="p-12802" > id="p-00392"

1
Ви не просто хочете їх заборонити, ви хочете повністю з ними заграти ... Я люблю це!
Зойдберг

Неприхована заборона - це саме те, про що я думав (він же тіньовий банінг, пекло заборона).
ЕрікЕ

1

Ви не можете зупинити нормальне вискоблювання екрана. На краще чи гірше - це природа Інтернету.

Ви можете зробити так, щоб ніхто не мав доступу до певних речей (включаючи музичні файли), якщо вони не зареєстровані як зареєстрований користувач. В Apache це зробити не надто складно . Я припускаю, що це буде не надто складно зробити і в IIS.


1

Одним із способів було б подавати вміст у вигляді атрибутів XML, рядків, що кодуються URL-адресами, попередньо відформатованого тексту з кодованим HTML JSON або URI даних, а потім перетворити його на HTML на клієнті. Ось кілька сайтів, які роблять це:

  • Skechers : XML

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

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

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

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

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Амазонка : Ледаче завантаження

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

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

Якщо ви переглядаєте джерело будь-якого з перерахованих вище, ви бачите, що скреблінг просто поверне метадані та навігацію.


Отже ... такий підхід робить скреблінг ще простішим, оскільки вміст зараз в єдиному форматі. Насправді це вже не називалося б скребком : це називається розбір , і це дійсно дуже просто зробити програмно.
jpaugh

1

Більшість вже було сказано, але ви вважали захист CloudFlare? Я маю на увазі це:

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

Інші компанії, ймовірно, роблять це теж, CloudFlare - єдиний, кого я знаю.

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


1

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


0

Якщо помістити свій вміст за капчу, це означатиме, що роботам буде важко отримати доступ до вашого вмісту. Однак людині було б незручно, так що це може бути небажаним.


0

Якщо ви хочете побачити чудовий приклад, перегляньте http://www.bkstr.com/ . Вони використовують алгоритм aj / s для встановлення файлу cookie, а потім перезавантажує сторінку, щоб вона могла використовувати файл cookie для перевірки того, що запит виконується в браузері. Настільний додаток, створений для вискоблювання, безумовно, може отримати це, але це зупинить більшість вискоблювання типу CURL


0

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

Однак ви можете приховати критичну частину своїх даних, використовуючи логіку презентації, що не заснована на HTML

  • Створіть файл Flash для кожного виконавця / альбому тощо.
  • Створіть зображення для кожного вмісту виконавця. Може бути достатньо лише зображення для імені виконавця тощо. Зробіть це, переклавши текст на файл JPEG / PNG на сервері та зв’язавшись із цим зображенням.

Майте на увазі, що це, мабуть, вплине на ваш пошуковий рейтинг.


0

Створіть HTML, CSS та JavaScript. Легше писати генератори, ніж парсери, тому ви можете генерувати кожну подану сторінку по-різному. Ви більше не можете використовувати кеш або статичний вміст.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.