Bagaimana cara mencegah pengikisan situs? [Tutup]

301

Saya memiliki situs web musik yang cukup besar dengan basis data artis besar. Saya telah memperhatikan situs musik lain menggores data situs kami (saya memasukkan nama-nama Artis dummy di sana-sini dan kemudian melakukan pencarian google untuk mereka).

Bagaimana saya bisa mencegah goresan layar? Apakah itu mungkin?

pixel
sumber
9
Sudahkah Anda mempertimbangkan untuk mencoba scraper mereka melalui IP atau sejenisnya (periksa log Anda) dan hanya memalsukan data Anda sepenuhnya untuk itu? Dengan begitu, ya, mereka akan "mengikis" situs Anda, tetapi "data" mereka tidak akan berguna.
Lasse V. Karlsen
30
Terbalik lolcats dan membalikkan / mengacak teks siapa pun?
Wayne Werner
2
pertanyaan serupa stackoverflow.com/questions/2705394/…
user279521
7
Sedang dibahas di meta
TJ Crowder
2
@ JonasCz itu adalah lelucon ironis. Yang menyedihkan adalah proposal serupa dimasukkan dalam jawaban Anda, meskipun dikritik.
Tomáš Zato - Reinstate Monica

Jawaban:

325

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 [email protected], 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 articleIddan 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 divid 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-contentdiv 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-contentmenjadi 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 divbagian divyang muncul setelah h1konten 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 divs 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.phpmelakukan 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 styleatribut 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:

JonasCz - Pasang kembali Monica
sumber
11
Ini membawaku ke sini. Jawaban yang cukup mengesankan. Juga, sejarah revisi yang cukup menakjubkan. Terima kasih untuk kirimannya. Anda mendapat upvote. Bukan hanya karena jumlah upaya yang dilakukan untuk ini, tetapi karena itu berguna bagi saya.
DaveTheMinion
1
Jawaban bagus! Berikut ini beberapa pemikiran. A real browser will (almost always) request and download assets such as images and CSSjuga berlaku untuk pembaca aksesibilitas? CAPTCHA rusak sehingga setidaknya layanan profesional mungkin tidak terhalang olehnya. Penggunaan cookie memerlukan pemberitahuan / persetujuan di UE. Find a balance between usability for real users and scraper-proofnessjuga menyeimbangkan waktu pemrograman / kompleksitas vs manfaat finansial.
Eric J.
5
@ JonH, Jika mereka tertarik, mereka akan membacanya. Selain itu, saya telah memecahnya menjadi paragraf dengan pos dan sub-pos, sehingga orang dapat memindai dan membaca bagian yang mereka inginkan. Sebenarnya ada beberapa jawaban panjang yang serupa tentang SO, dan orang-orang membacanya.
JonasCz
2
@ JoshCrozier - Saya hanya berpikir situs seperti ini tidak cocok dengan info sebanyak ini. Saya tidak mengatakan info itu buruk.
JonH
2
NB Gagasan sidik jari steganografis saya tentang gagasan konten dapat digunakan di pengadilan. Bayangkan kejutan ketika Anda membuktikan bahwa pemilik data Anda mendapatkannya dari Anda, melalui karakteristik unik langsung dalam data ...
ErikE
241

Saya akan menganggap bahwa Anda telah mengatur robots.txt.

Seperti yang disebutkan orang lain, pencakar dapat memalsukan hampir setiap aspek kegiatan mereka, dan mungkin sangat sulit untuk mengidentifikasi permintaan yang datang dari orang jahat.

Saya akan mempertimbangkan:

  1. Siapkan halaman /jail.html,.
  2. Larang akses ke halaman dalam robots.txt(sehingga laba-laba yang terhormat tidak akan pernah mengunjungi).
  3. Tempatkan tautan di salah satu halaman Anda, sembunyikan dengan CSS ( display: none).
  4. Rekam alamat IP pengunjung untuk /jail.html.

Ini mungkin membantu Anda dengan cepat mengidentifikasi permintaan dari pencakar yang mengabaikan Anda robots.txt.

Anda mungkin juga ingin membuat Anda /jail.htmlsebuah seluruh situs keseluruhan yang memiliki yang sama, markup yang tepat sebagai halaman normal, tetapi dengan data palsu ( /jail/album/63ajdka, /jail/track/3aads8, dll). Dengan cara ini, pencakar buruk tidak akan diberi tahu "input yang tidak biasa" sampai Anda memiliki kesempatan untuk memblokir mereka sepenuhnya.

Daniel Trebbien
sumber
48
Saya telah melihat teknik ini disebut sebagai "honeypot" sebelumnya. Ini adalah teknik yang juga digunakan dalam pemfilteran spam, tempat Anda meletakkan alamat email pada sebuah halaman tetapi menyembunyikannya atau membuatnya jelas bukan untuk orang-orang yang mengirim email yang sah. Kemudian kumpulkan alamat IP dari setiap server surat yang mengirimkan surat ke alamat itu.
thomasrutter
12
Ini mengasumsikan mereka merayapi tautan. Sebagian besar pengikis akan mencoba mengirimkan ke suatu bentuk dan mengikis data yang dikembalikan.
Byron Whitlock
9
Saya telah melihat honeypots berbasis Perl untuk email yang memiliki tautan ke "halaman" lain yang dihasilkan oleh skrip Perl. Bot sah yang membaca robots.txt tidak melihatnya, dan disembunyikan dari pengguna melalui CSS, tetapi pencakar (atau pemanen email) dengan cepat terperangkap dalam pohon dengan kedalaman tak terbatas, semuanya dengan data buruk tentang mereka. Letakkan tautan ke skrip tepat di awal setiap halaman Anda.
Stephen P
18
Hal lain yang luar biasa untuk dilemparkan ke honeypots adalah teergrubing (atau tarpitting). Ini adalah teknik lama yang saya sukai - ketika Anda mengidentifikasi orang jahat, Anda membawa proses spamming / scraping-nya untuk merangkak dengan sengaja menjaga koneksinya terbuka selama mungkin secara fisik tanpa mengatur waktu mereka keluar. Tentu saja, ini mungkin mengingatkan mereka bahwa Anda juga menyukai mereka, tetapi astaga itu menyenangkan. en.wikipedia.org/wiki/Teergrubing
giat
11
Satu-satunya masalah dengan pendekatan ini adalah jika saya menempatkan [img] situs Anda / jail.html [/ img] di forum yang populer. Anda akan menerima ton IP yang masuk ke sistem Anda dan akan sulit untuk menyaring mana yang salah. Jika Anda ingin mencegah hal semacam ini, Anda perlu menambahkan token yang terkait dengan IP di URL. Sesuatu seperti jail.php? T = hoeyvm dan dalam database Anda memiliki asosiasi hoeyvm dan IP yang meminta halaman tersebut.
HoLyVieR
48

Tuntut mereka.

Serius: Jika Anda punya uang, bicaralah dengan pengacara muda yang baik, baik, yang tahu jalan di Internet. Anda benar-benar dapat melakukan sesuatu di sini. Bergantung pada di mana situs tersebut berpusat, Anda dapat meminta pengacara untuk menulis gencatan & penghentian atau yang setara di negara Anda. Kamu mungkin setidaknya bisa menakuti bajingan.

Dokumentasikan penyisipan nilai dummy Anda. Masukkan nilai-nilai dummy yang jelas (tetapi tidak jelas) menunjukkan kepada Anda. Saya pikir ini adalah praktik umum dengan perusahaan buku telepon, dan di sini di Jerman, saya pikir ada beberapa contoh ketika peniru ditangkap melalui entri palsu yang mereka salin 1: 1.

Akan memalukan jika ini akan mendorong Anda untuk mengacaukan kode HTML Anda, menyeret ke bawah SEO, validitas dan hal-hal lain (meskipun sistem templating yang menggunakan struktur HTML yang sedikit berbeda pada setiap permintaan untuk halaman yang identik mungkin sudah banyak membantu melawan pencakar yang selalu mengandalkan struktur HTML dan nama kelas / ID untuk mengeluarkan konten.)

Kasus-kasus seperti inilah yang baik untuk undang-undang hak cipta. Merobek pekerjaan jujur ​​orang lain untuk menghasilkan uang adalah sesuatu yang harus Anda lawan.

Unicron
sumber
9
hanya bekerja di negara-negara dengan kerangka hukum yang kuat.
TomL
3
Pengacara berkembang di konflik - dan mendapat untung dari itu. Jarang sekali jika seorang pengacara menyarankan Anda untuk tidak pergi ke pengadilan. Siapa pun yang memiliki akan mengatakan kepada Anda bahwa menang dan kalah tidak ada hubungannya dengan konsep 'keadilan' yang baik kecuali argumen, suasana hati dan bias pada hari itu. Ingat jika itu salah, Anda bisa bertanggung jawab tidak hanya untuk biaya pengacara Anda, tetapi juga pihak-pihak lain, dan jika mereka memutuskan untuk menggugat balik - baik. Anda dapat dengan mudah kehilangan rumah dan aset lainnya dalam hidup Anda. Bukan pertaruhan yang saya sarankan. Saya sarankan Anda menghindari pengadilan di semua biaya.
Frankie
3
Saya setuju dengan @TomL. Jika mereka berada di Barat, itu agak masuk akal. Tetapi jika mereka berada di India / Cina / Rusia / Ukraina / apa pun - maka, serius, minimal tanpa kesempatan. Saya dapat katakan tentang pengadilan Rusia: mereka bahkan tidak akan repot bekerja dengan klaim Anda.
Highstaker
35

Sebenarnya tidak ada yang dapat Anda lakukan untuk mencegah hal ini sepenuhnya. Scrapers dapat memalsukan agen penggunanya, menggunakan beberapa alamat IP, dll. Dan muncul sebagai pengguna biasa. Satu-satunya hal yang dapat Anda lakukan adalah membuat teks tidak tersedia pada saat halaman dimuat - membuatnya dengan gambar, flash, atau memuatnya dengan JavaScript. Namun, dua yang pertama adalah ide yang buruk, dan yang terakhir akan menjadi masalah aksesibilitas jika JavaScript tidak diaktifkan untuk beberapa pengguna reguler Anda.

Jika mereka benar-benar membanting situs Anda dan menelusuri semua halaman Anda, Anda dapat melakukan semacam pembatasan tingkat.

Ada beberapa harapan. Scrapers mengandalkan data situs Anda dalam format yang konsisten. Jika Anda bisa mengacaknya, entah bagaimana itu bisa merusak scraper mereka. Hal-hal seperti mengubah ID atau nama kelas elemen halaman pada setiap beban, dll. Tapi itu banyak pekerjaan yang harus dilakukan dan saya tidak yakin apakah itu layak. Dan bahkan kemudian, mereka mungkin bisa mengatasinya dengan dedikasi yang cukup.

ryeguy
sumber
14
Menciptakan sistem yang membatasi jumlah halaman yang dapat dilihat oleh IP per menit adalah peretasan yang baik, karena pencakar layar akan merobek situs lebih cepat daripada orang normal mana pun.
TravisO
Sepakat. IP membutuhkan biaya dan dibatasi oleh sebagian besar perusahaan hosting.
Tal Weiss
re: "Hal-hal seperti mengubah ID atau nama kelas elemen halaman pada setiap pemuatan, dll." Itu tidak terlalu buruk jika Anda membuat nama kelas melalui PHP dan kemudian hanya menggunakan <div class = "<? Php echo $ myPHPGeneratedClassName;?>"> Anda bahkan dapat menggunakan string acak di dalamnya untuk membuatnya benar-benar unik. Apa pun yang menghentikan mereka menemukan pola membuatnya jauh lebih sulit untuk keluar dari DOM.
niggles
Tidak sulit menemukan IP. Ada banyak proxy, komputer teman, komputer kerja, komputer sekolah, komputer perpustakaan ...
Incognito
@ user257493: Benar, tetapi kita sedang berbicara tentang seseorang yang menulis data di sini. Kemungkinan mereka tidak akan pergi ke yang banyak usaha hanya untuk data yang panen. Dan jika mereka melakukannya, Anda akhirnya akan menghabiskan pasokan IP mereka.
ryeguy
31

Berikan API XML untuk mengakses data Anda; dengan cara yang mudah digunakan. Jika orang-orang menginginkan data Anda, mereka akan mendapatkannya, Anda sebaiknya keluar semua.

Dengan cara ini Anda dapat memberikan subset fungsionalitas secara efektif, memastikan bahwa, paling tidak, pencakar tidak akan membuang permintaan HTTP dan sejumlah besar bandwidth.

Maka yang harus Anda lakukan adalah meyakinkan orang-orang yang ingin data Anda menggunakan API. ;)

Williham Totland
sumber
3
Ini sepertinya sangat masuk akal. Pengikisan layar sangat sulit dicegah, dan jika Anda menyediakan API, Anda dapat membatasi, menambahkan pemberitahuan ("Konten dari ----.com"), dan pada dasarnya mengontrol data apa yang diberikan.
Alecwh
6
@alecwh: dan biaya untuk akses!
André Caron
3
Saya telah memberi Anda hadiah, sebagian karena web akan jauh lebih baik jika setiap situs web melakukan ini. Mari berharap itu menjadi lebih umum.
JonasCz
1
Segera setelah Anda membuat mereka mendaftar untuk layanan ini, mereka akan kembali ke situs normal
mplungjan
Saya adalah orang yang bertolak belakang dengan percakapan ini. Saya membuat model untuk pertunjukan Broadway dan harus mengikis semua data saya daripada mengakses dengan rapi.
Yaakov Bressler
22

Maaf, ini sangat sulit untuk dilakukan ...

Saya menyarankan agar Anda dengan sopan meminta mereka untuk tidak menggunakan konten Anda (jika konten Anda memiliki hak cipta).

Jika ya dan mereka tidak menghapusnya, maka Anda dapat mengambil tindakan selanjutnya dan mengirimkannya berhenti dan berhenti .

Secara umum, apa pun yang Anda lakukan untuk mencegah goresan mungkin akan berakhir dengan efek yang lebih negatif, misalnya aksesibilitas, bot / laba-laba, dll.

Kadal
sumber
12

Oke, seperti yang dikatakan semua posting, jika Anda ingin membuatnya ramah mesin maka bot dapat mengikis dengan pasti.

Tetapi Anda masih bisa melakukan beberapa hal, dan mungkin efektif untuk 60-70% menggores bot.

Buat skrip checker seperti di bawah ini.

Jika alamat IP tertentu dikunjungi sangat cepat maka setelah beberapa kunjungan (5-10) masukkan alamat IP + informasi browser dalam file atau basis data.

Langkah selanjutnya

(Ini akan menjadi proses latar belakang dan berjalan sepanjang waktu atau dijadwalkan setelah beberapa menit.) Buat satu skrip lain yang akan terus memeriksa alamat IP yang mencurigakan itu.

Kasus 1. Jika Agen pengguna adalah mesin pencari yang dikenal seperti Google, Bing , Yahoo (Anda dapat menemukan informasi lebih lanjut tentang agen pengguna dengan googling). Maka Anda harus melihat http://www.iplists.com/ . Daftar ini dan cobalah untuk mencocokkan pola. Dan jika itu tampak seperti agen-pengguna palsu maka mintalah untuk mengisi CAPTCHA pada kunjungan berikutnya. (Anda perlu melakukan riset lebih banyak tentang bot alamat IP. Saya tahu ini dapat dicapai dan juga mencoba whois dari alamat IP. Ini dapat membantu.)

Kasus 2. Tidak ada agen pengguna bot pencarian: Cukup minta untuk mengisi CAPTCHA pada kunjungan berikutnya.

Arshdeep
sumber
+1 Menggunakan iplists.com adalah ide yang bagus
Daniel Trebbien
10

Jawaban telat - dan juga jawaban ini mungkin bukan jawaban yang ingin Anda dengar ...

Saya sendiri sudah menulis banyak (puluhan) pencakar data-mining khusus yang berbeda . (hanya karena saya suka filosofi "data terbuka").

Berikut ini sudah banyak saran dalam jawaban lain - sekarang saya akan memainkan peran advokat iblis dan akan memperluas dan / atau memperbaiki efektivitasnya.

Pertama:

  • jika seseorang benar-benar menginginkan data Anda
  • Anda tidak dapat secara efektif (secara teknis) menyembunyikan data Anda
  • jika data harus dapat diakses secara publik oleh "pengguna biasa" Anda

Mencoba menggunakan beberapa hambatan teknis tidak sebanding dengan masalahnya, disebabkan:

  • untuk pengguna reguler Anda dengan memperburuk pengalaman pengguna mereka
  • untuk bot biasa dan disambut (mesin pencari)
  • dll ...

HMTL polos - cara termudah adalah menguraikan halaman HTML biasa, dengan kelas struktur dan css yang terdefinisi dengan baik. Misalnya cukup memeriksa elemen dengan Firebug, dan menggunakan Xpaths yang tepat, dan / atau jalur CSS di scraper saya.

Anda dapat menghasilkan struktur HTML secara dinamis dan juga, Anda dapat menghasilkan secara dinamis nama-nama kelas CSS (dan CSS itu sendiri juga) (misalnya dengan menggunakan beberapa nama kelas acak) - tetapi

  • Anda ingin menyajikan informasi kepada pengguna reguler Anda secara konsisten
  • mis. lagi - cukup untuk menganalisis struktur halaman sekali lagi untuk mengatur scraper.
  • dan itu dapat dilakukan secara otomatis dengan menganalisis beberapa "konten yang sudah dikenal"
    • setelah seseorang mengetahui (dengan mengikis sebelumnya), mis:
    • apa yang berisi informasi tentang "phil collins"
    • cukup tampilkan halaman "phil collins" dan (secara otomatis) menganalisis bagaimana halaman disusun "hari ini" :)

Anda tidak dapat mengubah struktur untuk setiap respons, karena pengguna reguler Anda akan membenci Anda. Juga, ini akan menyebabkan lebih banyak masalah bagi Anda (pemeliharaan) bukan untuk scraper. Jalur XPath atau CSS ditentukan oleh skrip goresan secara otomatis dari konten yang dikenal.

Ajax - sedikit lebih sulit pada awalnya, tetapi berkali-kali mempercepat proses pengikisan :) - mengapa?

Ketika menganalisis permintaan dan tanggapan, saya hanya mengatur server proxy saya sendiri (ditulis dalam perl) dan firefox saya menggunakannya. Tentu saja, karena itu adalah proxy saya sendiri - benar-benar tersembunyi - server target melihatnya sebagai browser biasa. (Jadi, tidak ada header X-Forwarded-for dan semacamnya). Berdasarkan log proksi, sebagian besar dimungkinkan untuk menentukan "logika" dari permintaan ajax, misalnya saya bisa melewatkan sebagian besar pengetikan html, dan cukup gunakan respons ajax yang terstruktur dengan baik (kebanyakan dalam format JSON).

Jadi, ajax tidak banyak membantu ...

Beberapa yang lebih rumit adalah halaman yang menggunakan banyak fungsi javascript .

Di sini dimungkinkan untuk menggunakan dua metode dasar:

  • membongkar dan memahami JS dan membuat scraper yang mengikuti logika Javascript (cara yang sulit)
  • atau (lebih disukai menggunakan sendiri) - hanya menggunakan Mozilla dengan Mozrepl untuk mengikis. Misalnya, pengikisan yang sebenarnya dilakukan dalam peramban yang diaktifkan javascript berfitur lengkap, yang diprogram untuk mengeklik ke elemen yang tepat dan hanya mengambil respons "yang didekodekan" langsung dari jendela peramban.

Pengikisan seperti ini lambat (pengikisan dilakukan seperti pada peramban biasa), tetapi memang demikian

  • sangat mudah diatur dan digunakan
  • dan hampir mustahil untuk melawannya :)
  • dan "kelambatan" diperlukan untuk melawan "memblokir permintaan berbasis IP yang sama cepat"

The User-Agent filtering berdasarkan tidak membantu sama sekali. Setiap penambang data yang serius akan mengaturnya ke orang yang benar di scraper-nya.

Membutuhkan Login - tidak membantu. Cara termudah untuk mengalahkannya (tanpa menganalisis dan / atau membuat skrip-protokol masuk) hanya masuk ke situs sebagai pengguna biasa, menggunakan Mozilla dan setelah hanya menjalankan scraper berbasis Mozrepl ...

Ingat, login yang diperlukan membantu untuk bot anonim, tetapi tidak membantu terhadap seseorang yang ingin mengorek data Anda. Dia hanya mendaftarkan dirinya ke situs Anda sebagai pengguna biasa.

Menggunakan bingkai juga tidak terlalu efektif. Ini digunakan oleh banyak layanan film langsung dan tidak terlalu sulit dikalahkan. Frame hanyalah salah satu halaman HTML / Javascript yang diperlukan untuk menganalisis ... Jika data sepadan dengan masalah - penambang data akan melakukan analisis yang diperlukan.

Pembatasan berbasis IP sama sekali tidak efektif - di sini ada terlalu banyak server proxy publik dan juga di sini adalah TOR ... :) Tidak memperlambat pengikisan (untuk seseorang yang benar - benar menginginkan data Anda).

Sangat sulit untuk mengikis data yang disembunyikan dalam gambar. (misalnya, hanya mengubah data menjadi gambar sisi server). Mempekerjakan "tesseract" (OCR) membantu berkali-kali - tetapi jujur ​​- data harus sebanding dengan masalah pengikis. (yang berkali-kali tidak layak).

Di sisi lain, pengguna Anda akan membenci Anda karena ini. Saya sendiri, (bahkan ketika tidak mengikis) membenci situs web yang tidak memungkinkan menyalin konten halaman ke clipboard (karena informasinya ada di gambar, atau (yang konyol) mencoba menyambung ke klik kanan beberapa acara Javascript khusus.: )

Yang paling sulit adalah situs yang menggunakan java applet atau flash , dan applet menggunakan permintaan https aman sendiri secara internal . Tapi pikirkan dua kali - betapa bahagianya pengguna iPhone Anda ...;). Karena itu, saat ini sangat sedikit situs yang menggunakannya. Saya sendiri, memblokir semua konten flash di browser saya (dalam sesi browsing biasa) - dan tidak pernah menggunakan situs yang bergantung pada Flash.

Tonggak pencapaian Anda mungkin ..., jadi Anda dapat mencoba metode ini - ingat - Anda mungkin akan kehilangan sebagian pengguna Anda. Juga ingat, beberapa file SWF dapat didekompilasi. ;)

Captcha (yang bagus - seperti reCaptcha) sangat membantu - tetapi pengguna Anda akan membenci Anda ... - bayangkan saja, bagaimana pengguna Anda akan mencintai Anda ketika mereka perlu menyelesaikan beberapa captcha di semua halaman yang menampilkan informasi tentang artis musik.

Mungkin tidak perlu melanjutkan - Anda sudah masuk ke dalam gambar.

Sekarang apa yang harus Anda lakukan:

Ingat: Hampir tidak mungkin menyembunyikan data Anda, jika Anda di sisi lain ingin mempublikasikannya (dengan cara yang bersahabat) kepada pengguna biasa Anda.

Begitu,

  • buat data Anda mudah diakses - oleh beberapa API
    • ini memungkinkan akses data yang mudah
    • misal, bongkar server Anda dari pengikisan - bagus untuk Anda
  • mengatur hak penggunaan yang tepat (misalnya, harus mengutip sumber)
  • ingat, banyak data yang tidak dapat memiliki hak cipta - dan sulit untuk melindunginya
  • tambahkan beberapa data palsu (seperti yang sudah Anda lakukan) dan gunakan alat hukum
    • seperti yang orang lain katakan, kirim "gencatan dan hentikan surat"
    • tindakan hukum lain (menggugat dan sejenisnya) mungkin terlalu mahal dan sulit untuk dimenangkan (terutama terhadap situs yang bukan AS)

Berpikir dua kali sebelum Anda akan mencoba menggunakan beberapa hambatan teknis.

Alih-alih mencoba memblokir penambang data, tambahkan saja upaya lebih kegunaan situs web Anda. Pengguna Anda akan mencintai Anda. Waktu (& energi) yang diinvestasikan ke dalam hambatan teknis biasanya tidak bernilai - lebih baik menghabiskan waktu untuk membuat situs web yang lebih baik ...

Juga, pencuri data tidak seperti pencuri normal.

Jika Anda membeli alarm rumah murah dan menambahkan peringatan "rumah ini terhubung ke polisi" - banyak pencuri bahkan tidak akan mencoba masuk. Karena satu langkah salah olehnya - dan dia masuk penjara ...

Jadi, Anda berinvestasi hanya beberapa dolar, tetapi pencuri berinvestasi dan mengambil risiko besar.

Tetapi pencuri data tidak memiliki risiko seperti itu. sebaliknya - jika Anda melakukan satu langkah yang salah (mis. jika Anda memperkenalkan beberapa BUG sebagai akibat dari hambatan teknis), Anda akan kehilangan pengguna Anda. Jika bot goresan tidak akan berfungsi untuk pertama kalinya, tidak ada yang terjadi - penambang data hanya akan mencoba pendekatan lain dan / atau akan men-debug skrip.

Dalam hal ini, Anda perlu berinvestasi lebih banyak - dan pengikis berinvestasi jauh lebih sedikit.

Coba pikirkan di mana Anda ingin menginvestasikan waktu & energi Anda ...

Ps: bahasa Inggris bukan bahasa ibu saya - jadi maafkan bahasa Inggris saya yang rusak ...

jm666
sumber
@Parapluie Anda benar-benar harus membaca tentang konten gratis dan / atau tentang model open source - tentang tanggal, itu sejarah, tujuan, dan etika. Dan terutama tentang Data Terbuka - yang saya buat sebagian besar pencakar saya ...
jm666
Saya mengerti konsepnya, meskipun saya berterima kasih atas rekomendasi ilmiah Anda. Kami mungkin memiliki percakapan yang menarik tentang itu; tetapi sepertinya komentar asli saya telah dihapus oleh pihak ketiga. Jadi, apakah kita benar-benar bebas?
Parapluie
8

Dari perspektif teknologi: Hanya memodelkan apa yang dilakukan Google ketika Anda menekannya dengan terlalu banyak pertanyaan sekaligus. Itu harus menghentikan banyak hal.

Dari perspektif hukum: Kedengarannya seperti data yang Anda terbitkan bukan milik. Berarti Anda menerbitkan nama dan statistik dan informasi lain yang tidak dapat dilindungi hak cipta.

Jika ini masalahnya, para pencakar tidak melanggar hak cipta dengan mendistribusikan kembali informasi Anda tentang nama artis dll. Namun, mereka mungkin melanggar hak cipta ketika memuat situs Anda ke dalam memori karena situs Anda mengandung elemen yang dapat dilindungi hak cipta (seperti tata letak, dll.).

Saya sarankan membaca tentang Facebook v. Power.com dan melihat argumen yang digunakan Facebook untuk menghentikan pengikisan layar. Ada banyak cara hukum yang bisa Anda coba untuk menghentikan seseorang dari menggores situs web Anda. Mereka bisa jauh menjangkau dan imajinatif. Terkadang pengadilan membeli argumen. Terkadang tidak.

Tetapi, dengan asumsi Anda menerbitkan informasi domain publik yang tidak dapat dilindungi hak cipta seperti nama dan statistik dasar ... Anda harus membiarkannya menggunakan nama kebebasan berbicara dan data terbuka. Yaitu, tentang apa web itu.

dengeltrees
sumber
1
Meskipun Anda mungkin tidak dapat hak cipta informasi tersebut, Anda pasti dapat menempatkan klausul terhadap pengikisan dalam persyaratan penggunaan. Kemudian, kirim surat penghentian dan penghentian karena melanggar ketentuan penggunaan.
André Caron
1
Kebebasan berbicara dan data terbuka memang merupakan semangat Internet!
Ciara
Ya, kebebasan berbicara dan semua itu. Tapi, para pencakar mungkin membuang-buang sejumlah besar anggaran OP atau bandwidth serta menyalin data yang tidak dapat dikerjakan.
jpaugh
8

Hal-hal yang mungkin bekerja melawan pencakar pemula:

  • Pemblokiran IP
  • gunakan banyak ajax
  • periksa tajuk permintaan pengarah
  • memerlukan login

Hal-hal yang akan membantu secara umum:

  • ubah tata letak Anda setiap minggu
  • robots.txt

Hal-hal yang akan membantu tetapi akan membuat pengguna Anda membenci Anda:

  • captcha
pguardiario
sumber
8

Saya telah melakukan banyak pengikisan web dan merangkum beberapa teknik untuk menghentikan pengikis web di blog saya berdasarkan apa yang menurut saya menjengkelkan.

Ini adalah pertukaran antara pengguna dan pencakar Anda. Jika Anda membatasi IP, gunakan CAPTCHA, memerlukan login, dll, Anda membuat sulit bagi para pencakar. Tetapi ini juga dapat mengusir pengguna asli Anda.

hoju
sumber
8

Sayangnya, opsi terbaik Anda cukup manual: Cari pola lalu lintas yang Anda yakini mengindikasikan pengikisan dan pelarangan alamat IP mereka.

Karena Anda berbicara tentang situs publik maka membuat situs yang ramah mesin pencari juga akan membuat situs tersebut ramah terhadap pengikisan. Jika mesin pencari dapat merayapi dan mengikis situs Anda, maka pengikis jahat juga bisa. Ini garis yang bagus untuk berjalan.

STW
sumber
4
Pemblokiran IP akan memperlambat scraper tetapi juga banyak pekerjaan untuk server Anda. Katakanlah saya mengikis Anda dengan 1000 proxy, saya masih punya data yang saya inginkan dan sekarang firewall Anda berantakan.
pguardiario
1
Ketika Anda melakukan itu, mereka akan mendatar pada Anda. 100000 alamat hari ini tidak dikenakan biaya untuk mereka tetapi memperlambat situs Anda jika Anda mencoba mencekal semuanya - dan mereka akan merotasi IP untuk tidak mengunjungi lebih dari sekali atau dua kali
mplungjan
6

Tentu itu mungkin. Untuk kesuksesan 100%, buat situs Anda offline.

Pada kenyataannya, Anda dapat melakukan beberapa hal yang membuat goresan sedikit lebih sulit. Google melakukan pengecekan browser untuk memastikan Anda bukan robot yang menggores hasil pencarian (walaupun ini, seperti kebanyakan hal lainnya, dapat dipalsukan).

Anda dapat melakukan hal-hal seperti memerlukan beberapa detik antara koneksi pertama ke situs Anda, dan klik berikutnya. Saya tidak yakin apa waktu yang ideal atau bagaimana tepatnya melakukannya, tapi itu ide lain.

Saya yakin ada beberapa orang lain yang memiliki pengalaman lebih banyak, tetapi saya harap ide-ide itu setidaknya sedikit membantu.

Wayne Werner
sumber
6

Ada beberapa hal yang dapat Anda lakukan untuk mencoba dan mencegah goresan layar. Beberapa tidak sangat efektif, sementara yang lain (CAPTCHA), tetapi menghambat kegunaan. Anda harus ingat juga bahwa hal itu dapat menghalangi pencakar situs yang sah, seperti indeks mesin pencari.

Namun, saya berasumsi bahwa jika Anda tidak ingin menghapusnya, itu berarti Anda juga tidak ingin mesin pencari mengindeksnya.

Berikut beberapa hal yang bisa Anda coba:

  • Tampilkan teks dalam gambar. Ini cukup andal, dan tidak terlalu merepotkan pengguna daripada CAPTCHA, tetapi berarti mereka tidak akan dapat memotong dan menempel dan itu tidak akan menskalakan secara rapi atau dapat diakses.
  • Gunakan CAPTCHA dan minta itu diselesaikan sebelum mengembalikan halaman. Ini adalah metode yang dapat diandalkan, tetapi juga rasa sakit terbesar yang dikenakan pada pengguna.
  • Mewajibkan pengguna untuk mendaftar akun sebelum melihat halaman, dan mengkonfirmasi alamat email mereka. Ini akan sangat efektif, tetapi tidak sepenuhnya - screen-scraper mungkin mengatur akun dan mungkin secara cerdik memprogram skrip mereka untuk login untuk mereka.
  • Jika string agen pengguna klien kosong, blokir akses. Skrip pengikisan situs akan sering diprogram dengan malas dan tidak akan menyetel string agen-pengguna, sedangkan semua browser web akan melakukannya.
  • Anda dapat mengatur daftar hitam string agen pengguna scraper layar yang dikenal saat Anda menemukannya. Sekali lagi, ini hanya akan membantu yang berkode malas; seorang programmer yang tahu apa yang dia lakukan dapat mengatur string agen-pengguna untuk menyamar sebagai browser web.
  • Ubah jalur URL sesering mungkin. Saat Anda mengubahnya, pastikan yang lama tetap berfungsi, tetapi hanya selama satu pengguna kemungkinan browsernya terbuka. Menyulitkan untuk memprediksi apa yang akan menjadi jalur URL baru. Ini akan mempersulit skrip untuk mengambilnya jika URL-nya adalah kode-keras. Akan lebih baik melakukan ini dengan semacam skrip.

Jika saya harus melakukan ini, saya mungkin akan menggunakan kombinasi dari tiga yang terakhir, karena mereka meminimalkan ketidaknyamanan bagi pengguna yang sah. Namun, Anda harus menerima bahwa Anda tidak akan dapat memblokir semua orang dengan cara ini dan begitu seseorang mengetahui cara menyiasatinya, mereka akan dapat mengikisnya selamanya. Anda kemudian dapat mencoba untuk memblokir alamat IP mereka saat Anda menemukannya, saya kira.

thomasrutter
sumber
6
  1. Tidak, tidak mungkin untuk berhenti (dengan cara apa pun)
  2. Rangkullah itu. Mengapa tidak mempublikasikan sebagai RDFa dan menjadi mesin pencari super ramah dan mendorong penggunaan kembali data? Orang-orang akan berterima kasih dan memberikan kredit saat jatuh tempo (lihat musicbrainz sebagai contoh).

Bukan jawaban yang mungkin Anda inginkan, tetapi mengapa menyembunyikan apa yang Anda coba publikasikan?

nathan
sumber
5

Metode Satu (Hanya Situs Kecil):
Sajikan data yang dienkripsi / disandikan.
Saya Scape web menggunakan python (urllib, permintaan, beautifulSoup dll ...) dan menemukan banyak situs web yang menyajikan data terenkripsi / disandikan yang tidak dapat didekripsi dalam bahasa pemrograman apa pun hanya karena metode enkripsi tidak ada.

Saya mencapai ini di situs web PHP dengan mengenkripsi dan meminimalkan output (PERINGATAN: ini bukan ide yang baik untuk situs besar) responsnya selalu campur aduk konten.

Contoh meminimalkan output dalam PHP ( Bagaimana cara meminimalkan output html halaman 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");
?>

Metode Dua:
Jika Anda tidak dapat menghentikan mereka mengacaukan melayani data palsu / tidak berguna sebagai tanggapan.

Metode Tiga:
blok agen pengguna menggores umum, Anda akan melihat ini di situs web besar / besar karena tidak mungkin untuk mengikisnya dengan "python3.4" seperti Anda User-Agent.

Metode Empat:
Pastikan semua header pengguna valid, saya kadang-kadang memberikan header sebanyak mungkin untuk membuat pengikis saya tampak seperti pengguna asli, beberapa di antaranya bahkan tidak benar atau valid seperti en-FU :).
Berikut adalah daftar beberapa tajuk yang biasa saya berikan.

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"
}
Komunitas
sumber
2

Daripada bot daftar hitam, mungkin Anda harus daftar putih mereka. Jika Anda tidak ingin mematikan hasil pencarian Anda untuk beberapa mesin teratas, Anda dapat memasukkan string agen pengguna mereka ke daftar putih, yang umumnya dipublikasikan dengan baik. Bot yang kurang etis cenderung memalsukan string agen pengguna dari browser web populer. Beberapa mesin pencari teratas harus mengemudi lebih dari 95% dari lalu lintas Anda.

Mengidentifikasi bot sendiri harus cukup mudah, menggunakan teknik yang disarankan oleh poster lain.

Chris
sumber
2

Pendekatan cepat untuk ini adalah dengan mengatur jebakan / bot jebakan.

  1. Buat halaman yang jika dibuka beberapa kali atau bahkan dibuka sama sekali, akan mengumpulkan informasi tertentu seperti IP dan yang lainnya (Anda juga dapat mempertimbangkan penyimpangan atau pola tetapi halaman ini tidak harus dibuka sama sekali).

  2. Buat tautan ke ini di halaman Anda yang disembunyikan dengan tampilan CSS: tidak ada; atau kiri: -9999px; posisi: absolut; coba letakkan di tempat-tempat yang kecil kemungkinannya untuk diabaikan seperti di mana konten Anda berada di bawah dan bukan footer Anda karena kadang-kadang bot dapat memilih untuk melupakan bagian-bagian tertentu dari suatu halaman.

  3. Di file robots.txt Anda, atur sejumlah besar aturan pelarangan ke halaman yang tidak Anda inginkan sebagai bot ramah (LOL, seperti mereka memiliki wajah-wajah bahagia!) Untuk mengumpulkan informasi dan menjadikan halaman ini sebagai salah satunya.

  4. Sekarang, jika bot ramah melewatinya harus mengabaikan halaman itu. Benar tapi itu masih belum cukup baik. Buat beberapa halaman ini lebih banyak atau rutekan ulang suatu halaman untuk menerima nama yang berbeda. dan kemudian letakkan lebih banyak aturan pelarangan untuk laman perangkap ini di file robots.txt di samping laman yang ingin Anda abaikan.

  5. Kumpulkan IP dari bot ini atau siapa pun yang masuk ke halaman ini, jangan melarang mereka tetapi buatlah fungsi untuk menampilkan teks noodled dalam konten Anda seperti nomor acak, pemberitahuan hak cipta, string teks tertentu, tampilkan gambar menakutkan, pada dasarnya apa pun untuk menghalangi Anda konten yang bagus. Anda juga dapat mengatur tautan yang mengarah ke halaman yang akan memakan waktu selamanya untuk memuat mis. di php Anda dapat menggunakan fungsi sleep (). Ini akan melawan perayap kembali jika memiliki semacam deteksi untuk mem-bypass halaman yang membutuhkan waktu terlalu lama untuk memuat karena beberapa bot yang ditulis dengan baik diatur untuk memproses jumlah tautan X pada satu waktu.

  6. Jika Anda telah membuat string teks / kalimat tertentu mengapa tidak pergi ke mesin pencari favorit Anda dan mencari mereka, itu mungkin menunjukkan kepada Anda di mana konten Anda berakhir.

Pokoknya, jika Anda berpikir secara taktis dan kreatif ini bisa menjadi titik awal yang baik. Hal terbaik untuk dilakukan adalah mempelajari cara kerja bot.

Saya juga berpikir tentang mengamburkan beberapa ID atau cara atribut pada elemen halaman ditampilkan:

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

yang mengubah bentuknya setiap waktu karena beberapa bot mungkin diatur untuk mencari pola tertentu di halaman Anda atau elemen yang ditargetkan.

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

id="p-12802" > id="p-00392"
Steve Chan
sumber
1
Anda tidak hanya ingin melarang mereka, Anda ingin benar-benar mengacaukannya ... Saya MENYUKAINYA!
Zoidberg
Larangan siluman adalah persis apa yang saya pikirkan (alias shadowbanning, larangan neraka).
ErikE
1

Anda tidak dapat menghentikan goresan layar normal. Baik atau buruk, itu adalah sifat web.

Anda dapat membuatnya sehingga tidak ada yang dapat mengakses hal-hal tertentu (termasuk file musik) kecuali mereka masuk sebagai pengguna terdaftar. Tidak terlalu sulit untuk dilakukan di Apache . Saya menganggap itu tidak akan terlalu sulit untuk dilakukan di IIS juga.

Dina
sumber
1

Salah satu caranya adalah dengan menyajikan konten sebagai atribut XML, string yang disandikan URL, teks yang telah diformat dengan JSON yang disandikan dengan HTML, atau data URI, kemudian mentransformasikannya menjadi HTML pada klien. Berikut adalah beberapa situs yang melakukan ini:

  • 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; 
    />
  • Toko Web Chrome : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
  • Berita Bing : URL data

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
  • Protopage : URL Encoded Strings

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : Entitas HTML + JSON yang telah diformat sebelumnya

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Amazon : Pemuatan Malas

    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 namespace + tipe MIME Kustom + ekstensi File Kustom

       <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>

Jika Anda melihat sumber pada salah satu di atas, Anda melihat bahwa memo hanya akan mengembalikan metadata dan navigasi.

Paul Sweatte
sumber
Jadi ... pendekatan itu membuat pengikisan menjadi lebih mudah, karena konten sekarang dalam format yang seragam. Bahkan, itu tidak akan disebut memo lagi: itu disebut parsing , dan itu sangat mudah dilakukan secara terprogram.
jpaugh
1

Sebagian besar sudah dikatakan, tetapi apakah Anda sudah mempertimbangkan perlindungan CloudFlare? Maksud saya ini:

uraian gambar; kesan

Perusahaan lain mungkin melakukan ini juga, CloudFlare adalah satu-satunya yang saya tahu.

Saya cukup yakin itu akan menyulitkan pekerjaan mereka. Saya juga pernah mendapat IP yang diblokir secara otomatis selama 4 bulan ketika saya mencoba untuk menghapus data dari situs yang dilindungi oleh CloudFlare karena batas tingkat (saya menggunakan loop permintaan AJAX sederhana).

Tomáš Zato - Pasang kembali Monica
sumber
1

Saya setuju dengan sebagian besar posting di atas, dan saya ingin menambahkan bahwa semakin mesin pencari situs Anda ramah, semakin bisa dikikis. Anda dapat mencoba melakukan beberapa hal yang sangat di luar sana yang membuat lebih sulit bagi pencakar, tetapi mungkin juga mempengaruhi kemampuan pencarian Anda ... Itu tergantung pada seberapa baik Anda ingin situs Anda untuk peringkat di mesin pencari tentu saja.

sjobe
sumber
0

Menempatkan konten Anda di belakang captcha akan berarti robot akan kesulitan mengakses konten Anda. Namun, manusia akan merasa tidak nyaman sehingga mungkin tidak diinginkan.

SorcyCat
sumber
0

Jika Anda ingin melihat contoh yang bagus, lihat http://www.bkstr.com/ . Mereka menggunakan algoritma aj / s untuk mengatur cookie, kemudian memuat kembali halaman sehingga dapat menggunakan cookie untuk memvalidasi bahwa permintaan sedang dijalankan dalam browser. Aplikasi desktop yang dibangun untuk mengikis pasti dapat melakukannya, tetapi itu akan menghentikan sebagian besar pengikisan jenis CURL.

blacktie24
sumber
0

Pengikis layar bekerja dengan memproses HTML. Dan jika mereka bertekad untuk mendapatkan data Anda, tidak banyak yang dapat Anda lakukan secara teknis karena bola mata manusia memproses apa pun. Secara hukum sudah ditunjukkan Anda mungkin memiliki beberapa jalan lain dan itu akan menjadi rekomendasi saya.

Namun, Anda dapat menyembunyikan bagian penting dari data Anda dengan menggunakan logika presentasi non-HTML

  • Buat file Flash untuk setiap artis / album, dll.
  • Hasilkan gambar untuk setiap konten artis. Mungkin hanya gambar untuk nama artis, dll. Sudah cukup. Lakukan ini dengan merender teks ke file JPEG / PNG di server dan menautkan ke gambar itu.

Ingatlah bahwa ini mungkin akan memengaruhi peringkat pencarian Anda.

James Westgate
sumber
0

Hasilkan HTML, CSS, dan JavaScript. Lebih mudah menulis generator daripada parser, sehingga Anda dapat menghasilkan setiap halaman yang dilayani secara berbeda. Anda tidak dapat lagi menggunakan cache atau konten statis.

Stephan Eggermont
sumber