Catatan: Karena versi lengkap dari jawaban ini melebihi batas panjang Stack Overflow, Anda harus menuju ke GitHub untuk membaca versi yang diperluas, dengan lebih banyak tips dan detail.
Untuk mencegah pengikisan (juga dikenal sebagai Webscraping , Screenscraping , penambangan data Web , pemanenan Web , atau ekstraksi data Web ), membantu mengetahui cara kerja pengikis ini, dan, dengan ekstensi, apa yang mencegah mereka bekerja dengan baik.
Ada berbagai jenis scraper, dan masing-masing bekerja secara berbeda:
Laba-laba, seperti bot Google atau mesin fotokopi situs web seperti HTtrack , yang secara rekursif mengikuti tautan ke halaman lain untuk mendapatkan data. Ini kadang-kadang digunakan untuk goresan bertarget untuk mendapatkan data tertentu, sering kali dikombinasikan dengan parser HTML untuk mengekstrak data yang diinginkan dari setiap halaman.
Skrip Shell: Terkadang, alat Unix umum digunakan untuk mengikis: Wget atau Curl untuk mengunduh halaman, dan Grep (Regex) untuk mengekstrak data.
Pengurai HTML, seperti yang berbasis pada Jsoup, Scrapy , dan lainnya. Mirip dengan yang berbasis shell-script regex, ini bekerja dengan mengekstraksi data dari halaman berdasarkan pola dalam HTML, biasanya mengabaikan yang lainnya.
Misalnya: Jika situs web Anda memiliki fitur pencarian, scraper tersebut dapat mengirimkan permintaan untuk pencarian, dan kemudian mendapatkan semua tautan hasil dan judulnya dari halaman hasil HTML, untuk secara khusus hanya mendapatkan tautan hasil pencarian dan judulnya . Ini adalah yang paling umum.
Screenscrapers, berdasarkan mis. Selenium atau PhantomJS , yang membuka situs web Anda di browser nyata, menjalankan JavaScript, AJAX, dan sebagainya, dan kemudian mendapatkan teks yang diinginkan dari halaman web, biasanya dengan:
Mendapatkan HTML dari browser setelah halaman Anda dimuat dan JavaScript telah berjalan, dan kemudian menggunakan parser HTML untuk mengekstrak data yang diinginkan. Ini adalah yang paling umum, dan begitu banyak metode untuk memecahkan parser / pencakar HTML juga berfungsi di sini.
Mengambil tangkapan layar dari halaman yang diberikan, dan kemudian menggunakan OCR untuk mengekstrak teks yang diinginkan dari tangkapan layar. Ini jarang terjadi, dan hanya pencakar khusus yang benar-benar menginginkan data Anda yang akan mengaturnya.
Layanan pembuatan web seperti ScrapingHub atau Kimono . Bahkan, ada orang yang tugasnya mencari tahu cara mengikis situs Anda dan mengeluarkan konten untuk digunakan orang lain.
Tidak mengherankan, layanan mengikis profesional adalah yang paling sulit untuk dihindarkan, tetapi jika Anda membuatnya sulit dan menghabiskan waktu untuk mencari cara untuk mengikis situs Anda, ini (dan orang-orang yang membayar mereka untuk melakukannya) mungkin tidak akan repot untuk mengikis situs web Anda.
Menyematkan situs web Anda di laman situs lain dengan bingkai , dan menyematkan situs Anda di aplikasi seluler.
Meskipun tidak menggores secara teknis, aplikasi seluler (Android dan iOS) dapat menyematkan situs web, dan menyuntikkan CSS dan JavaScript khusus, sehingga sepenuhnya mengubah tampilan halaman Anda.
Copy-paste manusia: Orang-orang akan menyalin dan menempel konten Anda untuk menggunakannya di tempat lain.
Ada banyak tumpang tindih antara berbagai jenis pengikis ini, dan banyak pengikis akan berperilaku sama, bahkan jika mereka menggunakan teknologi dan metode yang berbeda.
Tip-tip ini sebagian besar ide saya sendiri, berbagai kesulitan yang saya temui saat menulis pencakar, serta potongan-potongan informasi dan ide-ide dari sekitar jalinan.
Cara berhenti mengikis
Anda tidak dapat sepenuhnya mencegahnya , karena apa pun yang Anda lakukan, pengikis yang tekun masih bisa mencari cara untuk mengikis. Namun, Anda dapat menghentikan banyak pengikisan dengan melakukan beberapa hal:
Monitor log & pola lalu lintas Anda; batasi akses jika Anda melihat aktivitas yang tidak biasa:
Periksa log Anda secara teratur, dan jika ada aktivitas yang tidak biasa yang mengindikasikan akses otomatis (pencakar), seperti banyak tindakan serupa dari alamat IP yang sama, Anda dapat memblokir atau membatasi akses.
Secara khusus, beberapa ide:
Pembatasan nilai:
Hanya izinkan pengguna (dan pencakar) untuk melakukan sejumlah tindakan dalam waktu tertentu - misalnya, hanya izinkan beberapa pencarian per detik dari alamat IP atau pengguna tertentu. Ini akan memperlambat pencakar, dan membuatnya tidak efektif. Anda juga dapat menampilkan captcha jika tindakan diselesaikan terlalu cepat atau lebih cepat daripada yang dilakukan pengguna sungguhan.
Mendeteksi aktivitas yang tidak biasa:
Jika Anda melihat aktivitas yang tidak biasa, seperti banyak permintaan serupa dari alamat IP tertentu, seseorang yang melihat jumlah halaman berlebihan atau melakukan pencarian dalam jumlah yang tidak biasa, Anda dapat mencegah akses, atau menunjukkan captcha untuk permintaan berikutnya.
Jangan hanya memantau & batas nilai berdasarkan alamat IP - gunakan indikator lain juga:
Jika Anda memblokir atau menilai batas, jangan hanya melakukannya berdasarkan alamat per-IP; Anda dapat menggunakan indikator dan metode lain untuk mengidentifikasi pengguna atau pencakar tertentu. Beberapa indikator yang dapat membantu Anda mengidentifikasi pengguna / pencakar tertentu meliputi:
Seberapa cepat pengguna mengisi formulir, dan di mana pada tombol mereka mengklik;
Anda dapat mengumpulkan banyak informasi dengan JavaScript, seperti ukuran / resolusi layar, zona waktu, font yang dipasang, dll; Anda dapat menggunakan ini untuk mengidentifikasi pengguna.
Tajuk HTTP dan pesanannya, terutama Agen-Pengguna.
Sebagai contoh, jika Anda mendapatkan banyak permintaan dari satu alamat IP, semua menggunakan Agen Pengguna yang sama, ukuran layar (ditentukan dengan JavaScript), dan pengguna (scraper dalam hal ini) selalu mengklik tombol dengan cara yang sama dan pada interval reguler, itu mungkin scraper layar; dan Anda dapat sementara memblokir permintaan serupa (mis. memblokir semua permintaan dengan agen pengguna dan ukuran layar yang berasal dari alamat IP tertentu), dan dengan cara ini Anda tidak akan merepotkan pengguna nyata pada alamat IP itu, misalnya. dalam hal koneksi internet bersama.
Anda juga dapat mengambil ini lebih jauh, karena Anda dapat mengidentifikasi permintaan serupa, bahkan jika mereka berasal dari alamat IP yang berbeda, menunjukkan pengikisan terdistribusi (pengeruk yang menggunakan botnet atau jaringan proxy). Jika Anda mendapatkan banyak permintaan yang identik, tetapi datang dari berbagai alamat IP, Anda dapat memblokir. Sekali lagi, berhati-hatilah untuk tidak secara tidak sengaja memblokir pengguna nyata.
Ini bisa efektif terhadap pembuat layar yang menjalankan JavaScript, karena Anda bisa mendapatkan banyak informasi dari mereka.
Pertanyaan terkait tentang Security Stack Exchange:
Alih-alih memblokir akses sementara, gunakan Captcha:
Cara sederhana untuk menerapkan pembatasan tingkat adalah dengan memblokir sementara akses untuk waktu tertentu, namun menggunakan Captcha mungkin lebih baik, lihat bagian tentang Captcha lebih jauh ke bawah.
Membutuhkan pendaftaran & masuk
Wajibkan pembuatan akun untuk melihat konten Anda, jika ini layak untuk situs Anda. Ini adalah pencegah yang baik untuk pencakar, tetapi juga pencegah yang baik untuk pengguna nyata.
- Jika Anda memerlukan pembuatan dan login akun, Anda dapat melacak tindakan pengguna dan scraper secara akurat. Dengan cara ini, Anda dapat dengan mudah mendeteksi kapan akun tertentu digunakan untuk mengikis, dan mencekalnya. Hal-hal seperti pembatasan tingkat atau mendeteksi penyalahgunaan (seperti sejumlah besar pencarian dalam waktu singkat) menjadi lebih mudah, karena Anda dapat mengidentifikasi pencakar spesifik, bukan hanya alamat IP.
Untuk menghindari skrip membuat banyak akun, Anda harus:
Membutuhkan alamat email untuk pendaftaran, dan memverifikasi alamat email itu dengan mengirimkan tautan yang harus dibuka untuk mengaktifkan akun. Izinkan hanya satu akun per alamat email.
Membutuhkan captcha yang harus diselesaikan selama pendaftaran / pembuatan akun.
Membutuhkan pembuatan akun untuk melihat konten akan membuat pengguna dan mesin pencari menjauh; jika Anda memerlukan pembuatan akun untuk melihat artikel, pengguna akan pergi ke tempat lain.
Memblokir akses dari cloud hosting dan alamat IP layanan gesekan
Terkadang, pencakar akan dijalankan dari layanan hosting web, seperti Amazon Web Services atau GAE, atau VPSes. Batasi akses ke situs web Anda (atau tunjukkan captcha) untuk permintaan yang berasal dari alamat IP yang digunakan oleh layanan hosting awan tersebut.
Demikian pula, Anda juga dapat membatasi akses dari alamat IP yang digunakan oleh penyedia proxy atau VPN, karena pencakar dapat menggunakan server proxy tersebut untuk menghindari banyak permintaan yang terdeteksi.
Berhati-hatilah dengan memblokir akses dari server proxy dan VPN, Anda akan berdampak negatif pada pengguna nyata.
Jadikan pesan kesalahan Anda tidak jelas jika Anda memblokir
Jika Anda benar-benar memblokir / membatasi akses, Anda harus memastikan bahwa Anda tidak memberi tahu scraper apa yang menyebabkannya, sehingga memberi mereka petunjuk tentang cara memperbaiki scraper mereka. Jadi ide yang buruk adalah menampilkan halaman kesalahan dengan teks seperti:
Terlalu banyak permintaan dari alamat IP Anda, silakan coba lagi nanti.
Kesalahan, tajuk Agen Pengguna tidak ada!
Alih-alih, tampilkan pesan kesalahan yang tidak memberi tahu scraper apa penyebabnya. Sesuatu seperti ini jauh lebih baik:
- Maaf, ada yang tidak beres. Anda dapat menghubungi dukungan melalui
helpdesk@example.com
, jika masalahnya masih ada.
Ini juga jauh lebih ramah pengguna untuk pengguna nyata, jika mereka pernah melihat halaman kesalahan seperti itu. Anda juga harus mempertimbangkan menampilkan captcha untuk permintaan berikutnya alih-alih blok keras, jika pengguna sebenarnya melihat pesan kesalahan, sehingga Anda tidak memblokir dan dengan demikian menyebabkan pengguna yang sah menghubungi Anda.
Gunakan Captcha jika Anda curiga situs web Anda sedang diakses oleh pengeruk.
Captcha ("Tes Otomatis Sepenuhnya untuk Memberitahu Komputer dan Manusia terpisah") sangat efektif untuk menghentikan para pencakar. Sayangnya, mereka juga sangat efektif untuk mengganggu pengguna.
Dengan demikian, mereka berguna ketika Anda mencurigai adanya pengikis yang mungkin, dan ingin menghentikan pengikisan, tanpa juga memblokir akses jika itu bukan pengeruk, tetapi pengguna sungguhan. Anda mungkin ingin mempertimbangkan untuk menampilkan captcha sebelum mengizinkan akses ke konten jika Anda mencurigai adanya pengikis.
Hal-hal yang perlu diperhatikan saat menggunakan Captcha:
Jangan roll sendiri, gunakan sesuatu seperti reCaptcha Google : Ini jauh lebih mudah daripada menerapkan captcha sendiri, itu lebih ramah pengguna daripada beberapa solusi teks kabur dan bengkok Anda mungkin datang dengan diri Anda sendiri (pengguna sering hanya perlu mencentang kotak ), dan itu juga jauh lebih sulit untuk diselesaikan oleh seorang scripter daripada gambar sederhana yang disajikan dari situs Anda
Jangan menyertakan solusi untuk captcha di markup HTML: Saya sebenarnya telah melihat satu situs web yang memiliki solusi untuk captcha di halaman itu sendiri , (meskipun cukup tersembunyi) sehingga membuatnya tidak berguna. Jangan lakukan hal seperti ini. Sekali lagi, gunakan layanan seperti reCaptcha, dan Anda tidak akan memiliki masalah seperti ini (jika Anda menggunakannya dengan benar).
Captcha dapat dipecahkan secara massal: Ada layanan penyelesaian captcha di mana sebenarnya, dibayar rendah, manusia memecahkan captcha dalam jumlah besar. Sekali lagi, menggunakan reCaptcha adalah ide yang bagus di sini, karena mereka memiliki perlindungan (seperti waktu yang relatif singkat bagi pengguna untuk menyelesaikan captcha). Layanan semacam ini tidak mungkin digunakan kecuali data Anda benar-benar berharga.
Sajikan konten teks Anda sebagai gambar
Anda dapat merender teks ke sisi server gambar, dan menyajikannya untuk ditampilkan, yang akan menghalangi pencakar sederhana mengekstraksi teks.
Namun, ini buruk untuk pembaca layar, mesin pencari, kinerja, dan hampir semua hal lainnya. Ini juga ilegal di beberapa tempat (karena aksesibilitas, misalnya Undang-Undang Amerika dengan Disabilitas), dan juga mudah untuk menghindari beberapa OCR, jadi jangan lakukan itu.
Anda dapat melakukan sesuatu yang mirip dengan sprite CSS, tetapi itu mengalami masalah yang sama.
Jangan memaparkan dataset lengkap Anda:
Jika memungkinkan, jangan berikan cara untuk skrip / bot untuk mendapatkan semua dataset Anda. Sebagai contoh: Anda memiliki situs berita, dengan banyak artikel individual. Anda dapat membuat artikel-artikel itu hanya dapat diakses dengan mencarinya melalui pencarian di situs, dan, jika Anda tidak memiliki daftar semua artikel di situs dan URL mereka di mana saja, artikel-artikel itu hanya akan dapat diakses dengan menggunakan pencarian fitur. Ini berarti bahwa skrip yang ingin mendapatkan semua artikel dari situs Anda harus melakukan pencarian untuk semua frasa yang mungkin muncul dalam artikel Anda untuk menemukan semuanya, yang akan memakan waktu, sangat tidak efisien, dan mudah-mudahan akan membuat scraper menyerah.
Ini tidak akan efektif jika:
- Bot / skrip tidak mau / butuh dataset lengkap.
- Artikel Anda disajikan dari URL yang mirip
example.com/article.php?articleId=12345
. Ini (dan hal-hal serupa) yang akan memungkinkan pencakar untuk hanya mengulangi semua articleId
dan meminta semua artikel seperti itu.
- Ada cara lain untuk akhirnya menemukan semua artikel, seperti dengan menulis naskah untuk mengikuti tautan di dalam artikel yang mengarah ke artikel lain.
- Mencari sesuatu seperti "dan" atau "itu" dapat mengungkapkan hampir semuanya, jadi itu adalah sesuatu yang harus diperhatikan. (Anda dapat menghindari ini dengan hanya mengembalikan 10 atau 20 hasil teratas).
- Anda perlu mesin pencari untuk menemukan konten Anda.
Jangan memaparkan API, titik akhir, dan hal-hal serupa Anda:
Pastikan Anda tidak memaparkan API apa pun, bahkan tanpa sengaja. Misalnya, jika Anda menggunakan AJAX atau permintaan jaringan dari dalam Adobe Flash atau Java Applets (God forbid!) Untuk memuat data Anda, sepele untuk melihat permintaan jaringan dari halaman dan mencari tahu ke mana permintaan itu akan pergi, dan kemudian merekayasa balik dan menggunakan titik akhir tersebut dalam program scraper. Pastikan Anda mengaburkan titik akhir Anda dan membuatnya sulit untuk digunakan orang lain, seperti yang dijelaskan.
Untuk mencegah parser dan pencakar HTML:
Karena parser HTML bekerja dengan mengekstraksi konten dari halaman berdasarkan pola yang dapat diidentifikasi dalam HTML, kami dapat dengan sengaja mengubah pola-pola itu di bawah untuk memecahkan pengikis ini, atau bahkan mengacaukannya. Sebagian besar tips ini juga berlaku untuk pencakar lain seperti laba-laba dan pembuat layar juga.
Ubah HTML Anda sesering mungkin
Scrapers yang memproses HTML secara langsung melakukannya dengan mengekstraksi konten dari bagian spesifik dan dapat diidentifikasi dari halaman HTML Anda. Misalnya: Jika semua halaman di situs web Anda memiliki div
id article-content
, yang berisi teks artikel, maka sepele untuk menulis skrip untuk mengunjungi semua halaman artikel di situs Anda, dan mengekstrak teks konten dari article-content
div pada setiap halaman artikel, dan voila, scraper memiliki semua artikel dari situs Anda dalam format yang dapat digunakan kembali di tempat lain.
Jika Anda sering mengubah HTML dan struktur halaman Anda, pencakar seperti itu tidak akan berfungsi lagi.
Anda dapat sering mengubah id dan kelas elemen dalam HTML Anda, bahkan mungkin secara otomatis. Jadi, jika Anda div.article-content
menjadi seperti div.a4c36dda13eaf0
, dan berubah setiap minggu, scraper pada awalnya akan berfungsi dengan baik, tetapi akan rusak setelah seminggu. Pastikan untuk mengubah panjang id / kelas Anda juga, jika tidak scraper akan menggunakan div.[any-14-characters]
untuk menemukan div yang diinginkan sebagai gantinya. Waspadalah terhadap lubang serupa lainnya juga ..
Jika tidak ada cara untuk menemukan konten yang diinginkan dari markup, scraper akan melakukannya dari cara HTML terstruktur. Jadi, jika semua halaman artikel Anda sama dalam setiap div
bagian div
yang muncul setelah h1
konten artikel, pencakar akan mendapatkan konten artikel berdasarkan itu. Sekali lagi, untuk memecahkan ini, Anda dapat menambah / menghapus markup tambahan ke HTML Anda, secara berkala dan acak, misalnya. menambahkan div
s atau s ekstra span
. Dengan pemrosesan HTML sisi server modern, ini seharusnya tidak terlalu sulit.
Hal-hal yang harus diperhatikan:
Ini akan membosankan dan sulit untuk diterapkan, dipelihara, dan di-debug.
Anda akan menghalangi caching. Terutama jika Anda mengubah id atau kelas elemen HTML Anda, ini akan membutuhkan perubahan yang sesuai dalam file CSS dan JavaScript Anda, yang berarti bahwa setiap kali Anda mengubahnya, mereka harus diunduh ulang oleh browser. Ini akan menghasilkan waktu pemuatan halaman yang lebih lama untuk pengunjung yang berulang, dan peningkatan beban server. Jika Anda hanya mengubahnya seminggu sekali, itu tidak akan menjadi masalah besar.
Pengikis yang cerdik masih bisa mendapatkan konten Anda dengan menyimpulkan di mana konten yang sebenarnya, misalnya. dengan mengetahui bahwa satu blok teks besar pada halaman tersebut kemungkinan merupakan artikel yang sebenarnya. Ini memungkinkan untuk tetap menemukan & mengekstrak data yang diinginkan dari halaman. Boilerpipe melakukan ini.
Intinya, pastikan skrip tidak mudah menemukan konten yang sebenarnya diinginkan untuk setiap halaman yang serupa.
Lihat juga Cara mencegah perayap tergantung pada XPath dari mendapatkan konten halaman untuk detail tentang bagaimana ini dapat diimplementasikan dalam PHP.
Ubah HTML Anda berdasarkan lokasi pengguna
Ini agak mirip dengan tip sebelumnya. Jika Anda menyajikan HTML berbeda berdasarkan lokasi / negara pengguna Anda (ditentukan oleh alamat IP), ini dapat memecah pengikis yang dikirimkan ke pengguna. Misalnya, jika seseorang menulis aplikasi seluler yang mengikis data dari situs Anda, itu akan berfungsi dengan baik pada awalnya, tetapi rusak ketika itu sebenarnya didistribusikan kepada pengguna, karena pengguna tersebut mungkin berada di negara yang berbeda, dan dengan demikian mendapatkan HTML yang berbeda, yang mana scraper tertanam tidak dirancang untuk dikonsumsi.
Sering-seringlah mengubah HTML Anda, aktifkan sekrup dengan para pencakar dengan melakukannya!
Contoh: Anda memiliki fitur pencarian di situs web Anda, yang terletak di example.com/search?query=somesearchquery
, yang mengembalikan HTML berikut:
<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)
Seperti yang Anda duga ini mudah untuk dikikis: semua yang perlu dilakukan pengikis adalah menekan URL pencarian dengan kueri, dan ekstrak data yang diinginkan dari HTML yang dikembalikan. Selain mengubah HTML secara berkala seperti dijelaskan di atas, Anda juga dapat meninggalkan markup lama dengan id dan kelas lama, menyembunyikannya dengan CSS, dan mengisinya dengan data palsu, sehingga meracuni scraper. Begini cara halaman hasil pencarian dapat diubah:
<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)
Ini berarti bahwa pencakar yang ditulis untuk mengekstraksi data dari HTML berdasarkan kelas atau ID akan terus bekerja, tetapi mereka akan mendapatkan data palsu atau bahkan iklan, data yang tidak akan pernah dilihat pengguna nyata, karena mereka disembunyikan dengan CSS.
Persetan dengan scraper: Masukkan data honeypot palsu dan tidak terlihat ke halaman Anda
Menambahkan ke contoh sebelumnya, Anda dapat menambahkan item honeypot tidak terlihat ke HTML Anda untuk menangkap pencakar. Contoh yang dapat ditambahkan ke halaman hasil pencarian yang dijelaskan sebelumnya:
<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.)
Pengikis yang ditulis untuk mendapatkan semua hasil pencarian akan mengambil ini, sama seperti yang lainnya, hasil pencarian nyata pada halaman, dan mengunjungi tautan, mencari konten yang diinginkan. Manusia sejati bahkan tidak akan pernah melihatnya di tempat pertama (karena disembunyikan dengan CSS), dan tidak akan mengunjungi tautan. Laba-laba asli dan diinginkan seperti Google tidak akan mengunjungi tautan karena Anda tidak diizinkan /scrapertrap/
di robots.txt Anda.
Anda dapat membuat Anda scrapertrap.php
melakukan sesuatu seperti memblokir akses untuk alamat IP yang mengunjunginya atau memaksa captcha untuk semua permintaan selanjutnya dari IP itu.
Jangan lupa untuk melarang honeypot Anda ( /scrapertrap/
) dalam file robots.txt Anda sehingga bot mesin pencari tidak jatuh ke dalamnya.
Anda dapat / harus menggabungkan ini dengan tip sebelumnya untuk mengubah HTML Anda sesering mungkin.
Ubah ini juga sering, karena pencakar akhirnya akan belajar untuk menghindarinya. Ubah URL dan teks honeypot. Juga ingin mempertimbangkan untuk mengubah CSS sebaris yang digunakan untuk bersembunyi, dan menggunakan atribut ID dan CSS eksternal sebagai gantinya, karena pencakar akan belajar untuk menghindari apa pun yang memiliki style
atribut dengan CSS yang digunakan untuk menyembunyikan konten. Coba juga hanya untuk mengaktifkannya kadang-kadang, jadi scraper bekerja pada awalnya, tetapi rusak setelah beberapa saat. Ini juga berlaku untuk tip sebelumnya.
Orang jahat dapat mencegah akses bagi pengguna nyata dengan membagikan tautan ke honeypot Anda, atau bahkan menyematkan tautan itu di suatu tempat sebagai gambar (mis. Di forum). Ubah URL sesering mungkin, dan buat waktu larangan relatif singkat.
Sajikan data palsu dan tidak berguna jika Anda mendeteksi pengikis
Jika Anda mendeteksi apa yang jelas-jelas merupakan pengikis, Anda dapat menyajikan data palsu dan tidak berguna; ini akan merusak data yang diperoleh scraper dari situs web Anda. Anda juga harus membuat tidak mungkin untuk membedakan data palsu tersebut dari data nyata, sehingga pencakar tidak tahu bahwa mereka sedang kacau.
Sebagai contoh: Anda memiliki situs web berita; jika Anda mendeteksi scraper, alih-alih memblokir akses, sajikan artikel palsu, yang dibuat secara acak , dan ini akan meracuni data yang diperoleh scraper. Jika Anda membuat data palsu tidak dapat dibedakan dari yang asli, Anda akan mempersulit pencakar untuk mendapatkan apa yang mereka inginkan, yaitu data aktual dan nyata.
Jangan terima permintaan jika Agen Pengguna kosong / hilang
Seringkali, pengikis malas menulis tidak akan mengirim header Agen Pengguna dengan permintaan mereka, sedangkan semua browser serta spider mesin pencari akan.
Jika Anda mendapatkan permintaan di mana tajuk Agen Pengguna tidak ada, Anda dapat menampilkan captcha, atau cukup memblokir atau membatasi akses. (Atau sajikan data palsu seperti yang dijelaskan di atas, atau yang lainnya ..)
Itu sepele untuk spoof, tetapi sebagai tindakan terhadap pencakar yang ditulis dengan buruk, itu layak diterapkan.
Jangan terima permintaan jika Agen Pengguna adalah pengikis yang umum; daftar hitam yang digunakan oleh pencakar
Dalam beberapa kasus, pencakar akan menggunakan Agen Pengguna yang tidak menggunakan spider browser atau mesin pencari nyata, seperti:
- "Mozilla" (Hanya itu, tidak ada yang lain. Saya telah melihat beberapa pertanyaan tentang mengikis di sini, menggunakan itu. Peramban asli tidak akan pernah hanya menggunakan itu)
- "Java 1.7.43_u43" (Secara default, HttpUrlConnection Java menggunakan sesuatu seperti ini.)
- "BIZCO EasyScraping Studio 2.0"
- "wget", "curl", "libcurl", .. (Wget dan cURL terkadang digunakan untuk pengikisan dasar)
Jika Anda menemukan bahwa string Agen Pengguna tertentu digunakan oleh pencakar di situs Anda, dan itu tidak digunakan oleh browser nyata atau spider yang sah, Anda juga dapat menambahkannya ke daftar hitam Anda.
Jika tidak meminta aset (CSS, gambar), itu bukan browser nyata.
Peramban asli akan (hampir selalu) meminta dan mengunduh aset seperti gambar dan CSS. Pengurai dan pencakar HTML tidak akan melakukannya karena mereka hanya tertarik pada halaman aktual dan kontennya.
Anda bisa mencatat permintaan ke aset Anda, dan jika Anda melihat banyak permintaan hanya untuk HTML, itu bisa berupa pengikis.
Waspadalah bahwa bot mesin pencari, perangkat seluler kuno, pembaca layar, dan perangkat yang tidak terkonfigurasi juga tidak dapat meminta aset.
Gunakan dan minta cookie; menggunakannya untuk melacak tindakan pengguna dan scraper.
Anda dapat meminta cookie diaktifkan untuk melihat situs web Anda. Ini akan mencegah penulis scraper yang tidak berpengalaman dan pemula, namun mudah bagi seorang scraper untuk mengirim cookie. Jika Anda benar-benar menggunakan dan meminta mereka, Anda dapat melacak tindakan pengguna dan scraper, dan dengan demikian menerapkan pembatasan-tingkat, pemblokiran, atau menampilkan captcha pada pengguna-per-pengguna dan bukan per-IP.
Misalnya: ketika pengguna melakukan pencarian, atur cookie pengidentifikasi unik. Ketika halaman hasil dilihat, verifikasi cookie itu. Jika pengguna membuka semua hasil pencarian (Anda bisa tahu dari cookie), maka itu mungkin scraper.
Menggunakan cookie mungkin tidak efektif, karena pencakar dapat mengirim cookie dengan permintaan mereka juga, dan membuangnya sesuai kebutuhan. Anda juga akan mencegah akses bagi pengguna nyata yang menonaktifkan cookie, jika situs Anda hanya berfungsi dengan cookie.
Perhatikan bahwa jika Anda menggunakan JavaScript untuk menetapkan dan mengambil cookie, Anda akan memblokir pencakar yang tidak menjalankan JavaScript, karena mereka tidak dapat mengambil dan mengirim cookie dengan permintaan mereka.
Gunakan JavaScript + Ajax untuk memuat konten Anda
Anda bisa menggunakan JavaScript + AJAX untuk memuat konten Anda setelah halaman itu sendiri memuat. Ini akan membuat konten tidak dapat diakses oleh parser HTML yang tidak menjalankan JavaScript. Ini sering merupakan pencegah yang efektif bagi pemula dan pemrogram berpengalaman menulis pencakar.
Hati-hati terhadap:
Menggunakan JavaScript untuk memuat konten yang sebenarnya akan menurunkan pengalaman dan kinerja pengguna
Mesin pencari juga tidak dapat menjalankan JavaScript, sehingga mencegah mereka mengindeks konten Anda. Ini mungkin bukan masalah untuk halaman hasil pencarian, tetapi mungkin untuk hal-hal lain, seperti halaman artikel.
Mengaburkan markup Anda, permintaan jaringan dari skrip, dan yang lainnya.
Jika Anda menggunakan Ajax dan JavaScript untuk memuat data Anda, hapus data yang ditransfer. Sebagai contoh, Anda bisa menyandikan data di server (dengan sesuatu yang sesederhana base64 atau lebih kompleks), lalu mendekode dan menampilkannya pada klien, setelah mengambil melalui Ajax. Ini berarti bahwa seseorang yang memeriksa lalu lintas jaringan tidak akan langsung melihat bagaimana halaman Anda bekerja dan memuat data, dan itu akan lebih sulit bagi seseorang untuk secara langsung meminta data permintaan dari titik akhir Anda, karena mereka harus merekayasa balik algoritma descrambling Anda.
Jika Anda menggunakan Ajax untuk memuat data, Anda harus membuatnya sulit untuk menggunakan titik akhir tanpa memuat halaman terlebih dahulu, misalnya dengan memerlukan beberapa kunci sesi sebagai parameter, yang dapat Anda tanam dalam JavaScript atau HTML Anda.
Anda juga dapat menyematkan data yang dikaburkan secara langsung di halaman HTML awal dan menggunakan JavaScript untuk menghapus dan menampilkannya, yang akan menghindari permintaan jaringan tambahan. Melakukan hal ini akan membuat jauh lebih sulit untuk mengekstraksi data menggunakan parser khusus HTML yang tidak menjalankan JavaScript, karena yang menulis scraper harus membalikkan JavaScript Anda (yang juga harus Anda hapuskan).
Anda mungkin ingin mengubah metode kebingungan Anda secara teratur, untuk memecahkan pencakar yang telah menemukan jawabannya.
Ada beberapa kelemahan untuk melakukan sesuatu seperti ini, meskipun:
Ini akan membosankan dan sulit untuk diterapkan, dipelihara, dan di-debug.
Ini tidak akan efektif terhadap pencakar dan pembuat layar yang benar-benar menjalankan JavaScript dan kemudian mengekstrak datanya. (Namun, parser HTML paling sederhana tidak menjalankan JavaScript)
Ini akan membuat situs Anda tidak berfungsi untuk pengguna nyata jika mereka menonaktifkan JavaScript.
Kinerja dan waktu pemuatan laman akan berkurang.
Non-Teknis:
Beri tahu orang-orang untuk tidak mengorek, dan beberapa orang akan menghormatinya
Temukan seorang pengacara
Jadikan data Anda tersedia, berikan API:
Anda dapat membuat data Anda dengan mudah tersedia dan memerlukan atribusi dan tautan kembali ke situs Anda. Mungkin mengenakan biaya $$$ untuk itu.
Lain-lain:
Ada juga layanan perlindungan goresan komersial, seperti anti-scraping oleh Cloudflare atau Distill Networks (Detail tentang cara kerjanya di sini ), yang melakukan hal-hal ini, dan lebih banyak untuk Anda.
Temukan keseimbangan antara kegunaan pengguna nyata dan anti-pengikis: Segala sesuatu yang Anda lakukan akan memengaruhi pengalaman pengguna secara negatif dalam satu atau lain cara, temukan kompromi.
Jangan lupa situs dan aplikasi seluler Anda. Jika Anda memiliki aplikasi seluler, itu juga bisa screenscraped, dan lalu lintas jaringan dapat diperiksa untuk menentukan titik akhir REST yang digunakannya.
Pengikis dapat mengikis pengikis lain: Jika ada satu situs web yang memiliki konten yang dikikis dari Anda, pengikis lain dapat mengikis dari situs web pengikis itu.
Bacaan lebih lanjut: