Примітка: Оскільки повна версія цієї відповіді перевищує межу довжини переповнення стека, вам потрібно буде перейти до 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, періодично та випадковим чином, наприклад. додавання додаткових 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.
Гвинт за допомогою скребка: Вставте на свою сторінку підроблені, невидимі дані медового горщика
Додавши до попереднього прикладу, ви можете додати в свій 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 кінцевих точок, які він використовує.
Скребки можуть скребати інші скребки: Якщо на одному веб-сайті є вміст, зібраний з вашого, інші скребки можуть скребти з веб-сайту цього скрепера.
Подальше читання: