Site kazıma işlemini nasıl önleyebilirim? [kapalı]


301

Büyük bir sanatçı veritabanına sahip oldukça büyük bir müzik sitem var. Sitemizin verilerini kazıyan diğer müzik sitelerini fark ettim (burada ve orada kukla Sanatçı isimlerini giriyorum ve sonra onlar için google aramaları yapıyorum).

Ekran kazıma işlemini nasıl önleyebilirim? Hatta mümkün mü?


9
Kazıyıcılarını IP veya benzeri bir yöntemle (günlüklerinizi kontrol edin) tespit etmeye ve verilerinizi tamamen bunlar için taklit etmeyi düşündünüz mü? Bu şekilde, evet, sitenizi "kazıyacaklar", ancak "verileri" işe yaramaz.
Lasse V. Karlsen

30
Baş aşağı lolcats ve ters / şifreli metin kimse?
Wayne Werner



2
@JonasCz ironik bir şakaydı. Üzücü bir şey de, eleştirilen de olsa, cevabınıza benzer teklifin dahil edilmesidir.
Tomáš Zato - Monica adlı kişiyi geri yükle

Yanıtlar:


325

Not: Bu cevabın tam sürümü Yığın Taşması'nın uzunluk sınırını aştığından , daha fazla ipucu ve ayrıntı içeren genişletilmiş sürümü okumak için GitHub'a gitmeniz gerekir .


Kazıma işlemini ( Web Scraping , Ekran Kırma , Web veri madenciliği , Web toplama veya Web verisi çıkarma olarak da bilinir) engellemek için , bu sıyırıcıların nasıl çalıştığını ve bunların uzantılarının iyi çalışmasını engelleyen şeyleri öğrenmeye yardımcı olur.

Çeşitli sıyırıcı türleri vardır ve her biri farklı çalışır:

  • Gibi Örümcekler, Google'ın bot gibi veya web sitesi fotokopi HTTrack yinelemeli verileri almak için diğer sayfalara bağlantıları takip. Bunlar bazen belirli verileri elde etmek için hedeflenen kazıma için, genellikle her sayfadan istenen verileri çıkarmak için bir HTML ayrıştırıcısı ile birlikte kullanılır.

  • Kabuk komut dosyaları: Bazen, yaygın Unix araçları kazıma için kullanılır: Sayfaları indirmek için Wget veya Curl ve verileri çıkarmak için Grep (Regex).

  • Jsoup, Scrapy ve diğerlerine dayanan HTML ayrıştırıcıları . Shell-script regex tabanlı olanlara benzer şekilde, bunlar HTML'deki kalıplara dayanan sayfalardan veri çıkararak çalışır ve genellikle diğer her şeyi göz ardı eder.

    Örneğin: Web sitenizde bir arama özelliği varsa, bu tür bir kazıyıcı bir arama isteği gönderebilir ve daha sonra, yalnızca arama sonucu bağlantılarını ve başlıklarını özel olarak almak için tüm sonuç bağlantılarını ve başlıklarını sonuçlar sayfası HTML'sinden alabilir. . Bunlar en yaygın olanlarıdır.

  • Ekran koruyucuları, örn. Web sitenizi gerçek bir tarayıcıda açan, JavaScript, AJAX vb. Çalıştıran ve daha sonra web sitesinden istediğiniz metni genellikle aşağıdaki yollarla alan Selenyum veya PhantomJS :

    • Sayfanız yüklendikten ve JavaScript çalıştırıldıktan sonra HTML'yi tarayıcıdan alma ve ardından istenen verileri ayıklamak için bir HTML ayrıştırıcı kullanma. Bunlar en yaygın olanlarıdır ve HTML ayrıştırıcılarını / sıyırıcılarını kırmak için birçok yöntem burada da çalışır.

    • Oluşturulan sayfaların ekran görüntüsünü alma ve ardından ekran görüntüsünde istenen metni çıkarmak için OCR kullanma. Bunlar nadirdir ve yalnızca verilerinizi gerçekten isteyen özel kazıyıcılar bunu ayarlayacaktır.

  • ScrapingHub veya Kimono gibi web kazıma hizmetleri . Aslında, işi sitenizi nasıl kazıyacağınızı ve başkalarının kullanması için içeriği nasıl çekeceğini bulmak olan insanlar var.

    Şaşırtıcı olmayan bir şekilde, profesyonel kazıma hizmetleri caydırmak en zor olanıdır, ancak sitenizi nasıl kazıyacağınızı anlamaya zor ve zaman alıcı hale getirirseniz, bu (ve bunu yapmak için onlara ödeme yapan kişiler) web sitenizi kazımaya uğramayabilir.

  • Web sitenizi çerçeveli diğer sitelerin sayfalarına gömme ve sitenizi mobil uygulamalara gömme.

    Teknik olarak kazıma yapmasa da, mobil uygulamalar (Android ve iOS) web sitelerini yerleştirebilir ve özel CSS ve JavaScript enjekte edebilir, böylece sayfalarınızın görünümünü tamamen değiştirebilir.

  • İnsan kopyala yapıştır: Kullanıcılar içeriğinizi başka bir yerde kullanmak için kopyalayıp yapıştıracaktır.

Bu farklı kazıyıcı türleri arasında çok fazla çakışma vardır ve birçok kazıyıcı farklı teknolojiler ve yöntemler kullanıyor olsalar bile benzer şekilde davranacaktır.

Bu ipuçları çoğunlukla kendi fikirlerimi, kazıyıcılar yazarken karşılaştığım çeşitli zorlukların yanı sıra internetler arası bilgi ve fikir parçalarını da içeriyor.

Kazıma nasıl durdurulur

Bunu tamamen önleyemezsiniz , çünkü ne yaparsanız yapın, kararlı kazıyıcılar hala nasıl kazınacağını anlayabilir. Bununla birlikte, birkaç şey yaparak çok fazla kazımayı durdurabilirsiniz:

Günlüklerinizi ve trafik kalıplarınızı izleyin; olağandışı etkinlik görürseniz erişimi sınırlayın:

Günlüklerinizi düzenli olarak kontrol edin ve aynı IP adresindeki benzer eylemler gibi otomatik erişimi (kazıyıcılar) gösteren olağandışı etkinlik durumunda erişimi engelleyebilir veya sınırlandırabilirsiniz.

Özellikle, bazı fikirler:

  • Hız sınırlaması:

    Kullanıcıların (ve sıyırıcıların) belirli bir zamanda yalnızca sınırlı sayıda işlem gerçekleştirmesine izin verin - örneğin, belirli bir IP adresinden veya kullanıcıdan saniyede yalnızca birkaç aramaya izin verin. Bu sıyırıcıları yavaşlatacak ve etkisiz hale getirecektir. İşlemler gerçek bir kullanıcının yapabileceğinden çok daha hızlı veya daha hızlı tamamlanırsa bir captcha da gösterebilirsiniz.

  • Olağandışı etkinliği tespit et:

    Belirli bir IP adresinden benzer birçok istek, aşırı sayıda sayfaya bakan veya olağandışı sayıda arama yapan biri gibi olağandışı bir etkinlik görürseniz, erişimi engelleyebilir veya sonraki istekler için bir captcha gösterebilirsiniz.

  • Sınırı sadece IP adresine göre izlemek ve derecelendirmekle kalmaz, diğer göstergeleri de kullanın:

    Engelleme veya ücret sınırlaması yaparsanız, yalnızca IP adresi başına yapmayın; belirli kullanıcıları veya sıyırıcıları tanımlamak için diğer göstergeleri ve yöntemleri kullanabilirsiniz. Belirli kullanıcıları / sıyırıcıları tanımlamanıza yardımcı olabilecek bazı göstergeler şunları içerir:

    • Kullanıcıların formları ne kadar hızlı doldurdukları ve bir düğmenin neresinde tıkladıkları;

    • JavaScript ile ekran boyutu / çözünürlüğü, saat dilimi, yüklü yazı tipleri vb. Gibi birçok bilgi toplayabilirsiniz; kullanıcıları tanımlamak için bunu kullanabilirsiniz.

    • HTTP üstbilgileri ve sıraları, özellikle User-Agent.

    Örneğin, hepsi aynı Kullanıcı Aracısı, ekran boyutu (JavaScript ile belirlenir) ve kullanıcı (bu durumda kazıyıcı) kullanan tek bir IP adresinden çok sayıda istek alırsanız, düğmeyi her zaman aynı şekilde ve düzenli aralıklarla, muhtemelen bir ekran kazıyıcı; benzer istekleri geçici olarak engelleyebilirsiniz (ör. söz konusu IP adresinden gelen kullanıcı aracısı ve ekran boyutuyla ilgili tüm istekleri engelleyebilirsiniz) ve bu şekilde söz konusu IP adresindeki gerçek kullanıcıları rahatsız edemezsiniz, örn. ortak bir internet bağlantısı durumunda.

    Dağıtılmış kazıma (botnet veya vekil ağ kullanarak sıyırıcı) göstergesi olarak farklı IP adreslerinden gelseler bile benzer istekleri tanımlayabileceğiniz için bunu daha da ileriye götürebilirsiniz. Aksi takdirde çok fazla özdeş istek alırsanız, ancak bunlar farklı IP adreslerinden geliyorsa engelleyebilirsiniz. Yine, gerçek kullanıcıları yanlışlıkla engellemediğini unutmayın.

    Bu, onlardan çok fazla bilgi alabileceğiniz için JavaScript çalıştıran ekran tarayıcılarına karşı etkili olabilir.

    Security Stack Exchange ile ilgili sorular:

  • Erişimi geçici olarak engellemek yerine bir Captcha kullanın:

    Hız sınırlamanın uygulanmasının basit yolu, belirli bir süre için erişimi geçici olarak engellemektir, ancak bir Captcha kullanmak daha iyi olabilir, daha aşağıda Captchas bölümüne bakın.

Kayıt ve giriş gerektir

Siteniz için uygunsa, içeriğinizi görüntülemek için hesap oluşturma isteğinde bulunun. Bu sıyırıcılar için iyi bir caydırıcıdır, ancak gerçek kullanıcılar için de iyi bir caydırıcıdır.

  • Hesap oluşturmaya ve giriş yapmaya ihtiyacınız varsa, kullanıcı ve kazıyıcı işlemlerini doğru bir şekilde izleyebilirsiniz. Bu şekilde, kazıma için belirli bir hesabın ne zaman kullanıldığını kolayca tespit edebilir ve yasaklayabilirsiniz. Hız sınırlaması veya kötüye kullanımı algılama gibi şeyler (kısa sürede çok sayıda arama gibi) daha kolay hale gelir, çünkü yalnızca IP adresleri yerine belirli sıyırıcıları tanımlayabilirsiniz.

Komut dosyalarının çok sayıda hesap oluşturmasını önlemek için şunları yapmalısınız:

  • Kayıt için bir e-posta adresi isteyin ve hesabı etkinleştirmek için açılması gereken bir bağlantı göndererek bu e-posta adresini doğrulayın. Her e-posta adresi için yalnızca bir hesaba izin ver.

  • Kayıt / hesap oluşturma sırasında bir captcha'nın çözülmesini isteyin.

İçeriği görüntülemek için hesap oluşturmayı zorunlu kılmak kullanıcıları ve arama motorlarını uzaklaştırır; bir makaleyi görüntülemek için hesap oluşturmaya ihtiyacınız varsa kullanıcılar başka bir yere gider.

Bulut barındırma ve kazıma hizmeti IP adreslerinden erişimi engelleyin

Bazen, sıyırıcılar Amazon Web Services veya GAE veya VPSes gibi web barındırma hizmetlerinden çalıştırılır. Bu tür bulut barındırma hizmetleri tarafından kullanılan IP adreslerinden kaynaklanan istekler için web sitenize erişimi sınırlayın (veya bir captcha gösterin).

Benzer şekilde, kazıyıcılar pek çok isteğin algılanmasını önlemek için bu proxy sunucuları kullanabileceğinden, proxy veya VPN sağlayıcıları tarafından kullanılan IP adreslerinden erişimi de sınırlayabilirsiniz.

Proxy sunucularından ve VPN'lerden erişimi engelleyerek gerçek kullanıcıları olumsuz yönde etkileyeceğinize dikkat edin.

Engellerseniz hata mesajınızı sıradan yapın

Engelleme / sınırlama erişimi yaparsanız, kazıyıcıya bloğa neyin neden olduğunu söylemediğinizden emin olun ve böylece kazıyıcılarının nasıl düzeltileceği konusunda ipuçları verin. Kötü bir fikir, aşağıdaki gibi metin içeren hata sayfalarını göstermek olacaktır:

  • IP adresinizden çok fazla istek var, lütfen daha sonra tekrar deneyin.

  • Hata, Kullanıcı Aracısı başlığı yok!

Bunun yerine, kazıyıcıya neye neden olduğunu söylemeyen samimi bir hata mesajı gösterin. Böyle bir şey çok daha iyi:

  • Üzgünüm, bir şeyler ters gitti. helpdesk@example.comSorun devam ederse desteğe başvurabilirsiniz .

Böyle bir hata sayfası görmeleri durumunda, bu gerçek kullanıcılar için çok daha kullanıcı dostudur. Ayrıca, gerçek bir kullanıcının hata mesajını görmesi durumunda, sabit kullanıcıların yerine sonraki istekler için bir captcha göstermeyi de düşünmelisiniz;

Web sitenize bir kazıyıcı tarafından erişildiğinden şüpheleniyorsanız Captchas kullanın.

Captchas ("Bilgisayarları ve İnsanları Ayırmak İçin Tamamen Otomatikleştirilmiş Test") sıyırıcıları durdurmada çok etkilidir. Maalesef, kullanıcıları rahatsız etmekte de çok etkili.

Bu nedenle, olası bir kazıyıcıdan şüphelendiğinizde ve kazıyıcı değil, gerçek bir kullanıcı olması durumunda erişimi de engellemeden kazıma işlemini durdurmak istediğinizde yararlıdırlar. Kazıyıcı olduğundan şüpheleniyorsanız içeriğe erişime izin vermeden önce bir captcha göstermeyi düşünebilirsiniz.

Captchas kullanırken dikkat edilmesi gerekenler:

  • Kendinizi yuvarlamayın, Google'ın reCaptcha'sı gibi bir şey kullanın : Bir captcha'yı kendiniz uygulamaktan çok daha kolay, kendinizle karşılaşabileceğiniz bazı bulanık ve çarpık metin çözümlerinden daha kullanıcı dostu (kullanıcılar genellikle sadece bir kutuyu işaretlemelidir) ) ve ayrıca bir komut dosyasının çözmesi, sitenizden sunulan basit bir resimden çok daha zordur

  • HTML biçimlendirmesinde captcha çözümünü dahil etmeyin: Aslında sayfanın kendisinde captcha için çözümü olan bir web sitesi gördüm , (oldukça gizli olmasına rağmen) böylece oldukça işe yaramaz hale getiriyor. Böyle bir şey yapma. Yine, reCaptcha gibi bir hizmet kullanın ve bu tür bir sorununuz olmayacak (eğer doğru kullanırsanız).

  • Captcha'lar toplu olarak çözülebilir: Gerçek, düşük ücretli insanların captcha'ları toplu olarak çözdüğü captcha çözme hizmetleri vardır. Yine, reCaptcha kullanmak burada iyi bir fikirdir, çünkü korumaları vardır (kullanıcının captcha'yı çözmek için nispeten kısa bir süre gibi). Verileriniz gerçekten değerli olmadığı sürece bu tür bir hizmetin kullanılması olası değildir.

Metin içeriğinizi resim olarak sunma

Metni bir görüntü sunucusu tarafında oluşturabilir ve görüntülenmesini sunarak basit sıyırıcıların metin çekmesini engelleyebilirsiniz.

Ancak, bu ekran okuyucular, arama motorları, performans ve hemen hemen her şey için kötüdür. Bazı yerlerde de yasadışıdır (erişilebilirlik nedeniyle, örneğin Engelli Amerikalılar Yasası) ve ayrıca bazı OCR ile atlamak kolaydır, bu yüzden bunu yapmayın.

CSS sprite'larına benzer bir şey yapabilirsiniz, ancak bu aynı sorunlardan muzdariptir.

Veri kümenizin tamamını ifşa etmeyin:

Mümkünse, bir komut dosyasının / botun tüm veri kümenizi alması için bir yol sunmayın. Örnek olarak: Çok sayıda bireysel makale içeren bir haber siteniz var. Bu makalelere yalnızca site araması yoluyla arayarak erişilmesini sağlayabilirsiniz ve sitedeki tüm makalelerin ve URL'lerinin herhangi bir yerinde bir listeniz yoksa , bu makalelere yalnızca aramayı kullanarak erişebilirsiniz. özellik. Bu, sitenizdeki tüm makaleleri almak isteyen bir komut dosyasının, hepsini bulmak için makalelerinizde görünebilecek tüm olası kelime öbeklerini aramak zorunda kalacağı anlamına gelir, bu da zaman alıcı, korkunç verimsiz ve umarım kazıyıcı pes eder.

Bu, aşağıdaki durumlarda etkisiz olacaktır:

  • Bot / script zaten tam veri setini istemiyor / buna ihtiyaç duymuyor.
  • Makaleleriniz, şuna benzeyen bir URL'den sunulur example.com/article.php?articleId=12345. Bu (ve benzer şeyler) sıyırıcıların tüm articleIdleri yinelemesine ve tüm makaleleri bu şekilde istemesine izin verecektir .
  • Sonunda tüm makaleleri bulmanın başka yolları da vardır, örneğin diğer makalelere yönlendiren makalelerin içindeki bağlantıları takip etmek için bir komut dosyası yazarak.
  • "Ve" veya "the" gibi bir şeyi aramak neredeyse her şeyi açığa çıkarabilir, bu yüzden farkında olunması gereken bir şeydir. (Bunu yalnızca ilk 10 veya 20 sonucu döndürerek önleyebilirsiniz).
  • İçeriğinizi bulmak için arama motorlarına ihtiyacınız var.

API'larınızı, uç noktalarınızı ve benzeri şeyleri ifşa etmeyin:

İstemeden bile olsa API'ları göstermediğinizden emin olun. Örneğin, verilerinizi yüklemek için AJAX veya Adobe Flash veya Java Uygulaması (ağ yasakları) içinden ağ istekleri kullanıyorsanız, sayfadan ağ isteklerine bakmak ve bu isteklerin nereye gideceğini bulmak önemsizdir ve daha sonra mühendisliği tersine çevirin ve bu uç noktaları bir kazıyıcı programda kullanın. Açıklandığı gibi uç noktalarınızı gizlediğinizden ve başkalarının kullanmasını zorlaştırdığınızdan emin olun.

HTML ayrıştırıcılarını ve sıyırıcılarını caydırmak için:

HTML ayrıştırıcıları, HTML'deki tanımlanabilir kalıplara dayanan sayfalardan içerik çıkararak çalıştığından, bu sıyırıcıları kırmak veya hatta vidalamak için bu kalıpları kasıtlı olarak değiştirebiliriz. Bu ipuçlarının çoğu, örümcekler ve ekran koruyucular gibi diğer kazıyıcılar için de geçerlidir.

HTML'nizi sık sık değiştirin

HTML sayfanızın belirli, tanımlanabilir bölümlerinden içerik çıkararak HTML'yi doğrudan işleyen kazıyıcılar. Örneğin: Web sitenizdeki tüm sayfaları varsa divbir kimliğe sahip article-contentmakalenin metin içeren, o zaman sitenizdeki tüm makale sayfalarını ziyaret etmek için bir senaryo yazmaya ve içeriği metin ayıklamak için önemsiz olan article-contentdiv her makale sayfasında ve ayrıca kazıyıcı, sitenizdeki tüm makaleleri başka bir yerde yeniden kullanılabilecek bir biçimde içerir.

Sayfalarınızın HTML'sini ve yapısını sık sık değiştirirseniz, bu sıyırıcılar artık çalışmaz.

  • HTML'nizdeki kimlik ve öğe sınıflarını, belki de otomatik olarak, sık sık değiştirebilirsiniz. Yani, eğer sizin div.article-contentgibi bir şey haline gelir div.a4c36dda13eaf0ve her hafta değişirse, kazıyıcı başlangıçta iyi çalışır, ancak bir hafta sonra kırılır. Kimliklerinizin / sınıflarınızın uzunluğunu da değiştirdiğinizden emin olun, aksi takdirde kazıyıcı div.[any-14-characters]bunun yerine istenen div'ı bulmak için kullanır. Diğer benzer deliklere de dikkat edin ..

  • İşaretlemeden istenen içeriği bulmanın bir yolu yoksa, kazıyıcı bunu HTML'nin yapılandırılma biçiminden yapar. Yani, tüm makale sayfalarınız benzerse, a'dan sonra gelen her divbir içerik makale içeriğindeyse, sıyırıcılar makale içeriğini buna göre alır. Yine, bunu kırmak için, HTML'nize periyodik ve rastgele, örneğin ek işaretleme ekleyebilir / kaldırabilirsiniz. fazladan s veya s ekleme . Modern sunucu tarafı HTML işleme ile bu çok zor olmamalıdır.divh1divspan

Dikkat edilmesi gerekenler:

  • Sıkıcı ve uygulanması, bakımı ve hatalarının ayıklanması zor olacaktır.

  • Önbelleğe almayı engelleyeceksiniz. Özellikle HTML öğelerinizin kimliklerini veya sınıflarını değiştirirseniz, bu CSS ve JavaScript dosyalarınızda karşılık gelen değişiklikler gerektirir; bu, her değiştirdiğinizde tarayıcı tarafından yeniden indirilmeleri gerektiği anlamına gelir. Bu, tekrarlanan ziyaretçiler için daha uzun sayfa yükleme süreleri ve artan sunucu yüküyle sonuçlanır. Haftada sadece bir kez değiştirirseniz, büyük bir sorun olmayacaktır.

  • Akıllı sıyırıcılar, gerçek içeriğin nerede olduğunu belirterek içeriğinizi almaya devam edebilir, örn. sayfadaki büyük tek bir metin bloğunun asıl makale olması muhtemel olduğunu bilerek. Bu, istenen verileri sayfadan bulmayı ve çıkarmayı mümkün kılar. Boilerpipe tam olarak bunu yapar.

Temel olarak, bir komut dosyasının benzer her sayfa için gerçek, istenen içeriği bulmasının kolay olmadığından emin olun.

Ayrıca PHP'de nasıl uygulanabileceğiyle ilgili ayrıntılar için XPath'a bağlı tarayıcıların sayfa içeriği almasını engelleme konusuna bakın .

HTML'nizi kullanıcının konumuna göre değiştirme

Bu bir önceki ipucuna benzer. Kullanıcının bulunduğu yere / ülkeye (IP adresine göre belirlenir) dayalı olarak farklı HTML sunarsanız, bu, kullanıcılara teslim edilen kazıyıcıları kırabilir. Örneğin, birisi sitenizden veri kazıyan bir mobil uygulama yazıyorsa, başlangıçta iyi çalışır, ancak gerçekte kullanıcılara dağıtıldığında kırılır, çünkü bu kullanıcılar farklı bir ülkede olabilir ve böylece farklı HTML alabilirler. gömülü kazıyıcı tüketmek için tasarlanmamıştır.

HTML'inizi sık sık değiştirin, sıyırıcılarla aktif olarak vidalayın!

Örnek: Web sitenizde, adresinde bulunan example.com/search?query=somesearchqueryve aşağıdaki HTML'yi döndüren bir arama özelliğiniz var :

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

Tahmin edebileceğiniz gibi, bu kazıma kolaydır: bir kazıyıcı tek yapmanız gereken arama URL'sini bir sorgu ile vurmak ve döndürülen HTML'den istenen verileri çıkarmaktır. HTML'yi yukarıda açıklandığı gibi periyodik olarak değiştirmeye ek olarak , eski kimlikleri eski kimlikler ve sınıflarla birlikte bırakabilir, CSS ile gizleyebilir ve sahte verilerle doldurabilir, böylece kazıyıcıyı zehirleyebilirsiniz. Arama sonuçları sayfası şu şekilde değiştirilebilir:

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

Bu, sınıflara veya kimliklere dayalı olarak HTML'den veri çıkarmak için yazılan sıyırıcıların görünüşte çalışmaya devam edeceği anlamına gelir, ancak gerçek kullanıcıların CSS ile gizlendikleri için gerçek verileri asla görmeyecekleri sahte veriler veya hatta reklamlar alacaklar.

Sıyırıcı ile vidalayın: Sayfanıza sahte, görünmez bal küpü verileri ekleyin

Önceki örneğe ekleyerek, sıyırıcıları yakalamak için HTML'nize görünmez bal küpü öğeleri ekleyebilirsiniz. Daha önce açıklanan arama sonuçları sayfasına eklenebilecek bir örnek:

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

Tüm arama sonuçlarını almak için yazılmış bir kazıyıcı, tıpkı sayfadaki diğer gerçek arama sonuçlarından herhangi biri gibi bunu alacak ve istenen içeriği arayan bağlantıyı ziyaret edecektir. Gerçek bir insan asla ilk etapta görmez (CSS ile gizlendiği için) ve bağlantıyı ziyaret etmez. Google’lar gibi gerçek ve istenen bir örümcek /scrapertrap/, robots.txt dosyanızda izin vermediğiniz için bağlantıyı ziyaret etmez .

Bunu scrapertrap.phpziyaret eden IP adresi için blok erişimi gibi bir şey yapabilir veya bu IP'den sonraki tüm istekler için bir captcha zorlayabilirsiniz.

  • /scrapertrap/Arama motoru botlarının içine düşmemesi için robots.txt dosyanızdaki bal küpünüze ( ) izin vermemeyi unutmayın .

  • Bunu HTML'nizi sık sık değiştirmenin önceki ipucuyla birleştirebilir / birleştirebilirsiniz.

  • Kazıyıcılar sonunda bundan kaçınmayı öğreneceğinden bunu sık sık değiştirin. Bal küpü URL'sini ve metnini değiştirin. Ayrıca, gizleyiciler, stylegizlemek için kullanılan CSS ile bir özniteliği olan herhangi bir şeyden kaçınmayı öğreneceğinden, gizlemek için kullanılan satır içi CSS'yi değiştirmeyi düşünün ve bunun yerine bir kimlik özelliği ve harici CSS kullanın . Ayrıca sadece bazen etkinleştirmeyi deneyin, böylece kazıyıcı başlangıçta çalışır, ancak bir süre sonra kırılır. Bu, bir önceki ipucu için de geçerlidir.

  • Kötü niyetli kişiler, bal küpünüzün bağlantısını paylaşarak veya hatta bu bağlantıyı bir görüntü olarak (ör. Bir forumda) gömerek gerçek kullanıcılara erişimi engelleyebilir. URL'yi sık sık değiştirin ve yasak sürelerini görece kısa yapın.

Bir kazıyıcı tespit ederseniz sahte ve işe yaramaz veriler sunun

Açıkça neyin kazıyıcı olduğunu tespit ederseniz, sahte ve işe yaramaz veriler sunabilirsiniz; bu, sıyırıcının web sitenizden aldığı verileri bozar. Ayrıca, bu tür sahte verileri gerçek verilerden ayırt etmeyi imkansız hale getirmelisiniz, böylece sıyırıcılar vidalandıklarını bilmezler.

Örnek olarak: bir haber web siteniz var; bir kazıyıcı tespit ederseniz, erişimi engellemek yerine, sahte, rastgele oluşturulmuş makaleleri sunun ve bu, kazıyıcının aldığı verileri zehirleyecektir. Sahte verilerinizi gerçek şeyden ayırt edilemez yaparsanız, sıyırıcıların istediklerini, yani gerçek verileri elde etmelerini zorlaştıracaksınız.

Kullanıcı Aracısı boş / eksikse istekleri kabul etmeyin

Genellikle, tembel olarak yazılan sıyırıcılar istekleriyle bir Kullanıcı Aracısı başlığı göndermeyecek, oysa tüm tarayıcılar ve arama motoru örümcekleri gönderecektir.

Kullanıcı Aracısı başlığının bulunmadığı bir istek alırsanız, bir captcha gösterebilir veya erişimi engelleyebilir veya sınırlandırabilirsiniz. (Veya yukarıda açıklanan sahte verileri veya başka bir şeyi sunun ..)

Kimlik sahtekarlığı önemsizdir, ancak kötü yazılmış sıyırıcılara karşı bir önlem olarak uygulamaya değer.

Kullanıcı Aracısı ortak bir kazıyıcı ise istekleri kabul etmeyin; kazıyıcılar tarafından kullanılan kara liste

Bazı durumlarda, sıyırıcılar gerçek bir tarayıcı veya arama motoru örümceğinin kullanmadığı bir Kullanıcı Aracısı kullanır, örneğin:

  • "Mozilla" (Sadece bu, başka hiçbir şey. Burada kazıma hakkında birkaç soru gördüm, bunu kullanarak. Gerçek bir tarayıcı asla sadece bunu kullanmaz)
  • "Java 1.7.43_u43" (Varsayılan olarak, Java'nın HttpUrlConnection böyle bir şey kullanır.)
  • "BIZCO EasyScraping Studio 2.0"
  • "wget", "curl", "libcurl", .. (Wget ve cURL bazen temel kazıma için kullanılır)

Belirli bir User Agent dizesinin sitenizdeki sıyırıcılar tarafından kullanıldığını ve gerçek tarayıcılar veya yasal örümcekler tarafından kullanılmadığını tespit ederseniz, bunu kara listenize de ekleyebilirsiniz.

Varlıklar (CSS, resimler) istemiyorsa, gerçek bir tarayıcı değildir.

Gerçek bir tarayıcı (neredeyse her zaman) resim ve CSS gibi varlıkları isteyecek ve indirecektir. HTML ayrıştırıcıları ve sıyırıcıları, yalnızca gerçek sayfalar ve içerikleriyle ilgilendikleri için olmaz.

Varlıklarınıza istek kaydedebilirsiniz ve yalnızca HTML için çok sayıda istek görürseniz, bu bir kazıyıcı olabilir.

Arama motoru botları, eski mobil cihazlar, ekran okuyucular ve yanlış yapılandırılmış cihazların da varlık istemeyebileceğine dikkat edin.

Çerezleri kullanın ve gerekli kılın; bunları kullanıcı ve sıyırıcı işlemleri izlemek için kullanın.

Web sitenizi görüntülemek için çerezlerin etkinleştirilmesini isteyebilirsiniz. Bu deneyimsiz ve acemi sıyırıcı yazarları caydırır, ancak bir kazıyıcı için çerez göndermek kolaydır. Bunları kullanır ve bunlara gereksinim duyarsanız, kullanıcı ve kazıyıcı eylemlerini bunlarla izleyebilir ve böylece IP başına bir kullanıcı yerine kullanıcı başına hız sınırlama, engelleme veya captcha'ları gösterebilirsiniz.

Örneğin: kullanıcı arama yaptığında benzersiz bir tanımlama çerezi ayarlayın. Sonuç sayfaları görüntülendiğinde, bu çerezi doğrulayın. Kullanıcı tüm arama sonuçlarını açarsa (çerezden anlayabilirsiniz), muhtemelen bir kazıyıcıdır.

Sıyırıcılar, çerezleri istekleri ile de gönderebilir ve gerektiğinde atabilirler. Siteniz yalnızca çerezlerle çalışıyorsa, çerezleri devre dışı bırakılmış gerçek kullanıcılar için erişimi de engelleyeceksiniz.

Çerezi ayarlamak ve almak için JavaScript kullanıyorsanız, çerezi istekleri ile alıp gönderemedikleri için JavaScript çalıştırmayan sıyırıcıları engelleyeceğinizi unutmayın.

İçeriğinizi yüklemek için JavaScript + Ajax kullanın

Sayfanın kendisi yüklendikten sonra içeriğinizi yüklemek için JavaScript + AJAX kullanabilirsiniz. Bu, içeriğe JavaScript çalıştırmayan HTML ayrıştırıcıları tarafından erişilemez hale gelir. Bu genellikle yeni başlayanlar ve deneyimsiz programcıların kazıyıcılar yazmaları için etkili bir caydırıcıdır.

Farkında ol:

  • Gerçek içeriği yüklemek için JavaScript kullanmak kullanıcı deneyimini ve performansını düşürür

  • Arama motorları da JavaScript'i çalıştıramayarak içeriğinizi dizine eklemelerini engelleyebilir. Bu, arama sonuçları sayfaları için bir sorun olmayabilir, ancak makale sayfaları gibi başka şeyler için de olabilir.

İşaretlemenizi, komut dosyalarından gelen ağ isteklerini ve diğer her şeyi gizleyin.

Verilerinizi yüklemek için Ajax ve JavaScript kullanıyorsanız, aktarılan verileri gizleyin. Örnek olarak, verilerinizi sunucuda kodlayabilir (base64 veya daha karmaşık bir şeyle) ve ardından Ajax aracılığıyla getirdikten sonra kodunu çözebilir ve istemcide görüntüleyebilirsiniz. Bu, ağ trafiğini denetleyen bir kişinin sayfanızın nasıl çalıştığını ve veri yüklediğini hemen görmeyeceği anlamına gelir ve şifre çözme algoritmanızı tersine mühendislik yapmak zorunda kalacakları için birisinin doğrudan uç noktalarınızdan istek verileri istemesi daha zor olacaktır.

  • Verileri yüklemek için Ajax kullanıyorsanız, ilk önce sayfayı yüklemeden uç noktaları kullanmayı zorlaştırmalısınız; örneğin, JavaScript'inize veya HTML'nize yerleştirebileceğiniz bir parametre olarak bir oturum anahtarı gerektirerek.

  • Ayrıca gizlenmiş verilerinizi doğrudan ilk HTML sayfasına gömebilir ve ekstra ağ isteklerini önleyecek şekilde gizlemek ve görüntülemek için JavaScript'i kullanabilirsiniz. Bunu yapmak, kazıyıcıyı yazan kişinin JavaScript'inizi tersine çevirmek zorunda kalacağı için (yalnızca sizin de gizlemeniz gerekir) JavaScript çalıştırmayan bir HTML yalnızca ayrıştırıcı kullanarak verileri ayıklamayı önemli ölçüde zorlaştıracaktır.

  • Çözdüğünüz sıyırıcıları kırmak için gizleme yöntemlerinizi düzenli olarak değiştirmek isteyebilirsiniz.

Bununla birlikte, böyle bir şey yapmanın birkaç dezavantajı vardır:

  • Sıkıcı ve uygulanması, bakımı ve hatalarının ayıklanması zor olacaktır.

  • Aslında JavaScript çalıştıran ve daha sonra verileri ayıklayan sıyırıcılara ve ekran koruyuculara karşı etkisiz olacaktır. (Çoğu basit HTML ayrıştırıcısı JavaScript çalıştırmaz)

  • JavaScript'i devre dışı bırakmışlarsa sitenizi gerçek kullanıcılar için işlevsiz hale getirecektir.

  • Performans ve sayfa yükleme süreleri azalacaktır.

Teknik Olmayan:

  • İnsanlara kazımalarını söyle ve bazıları buna saygı duyacak

  • Bir avukat bulun

  • Verilerinizi kullanılabilir hale getirin, bir API sağlayın:

    Verilerinizi kolayca kullanılabilir hale getirebilir ve ilişkilendirme ve sitenize geri bir bağlantı isteyebilirsiniz. Belki $$$ bunun için ücret.

Çeşitli:

  • Cloudflare veya Distill Networks ( burada nasıl çalıştığına dair ayrıntılar) ile kazıma önleme, bunları yapan ticari kazıma koruma hizmetleri ve sizin için daha fazlası da vardır.

  • Gerçek kullanıcılar için kullanılabilirlik ve kazıyıcı geçirmezlik arasında bir denge bulun: Yaptığınız her şey kullanıcı deneyimini bir şekilde olumsuz yönde etkileyecek, uzlaşmalar bulacak.

  • Mobil sitenizi ve uygulamalarınızı unutmayın. Bir mobil uygulamanız varsa, ekran görüntüsü de alınabilir ve ağ trafiği, kullandığı REST uç noktalarını belirlemek için incelenebilir.

  • Sıyırıcılar diğer sıyırıcıları sıyırır: İçeriğinizden alıntı yapılmış bir web sitesi varsa, diğer sıyırıcılar o sıyırıcının web sitesinden sıyırır.

Daha fazla okuma:


11
Bu beni buraya getirdi. Oldukça etkileyici bir cevap. Ayrıca, oldukça şaşırtıcı bir revizyon tarihi. Gönderi için teşekkürler. Bir oylama yap. Sadece buna harcanan çabadan dolayı değil, aynı zamanda benim için yararlı olduğu için.
DaveTheMinion

1
Mükemmel cevap! İşte birkaç düşünce. A real browser will (almost always) request and download assets such as images and CSSerişilebilirlik okuyucuları için de geçerli mi? CAPTCHA bozuldu, en azından profesyonel hizmetler muhtemelen engellemedi. Çerezlerin kullanımı AB'de bildirim / onay gerektirir. Find a balance between usability for real users and scraper-proofnessayrıca programlama zamanı / karmaşıklığı ve finansal fayda arasında denge sağlar.
Eric J.

5
@JonH, Eğer ilgileniyorlarsa okuyacaklar. Ayrıca, başlıkları ve alt başlıkları olan paragraflara ayırdım, böylece insanlar tarayabilir ve istedikleri parçaları okuyabilir. Aslında SO'da da benzer şekilde birkaç uzun cevap var ve insanlar bunları okuyor.
JonasCz - Monica'yı eski durumuna döndür

2
@JoshCrozier - Sadece böyle siteler bu kadar bilgi ile iyi oynamıyor düşünüyorum. Bilginin kötü olduğunu söylemiyorum.
JonH

2
Not: İçerik fikrinin steganografik parmak izini kullanması muhtemelen bir mahkemede kullanılabilir. Verilerinizin sahibinin verileri doğrudan verilerdeki benzersiz özelliklerle sizden aldığını kanıtladığınızda şoku hayal edin ...
ErikE

241

Ayarladığınızı varsayacağım robots.txt.

Diğerlerinin de belirttiği gibi, kazıyıcılar faaliyetlerinin neredeyse her yönüyle sahte olabilir ve muhtemelen kötü adamlardan gelen talepleri belirlemek çok zordur.

Değerlendirirdim:

  1. Bir sayfa oluşturun /jail.html,.
  2. İçindeki sayfaya erişime izin vermeyin robots.txt(saygılı örümcekler asla ziyaret etmeyecektir).
  3. Sayfalarınızdan birine CSS ( display: none) ile gizleyerek bir bağlantı yerleştirin .
  4. Ziyaretçilerin IP adreslerini kaydedin /jail.html .

Bu, kazıcıları göz ardı ederek dikkate almayan kazıyıcılar robots.txt .

Ayrıca yapmak isteyebilirsiniz /jail.htmlsahte verilerle (normal sayfalarıyla aynı, kesin biçimlendirmeyi sahip bir bütün web sitesinin tamamını, ancak /jail/album/63ajdka, /jail/track/3aads8vs.). Bu şekilde, kötü kazıyıcılar tamamen engelleme şansınız olana kadar "olağandışı girdi" olarak uyarılmaz.


48
Bu tekniğin daha önce "bal küpü" olarak adlandırıldığını gördüm. Ayrıca, bir sayfaya bir e-posta adresi koyduğunuz ancak gizlediğiniz veya insanların yasal posta göndermesinin açık olmadığını belirten spam filtrelemede de kullanılan bir tekniktir. Ardından, bu adrese posta dağıtan herhangi bir posta sunucusunun IP adresini toplayın.
thomasrutter

12
Bu, bağlantıları taradıklarını varsayar. Çoğu sıyırıcı bir tür form sunmaya ve geri dönen verileri kazımayı dener.
Byron Whitlock

9
Perl betiği tarafından oluşturulan diğer "sayfalara" bağlantıları olan e-postalar için Perl tabanlı honeypot'ları gördüm. Robots.txt dosyasını okuyan meşru botlar ona bakmaz ve kullanıcılardan CSS aracılığıyla gizlenir, ancak kazıyıcılar (veya e-posta biçerdöverleri), tümü üzerinde kötü veriler bulunan sonsuz derinlikte bir sayfa ağacına hızla yakalanır. Komut dosyasının bağlantısını, sayfalarınızın her birinin başına koyun.
Stephen P

18
Honeypot'lar için atmak için bir başka harika şey, teergrubing (veya tarpitting). Bu, sevdiğim eski bir tekniktir - kötü bir adamı tanımladığınızda, zaman aşımına uğramadan bağlantılarını fiziksel olarak mümkün olduğunca uzun süre açık tutarak, spam / kazıma işlemini bir taramaya getirersiniz. Tabii ki, bu onlara da olduğunuzu uyarabilir, ama tanrım eğlenceli. tr.wikipedia.org/wiki/Teergrubing
womp

11
Bu yaklaşımla ilgili tek sorun, popüler bir foruma [img] sitenizi / jail.html [/ img] yerleştirmem. Sisteminize giriş yapmış ton IP alacaksınız ve hangisinin kötü olduğunu filtrelemek zor olacaktır. Bu tür şeyleri önlemek istiyorsanız, URL'de IP ile ilişkili bir belirteç eklemeniz gerekir. Jail.php? T = hoeyvm gibi bir şey ve veritabanında sayfa isteyen hoeyvm ve IP birliği var.
HoLyVieR

48

Sue onları.

Cidden: Biraz paranız varsa, İnternetteki yollarını bilen iyi, hoş, genç bir avukatla konuşun. Burada gerçekten bir şeyler yapabilirsin. Sitelerin bulunduğu yere bağlı olarak, bir avukatın ülkenizde durdurma ve vazgeçme veya eşdeğeri yazmasını sağlayabilirsiniz. En azından piçleri korkutabilirsin.

Sahte değerlerinizin girildiğini belgeleyin. Size açıkça (ancak belirsiz) işaret eden sahte değerler ekleyin. Bu telefon rehberi şirketleri için yaygın bir uygulama olduğunu düşünüyorum ve burada Almanya'da, kopyaların 1: 1 kopyaladıkları sahte girişlerle yakalandıkları birkaç örnek olduğunu düşünüyorum.

Bu, HTML kodunuzu bozmaya, SEO, geçerlilik ve diğer şeyleri sürüklemeye yönlendirirseniz utanç verici olurdu (aynı sayfalar için her istekte biraz farklı bir HTML yapısı kullanan geçici bir sistem zaten çok yardımcı olabilir) karşı içeriği çıkarmak için her zaman HTML yapılarına ve sınıf / kimlik adlarına dayanan kazıyıcılar.)

Bunun gibi durumlar, telif hakkı yasalarının yararlı olduğu durumlardır. Para kazanmak için diğer insanların dürüst çalışmasını koparmak, savaşabilmeniz gereken bir şeydir.


9
yalnızca sağlam yasal çerçevelere sahip ülkelerde çalışır.
TomL

3
Avukatlar çatışmaya giriyor ve ondan kâr ediyor. Nadiren bir avukat mahkemeye gitmemenizi tavsiye eder. Sahip olan herkesin kazanmanın ve kaybetmenin 'adalet' kavramları ile ilgisi olmadığını, o günkü argüman, ruh hali ve önyargılarla ilgisi olmadığını söyleyecektir. Yanlış giderse, sadece avukatınızın masraflarından değil, diğer taraflardan da ve karşı dava açmaya karar vermeleri durumunda sorumlu olabileceğinizi unutmayın. Evinizi ve hayatınızdaki diğer varlıkları kolayca kaybedebilirsiniz. Ben tavsiye ederim bir kumar değil. Her ne pahasına olursa olsun mahkemelerden kaçınmanızı tavsiye ederim.
Frankie

3
@TomL ile hemfikirim. Eğer Batı'daysa, biraz akla yatkın. Ama Hindistan / Çin / Rusya / Ukrayna / her neyse - o zaman, ciddi olarak, hiç şans yok. Rus mahkemeleri hakkında söyleyebilirim: iddialarınızla çalışmaktan bile rahatsız olmazlar.
Highstaker

35

Bunu tamamen önlemek için yapabileceğiniz hiçbir şey yok. Sıyırıcılar, kullanıcı aracılarını taklit edebilir, birden fazla IP adresi vb. Kullanabilir ve normal bir kullanıcı olarak görünebilir. Yapabileceğiniz tek şey, sayfanın yüklenmesi sırasında metnin kullanılamamasını sağlamaktır - resim, flaş veya JavaScript ile yükleyin. Ancak, ilk ikisi kötü fikirlerdir ve sonuncusu, normal kullanıcılarınızdan bazıları için JavaScript etkinleştirilmemişse erişilebilirlik sorunu olur.

Sitenizi kesinlikle çarpıp tüm sayfalarınızda geziniyorlarsa, bir tür hız sınırlaması yapabilirsiniz.

Yine de biraz umut var. Sıyırıcılar, sitenizin verilerinin tutarlı bir biçimde olmasına güvenir. Bir şekilde rasgele seçebilseydiniz, kazıyıcılarını kırabilir. Her yükte sayfa öğelerinin kimliğini veya sınıf adlarını vb. Değiştirmek gibi şeyler. Ama bu yapılacak çok iş ve buna değip değmeyeceğinden emin değilim. Ve o zaman bile, muhtemelen yeterli özveri ile dolaşabilirlerdi.


14
Ekran kazıyıcılar siteden normal bir kişiden çok daha hızlı yırtılacağından, bir IP'nin dakikada kaç sayfa görüntüleyebileceğini sınırlayan bir sistem oluşturmak iyi bir saldırıdır.
TravisO

Kabul. IP'ler maliyetlidir ve çoğu hosting şirketi tarafından sınırlandırılmıştır.
Tal Weiss

re: "Her yükteki sayfa öğelerinin kimliğini veya sınıf adlarını değiştirmek gibi şeyler vb." PHP ile bir sınıf adı oluşturup sonra sadece <div class = "<? Php echo $ myPHPGeneratedClassName;?>"> Kullanarak tamamen benzersiz hale getirmek için rastgele dizeler kullanabilirsiniz. Desen bulmayı engelleyen her şey, DOM'dan ayrıştırmayı çok daha zorlaştırır.
niggles

IP bulmak zor değil. Çok sayıda proxy, arkadaş bilgisayarı, iş bilgisayarı, okul bilgisayarı, kütüphane bilgisayarı var ...
Gizli

@ user257493: Doğru, ama burada veri kazıyan birinden bahsediyoruz. Muhtemelen sadece veri toplamak için bu kadar çaba sarf etmeyeceklerdir . Ve eğer yaparlarsa, sonunda IP'lerini tüketeceksiniz.
ryeguy

31

Verilerinize erişmek için bir XML API'si sağlayın; kullanımı basit bir şekilde. İnsanlar verilerinizi isterse, elde edecekler, siz de dışarı çıkabilirsiniz.

Bu şekilde, en azından kazıyıcıların HTTP isteklerini ve büyük miktarlarda bant genişliğini yakalamamasını sağlayarak etkili bir işlevsellik alt kümesi sağlayabilirsiniz.

Sonra tek yapmanız gereken verilerinizin API'yı kullanmasını isteyen kişileri ikna etmektir. ;)


3
Bu çok makul görünüyor. Ekran kazıma işleminin önlenmesi çok zordur ve bir API sağlarsanız, buna bazı kısıtlamalar koyabilir, bildirimler ekleyebilir ("İçerik ----.com") ve temel olarak hangi verilerin verildiğini kontrol edebilirsiniz.
alecwh

6
@alecwh: erişim için ücret alın!
André Caron

3
Size ödül verdim, çünkü kısmen her web sitesi bunu yaparsa web çok daha iyi olurdu. Umarız daha yaygın hale gelir.
JonasCz - Monica'yı

1
Hizmete kaydolmalarını sağlar
yapmaz

Ben bu konuşmanın karşı tarafında böyle biriyim. Broadway şovları için modeller oluşturuyorum ve düzgün bir şekilde erişmek yerine tüm verilerimi kazımak zorundayım.
Yaakov Bressler

22

Üzgünüm, bunu yapmak gerçekten çok zor ...

Kibarca onlardan içeriğinizi kullanmamalarını rica etmenizi öneririm (içeriğiniz telif hakkıyla korunuyorsa).

Eğer öyleyse ve indirmezlerse, o zaman furthur eylemi yapabilir ve onlara bir durma ve vazgeçme mektubu gönderebilirsiniz .

Genellikle, kazıma işlemini önlemek için ne yaparsanız yapın erişilebilirlik, botlar / örümcekler vb. Gibi daha olumsuz bir etki ile sonuçlanacaktır.


12

Tamam, tüm gönderilerin söylediği gibi, arama motoru dostu yapmak istiyorsanız botlar kesin olarak kazınabilir.

Ancak yine de birkaç şey yapabilirsiniz ve% 60-70 kazıma botları için etkili olabilir.

Aşağıdaki gibi bir kontrol komut dosyası oluşturun.

Belirli bir IP adresi çok hızlı ziyaret ediyorsa, birkaç ziyaretten (5-10) sonra IP adresini + tarayıcı bilgilerini bir dosyaya veya veritabanına koyun.

Sonraki adım

(Bu bir arka plan işlemi olacak ve her zaman çalışır veya birkaç dakika sonra planlanır.) Şüpheli IP adreslerini kontrol etmeye devam edecek başka bir komut dosyası yapın.

Durum 1. Kullanıcı Aracısı Google, Bing , Yahoo gibi bilinen bir arama motoruna aitse (kullanıcı aracıları hakkında daha fazla bilgiyi Google uygulamasını kullanarak bulabilirsiniz). O zaman http://www.iplists.com/ adresini görmelisiniz . Bu liste ve kalıpları eşleştirmeye çalışın. Sahte bir kullanıcı aracısı gibi görünüyorsa, bir CAPTCHA doldurmayı isteyin sonraki ziyaretinizde . (Botların IP adresleri üzerinde biraz daha araştırmanız gerekiyor. Bunun mümkün olduğunu biliyorum ve IP adresinin whois'lerini de deniyorum. Yardımcı olabilir.)

Durum 2. Bir arama botunun kullanıcı aracısı yok: Bir sonraki ziyaretinizde bir CAPTCHA doldurmanız yeterli.


+1 iplists.com'u kullanmak mükemmel bir fikirdir
Daniel Trebbien

10

Geç cevap - ve bu cevap muhtemelen duymak istediğiniz cevap değildir ...

Kendim zaten farklı uzmanların birçok (birçok onlarca) yazdı veri madenciliği kazıyıcılarının . ("açık veri" felsefesini sevdiğim için).

İşte diğer cevaplarda zaten birçok tavsiye var - şimdi şeytanın savunucu rolünü oynayacağım ve etkinliklerini genişletecek ve / veya düzeltecağım.

İlk:

  • birisi verilerinizi gerçekten istiyorsa
  • Eğer olamaz etkili bir (teknik) veri gizleme
  • verilerin "normal kullanıcılarınız" tarafından herkes tarafından erişilebilir olması gerekiyorsa

Bazı teknik engelleri kullanmaya çalışmak sorunlara değmez, neden:

  • kullanıcı deneyimini kötüleştirerek normal kullanıcılarınıza
  • düzenli ve memnuniyetle karşılanan botlara (arama motorları)
  • vb...

Düz HMTL - en kolay yol, iyi tanımlanmış yapı ve css sınıflarıyla düz HTML sayfalarını ayrıştırmaktır. Örneğin, öğeyi Firebug ile incelemek ve kazıyıcımda doğru Xpath'leri ve / veya CSS yolunu kullanmak yeterlidir.

HTML yapısını dinamik olarak oluşturabilir ve ayrıca CSS sınıf adlarını (ve CSS'nin kendisini) dinamik olarak da oluşturabilirsiniz (örn. Bazı rastgele sınıf adları kullanarak) - ancak

  • bilgileri normal kullanıcılarınıza tutarlı bir şekilde sunmak istiyorsunuz
  • örneğin tekrar - kazıyıcıyı ayarlamak için sayfa yapısını bir kez daha analiz etmek yeterlidir.
  • ve "zaten bilinen bazı içerikler" analiz edilerek otomatik olarak yapılabilir
    • Birisi zaten bildiğinde (daha önce kazıyıp), örneğin:
    • "phil collins" hakkında bilgiler nelerdir
    • yeterli "phil collins" sayfasını görüntülemek ve (otomatik olarak) sayfanın "bugün" nasıl yapılandırıldığını analiz :)

Her yanıt için yapıyı değiştiremezsiniz, çünkü normal kullanıcılarınız sizden nefret edecektir. Ayrıca, bu kazıyıcı için değil (bakım) için daha fazla sıkıntıya neden olacaktır. XPath veya CSS yolu, bilinen içerikten kazıma komut dosyası tarafından otomatik olarak belirlenir.

Ajax - başlangıçta biraz daha zor, ancak çoğu zaman kazıma işlemini hızlandırır :) - neden?

İstekleri ve yanıtları analiz ederken, sadece kendi proxy sunucumu (perl ile yazılmış) kuruyorum ve benim firefox kullanıyor. Tabii ki, kendi proxy'im olduğu için - tamamen gizlidir - hedef sunucu bunu normal tarayıcı olarak görür. (Yani, hiçbir X-Forwarded-for ve bu başlıklar). Proxy günlüklerine dayanarak, çoğunlukla ajax isteklerinin "mantığını" belirlemek mümkündür, örneğin html kazıma çoğunu atlayabilir ve sadece iyi yapılandırılmış ajax yanıtları (çoğunlukla JSON formatında) kullanabilirsiniz.

Yani, ajax pek yardımcı olmuyor ...

Bazıları daha karmaşık olan çok sayıda javascript işlevi kullanan sayfalardır .

Burada iki temel yöntem kullanmak mümkündür:

  • JS'yi paketten çıkarın ve anlayın ve Javascript mantığını izleyen bir kazıyıcı oluşturun (zor yol)
  • veya (tercihen kendi başıma kullanarak) - sadece kazımak için Mozrepl ile Mozilla kullanmak . Örneğin, gerçek kazıma, doğru öğelere tıklamaya ve doğrudan "çözülmüş" yanıtları doğrudan tarayıcı penceresinden yakalamaya programlanmış tam özellikli javascript özellikli tarayıcıda yapılır.

Böyle bir kazıma yavaştır (kazıma normal tarayıcıda olduğu gibi yapılır), ancak

  • kurmak ve kullanmak çok kolay
  • ve buna karşı koymak neredeyse imkansız :)
  • ve "hızlı IP tabanlı isteklerin engellenmesi" ile mücadele etmek için yine de "yavaşlık" gereklidir

User-Agent tabanlı filtreleme hiç yardımcı olmaz. Herhangi bir ciddi veri madencisi, kazıyıcısında doğru olana ayarlayacaktır.

Giriş Yapma - yardımcı olmaz. Onu yenmenin en basit yolu (herhangi bir analiz ve / veya oturum açma protokolü komut dosyası olmadan) siteye sadece normal kullanıcı olarak giriş yapmak, Mozilla'yı kullanmak ve sadece Mozrepl tabanlı kazıyıcıyı çalıştırmak ...

Unutmayın, giriş gerekli anonim botlar için yardımcı olur, ancak verilerinizi kazımak isteyen birine karşı yardımcı olmaz. Kendini sitenize normal kullanıcı olarak kaydettiriyor.

Çerçeveleri kullanmak da çok etkili değil. Bu, birçok canlı film hizmeti tarafından kullanılır ve yenilmesi çok zor değildir. Çerçeveler analiz etmek için gerekli olan başka bir HTML / Javascript sayfasıdır ... Sorunlara değer veriler varsa - veri madencisi gerekli analizi yapacaktır.

IP tabanlı sınırlama hiç etkili değildir - burada çok fazla genel proxy sunucusu var ve burada TOR da var ... :) Kazımayı yavaşlatmıyor ( verilerinizi gerçekten isteyen biri için).

Çok zor görüntülerde gizlenmiş verileri kazımaktır. (örneğin, verileri sunucu tarafındaki resimlere dönüştürmek). "Tesseract" (OCR) kullanmak birçok kez yardımcı olur - ama dürüst olmak gerekirse - veriler kazıyıcı için sıkıntılara değer olmalıdır. (birçok kez değmez).

Diğer taraftan, kullanıcılarınız bunun için sizden nefret edecektir. Kendim, (kazıma olmasa bile) sayfa içeriğini panoya kopyalamaya izin vermeyen web sitelerinden nefret ediyor (bilgi resimlerde olduğu için veya (aptal olanlar) sağ tıklamaya çalışırken bazı özel Javascript olaylarına tıklamaya çalışıyor: )

En zor olanı, java uygulamaları veya flash kullanan sitelerdir ve uygulama dahili olarak güvenli https isteklerini kullanır . Ancak iki kez düşünün - iPhone kullanıcılarınız ne kadar mutlu olacak ...;). Bu nedenle, şu anda bunları kullanan çok az site var. Kendim, tarayıcımdaki tüm flash içeriği engelliyor (normal tarama oturumlarında) - ve asla Flash'a bağlı siteleri kullanmıyorum.

Kilometre taşlarınız ... olabilir, bu nedenle bu yöntemi deneyebilirsiniz - sadece hatırlayın - muhtemelen bazı kullanıcılarınızı kaybedeceksiniz. Ayrıca unutmayın, bazı SWF dosyaları ayrıştırılabilir. ;)

Captcha (iyi olanlar - reCaptcha gibi) çok yardımcı olur - ancak kullanıcılarınız sizden nefret edecektir ... - sadece, tüm sayfalarda müzik sanatçıları hakkında bilgi gösteren bazı captcha'ları çözmeleri gerektiğinde kullanıcıların sizi nasıl seveceğini hayal edin.

Muhtemelen devam etmenize gerek yok - resme zaten girdiniz.

Şimdi ne yapmalısınız:

Unutmayın: Verilerinizi gizlemek neredeyse imkansızdır, eğer diğer tarafta onları (kullanıcı dostu) normal kullanıcılarınızla yayınlamak istiyorsanız.

Yani,

  • verilerinizi kolayca erişilebilir hale getirin - bazı API'lar tarafından
    • bu kolay veri erişimine izin verir
    • örneğin sunucunuzu kazımadan boşaltın - sizin için iyi
  • doğru kullanım haklarını ayarlayın (örneğin, kaynak belirtilmelidir)
  • Unutmayın, birçok verinin telif hakkı yoktur - ve korunması zordur
  • (zaten yaptığınız gibi) bazı sahte veriler ekleyin ve yasal araçları kullanın
    • diğerlerinin söylediği gibi, "durdur ve bırak mektubu" gönder
    • diğer yasal davalar (dava ve benzeri) muhtemelen çok pahalı ve kazanmak zor (özellikle ABD dışındaki sitelere karşı)

Bazı teknik engelleri kullanmaya çalışmadan önce iki kez düşünün.

Veri madencilerini engellemeye çalışmak yerine, web sitenizin kullanılabilirliğine daha fazla çaba sarf etmeniz yeterlidir. Kullanıcınız sizi sevecek. Teknik engellere yatırılan zaman (ve enerji) genellikle değmez - daha iyi web sitesi yapmak için zaman harcamak daha iyidir ...

Ayrıca, veri hırsızları normal hırsızlara benzemez.

Ucuz bir ev alarmı alıp "bu ev polise bağlı" uyarısı eklerseniz - birçok hırsız bile içeri girmeye çalışmaz. Çünkü onun tarafından yanlış bir hamle - ve hapse girecek ...

Yani, sadece birkaç dolar yatırım yapıyorsunuz, ancak hırsız yatırım yapıyor ve çok risk alıyor.

Ancak veri hırsızının böyle riskleri yoktur. tam tersi - eğer yanlış bir hamle yaparsanız (örn. teknik engeller nedeniyle bazı HATALAR tanıtırsanız), kullanıcılarınızı kaybedersiniz. Kazıma botu ilk kez çalışmazsa, hiçbir şey olmaz - veri madencisi sadece başka bir yaklaşımı deneyecek ve / veya kodda hata ayıklayacaktır.

Bu durumda, çok daha fazla yatırım yapmanız ve kazıyıcı çok daha az yatırım yapmanız gerekir.

Zaman ve enerjinizi nereye yatırmak istediğinizi düşünün ...

Ps: İngilizce benim yerli değil - bu yüzden benim kırık ingilizce affet ...


@Parapluie Ücretsiz içerik ve / veya Açık kaynak modeli hakkında - tarihler, tarih, hedefler ve etik hakkında gerçekten okumalısınız . Ve özellikle Açık Veriler hakkında - kazıyıcılarimin çoğunu oluşturduğum ...
jm666

Kavramı anlıyorum, ancak bilgili önerileriniz için teşekkür ederim. Bununla ilgili ilginç bir konuşma yapmış olabiliriz; ancak orijinal yorumum üçüncü taraflarca silindi. Sonuçta gerçekten özgür müsün?
Parapluie

8

Teknoloji açısından: Google'a aynı anda çok fazla sorgu ile vurduğunuzda ne yaptığınızı modelleyin. Bu bir çoğunu durdurmalı.

Yasal açıdan: Yayınladığınız veriler özel değil gibi görünüyor. Bu, telif hakkıyla korunamayan adları ve istatistikleri ve diğer bilgileri yayınladığınız anlamına gelir.

Bu durumda, sıyırıcılar, sanatçı adı vb. Hakkındaki bilgilerinizi yeniden dağıtarak telif hakkını ihlal etmemektedir. Ancak, sitenizde telif hakkı bulunan öğeler (düzen vb.) Bulunduğundan sitenizi belleğe yüklediklerinde telif hakkını ihlal ediyor olabilirler.

Facebook v. Power.com hakkında okumanızı ve Facebook'un ekran kazıma işlemini durdurmak için kullandığı argümanları görmenizi öneririm. Birisi web sitenizi kazıma durdurmak için çalışırken hakkında gidebilirsiniz birçok yasal yolları vardır. Çok geniş kapsamlı ve yaratıcı olabilirler. Bazen mahkemeler argümanları satın alır. Bazen bilmiyorlar.

Ancak, adlar ve temel istatistikler gibi telif hakkıyla korunmayan herkese açık alan bilgileri yayınladığınızı varsayarsak, sadece ücretsiz konuşma ve açık veri adına girmesine izin vermelisiniz. Bu, web'in tümüyle ilgili.


1
Bilgilerin telif hakkını alamasanız bile, kullanım şartlarında kazımaya karşı kesinlikle bir madde koyabilirsiniz. Ardından, kullanım koşullarının ihlali için bir durdurma ve vazgeçme mektubu gönderin.
André Caron

1
Serbest konuşma ve açık veri aslında internetin ruhudur!
Ciara

Evet, özgür konuşma ve tüm bunlar. Ancak sıyırıcılar, OP'nin bütçesinin veya bant genişliğinin önemli bir kısmını boşa harcamasının yanı sıra kopyalanamayan verileri de kopyalayabilir.
jpaugh

8

Yeni başlayan sıyırıcılara karşı işe yarayabilecek şeyler:

  • IP engelleme
  • çok sayıda ajax kullan
  • yönlendiren istek başlığını kontrol et
  • giriş gerektir

Genel olarak yardımcı olacak şeyler:

  • düzeninizi her hafta değiştirin
  • robots.txt

Yardımcı olacak ancak kullanıcılarınızın sizden nefret etmesini sağlayacak şeyler:

  • Captcha

8

Bir sürü web kazıma yaptım ve can sıkıcı bulduğum şeylere dayanarak blogumda web kazıyıcılarını durdurmak için bazı teknikleri özetledim .

Kullanıcılarınız ve sıyırıcılar arasında bir takastır. IP'leri sınırlarsanız, CAPTCHA'ları kullanın, oturum açmayı zorunlu hale getirin vb. Sıyırıcılar için zorlaşırsınız. Ancak bu, gerçek kullanıcılarınızı da uzaklaştırabilir.


8

En iyi seçeneğiniz maalesef oldukça manueldir: Kazıma ve IP adreslerini yasaklamaya işaret ettiğine inandığınız trafik modellerini arayın.

Halka açık bir site hakkında konuştuğunuzdan, siteyi arama motoru dostu hale getirmek de siteyi kazıma dostu hale getirecektir. Bir arama motoru sitenizi tarayabilir ve kazıyabilirse, kötü niyetli bir kazıyıcı da olabilir. Yürümek için ince bir çizgi.


4
IP engelleme bir kazıyıcıyı yavaşlatır, ancak sunucunuz için de çok iştir. Diyelim ki sizi 1000 proxy ile kazıyordum, hala istediğim verilere sahibim ve şimdi güvenlik duvarınız bir karmaşa.
pguardiario

1
Bunu yaptığınızda, onlar sizin için yatay olacak. Bugün 100000 adres onlar için hiçbir maliyeti yoktur, ancak hepsini yasaklamaya çalışırsanız sitenizi yavaşlatır - ve IP'leri bir veya iki kereden fazla ziyaret
etmemek için döndürürler

6

Tabii ki mümkün. % 100 başarı için sitenizi çevrimdışına alın.

Gerçekte kazıma işlemini biraz daha zorlaştıran bazı şeyler yapabilirsiniz. Google, arama sonuçlarını kazıyan bir robot olmadığınızdan emin olmak için tarayıcı kontrolleri yapar (ancak bu, diğer her şey gibi, sahte olabilir).

Sitenize yapılan ilk bağlantı ile sonraki tıklamalar arasında birkaç saniye gerektirme gibi işlemler yapabilirsiniz. İdeal zamanın ne olacağından veya tam olarak nasıl yapılacağından emin değilim, ama bu başka bir fikir.

Eminim çok daha fazla deneyime sahip başka insanlar da vardır, ama umarım bu fikirler en azından biraz yardımcı olur.


6

Ekran kazımayı önlemek ve yapmak için yapabileceğiniz birkaç şey var. Bazıları çok etkili değildir, diğerleri (CAPTCHA) kullanılabilir, ancak kullanılabilirliği engeller. Bunun, arama motoru dizinleri gibi meşru site kazıyıcılarını engelleyebileceğini de unutmayın.

Ancak, kazınmasını istemiyorsanız, arama motorlarının da dizine eklemesini istemediğiniz anlamına gelir.

Deneyebileceğiniz bazı şeyler:

  • Bir görüntüdeki metni gösterin. Bu oldukça güvenilirdir ve kullanıcı üzerinde bir CAPTCHA'dan daha az acı çeker, ancak kesip yapıştıramayacakları ve güzelce ölçeklenmeyecekleri veya erişilebilir olmayacakları anlamına gelir.
  • Bir CAPTCHA kullanın ve sayfayı iade etmeden önce tamamlanmasını isteyin. Bu güvenilir bir yöntemdir, aynı zamanda bir kullanıcıya dayayacak en büyük acıdır.
  • Kullanıcının sayfaları görüntülemeden önce bir hesap açmasını isteyin ve e-posta adresini onaylayın. Bu oldukça etkili olacak, ancak tamamen değil - bir ekran kazıyıcı bir hesap oluşturabilir ve onlar için oturum açmak için komut dosyalarını akıllıca programlayabilir.
  • İstemcinin kullanıcı aracısı dizesi boşsa erişimi engelleyin. Site kazıma komut dosyası genellikle tembel bir şekilde programlanır ve bir kullanıcı aracısı dizesi oluşturmaz, ancak tüm web tarayıcıları bunu yapar.
  • Bilinen ekran sıyırıcı kullanıcı aracısı dizelerini buldukça kara bir liste oluşturabilirsiniz. Yine, bu sadece tembel olarak kodlanmış olanlara yardımcı olacaktır; ne yaptığını bilen bir programcı, bir web tarayıcısını taklit etmek için bir kullanıcı-aracı dizesi ayarlayabilir.
  • URL yolunu sık sık değiştirin. Değiştirdiğinizde, eskisinin çalışmaya devam ettiğinden emin olun, ancak yalnızca bir kullanıcının tarayıcıları açık olduğu sürece. Yeni URL yolunun ne olacağını tahmin etmeyi zorlaştırın. Bu, URL'leri sabit kodlanmışsa komut dosyalarının yakalamasını zorlaştıracaktır. Bunu bir tür senaryo ile yapmak en iyisidir.

Bunu yapmak zorunda kalsaydım, muhtemelen son üçün bir kombinasyonunu kullanırdım, çünkü meşru kullanıcılar için rahatsızlığı en aza indirirler. Ancak, herkesi bu şekilde engelleyemeyeceğinizi kabul etmek zorunda kalacaksınız ve birisi nasıl etrafta dolaşacağını anladığında, sonsuza kadar kazımayı başarabilecek. Daha sonra, sanırım onları keşfettikçe IP adreslerini engellemeye çalışabilirsiniz.


6
  1. Hayır, durmak mümkün değil (hiçbir şekilde)
  2. Kucakla. Neden RDFa olarak yayınlanmıyor ve süper arama motoru dostu olmuyorsunuz ve verilerin tekrar kullanılmasını teşvik etmiyorsunuz? İnsanlar size teşekkür eder ve zamanı geldiğinde kredi verir (örnek olarak musicbrainz'e bakın).

Muhtemelen istediğin cevap bu değil, ama halka açmaya çalıştığın şeyi neden saklıyorsun?


5

Birinci Yöntem (Yalnızca Küçük Siteler):
Şifrelenmiş / şifrelenmiş veriler sunar.
I Python (urllib, istek, beautifulSoup vb ...) kullanarak Web'i Scape ve şifreleme yöntemi mevcut olmadığı için herhangi bir programlama dilinde şifresi çözülemeyen şifreli / kodlanmış veriler sunan birçok web sitesi buldum.

Bunu bir PHP web sitesinde çıktıyı şifreleyerek ve en aza indirerek başardım (UYARI: bu büyük siteler için iyi bir fikir değildir) yanıt her zaman karıştırılmış içerikti.

PHP çıktı en aza indirmek için örnek ( php sayfa html çıktı nasıl küçültülür ? ):

<?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");
?>

İkinci Yöntem:
Bunları durduramıyorsanız, yanıt olarak sahte / yararsız veriler sunun.

Üçüncü Yöntem:
Yaygın kazıma kullanıcı aracılarını engelleyin, bunları büyük / büyük web sitelerinde göreceksiniz, çünkü bunları Kullanıcı Aracısı olarak "python3.4" ile kazımak imkansızdır.

Dördüncü Yöntem:
Tüm kullanıcı başlıklarının geçerli olduğundan emin olun, bazen kazıyıcımın gerçek bir kullanıcı gibi görünmesini sağlamak için mümkün olduğunca çok başlık sağlarım, bazıları en-FU gibi doğru veya geçerli değil :).
Aşağıda, sağladığım bazı başlıkların bir listesi verilmiştir.

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}

2

Botları kara listeye almak yerine, belki beyaz listeye eklemelisiniz. En iyi birkaç motor için arama sonuçlarınızı öldürmek istemiyorsanız, genel olarak iyi bilinen kullanıcı aracısı dizelerini beyaz listeye ekleyebilirsiniz. Daha az etik botlar, popüler web tarayıcılarının kullanıcı aracısı dizelerini oluşturma eğilimindedir. En iyi birkaç arama motoru trafiğinizin% 95'ini yukarı çekiyor olmalıdır.

Diğer posterlerin önerdiği teknikleri kullanarak, botların kendilerini tanımlamak oldukça basit olmalıdır.


2

Buna hızlı yaklaşım bir bubi / bot tuzağı kurmak olacaktır.

  1. Belli bir süre açılmışsa veya hiç açılmamışsa, IP ve başka bir şey gibi belirli bilgileri toplayacağı bir sayfa oluşturun (düzensizlikleri veya desenleri de düşünebilirsiniz, ancak bu sayfanın hiç açılmaması gerekir).

  2. Sayfanızda CSS ekranı ile gizlenmiş olan bir bağlantı oluşturun: none; veya sol: -9999 piksel; Pozisyonlu: mutlak; bazen botlar sayfanın belirli bölümlerini unutmayı seçebileceği için, altbilginizin değil, içeriğinizin altına düştüğü yer gibi göz ardı edilmesi daha az olası yerlere yerleştirmeye çalışın.

  3. Robots.txt dosyanızda, bilgi toplamak ve bu sayfayı bunlardan biri olarak ayarlamak için dost botların (LOL, mutlu yüzleri var!) İstemediğiniz sayfalara bir sürü izin verme kuralı ayarlayın.

  4. Şimdi, dost bir bot gelirse o sayfayı görmezden gelmelisiniz. Doğru ama bu hala yeterince iyi değil. Bu sayfalardan birkaç tane daha yapın veya farklı adları kabul etmek için bir şekilde bir şekilde yeniden yönlendirin. ve ardından bu tuzak sayfalarına robots.txt dosyanızda yoksayılmasını istediğiniz sayfaların yanına daha fazla izin verme kuralları yerleştirin.

  5. Bu botların veya bu sayfalara giren herkesin IP'sini toplayın, onları yasaklamayın, ancak içeriğinizde rastgele sayılar, telif hakkı bildirimleri, belirli metin dizeleri, korkutucu resimler gösterme, iyi içerik. Ayrıca, yüklemesi sonsuza kadar sürecek bir sayfaya işaret eden bağlantılar da ayarlayabilirsiniz. php içinde sleep () fonksiyonunu kullanabilirsiniz. Bu, iyi yazılmış bazı botlar bir seferde X miktarını işlemek için ayarlandığından, yüklenmesi çok uzun süren sayfaları atlamak için bir tür algılama varsa tarayıcıya karşı savaşacaktır.

  6. Belirli bir metin dizesi / cümle oluşturduysanız, neden en sevdiğiniz arama motoruna gitmiyor ve onları aramıyorsanız, içeriğinizin nerede bittiğini gösterebilir.

Her neyse, taktik ve yaratıcı düşünürseniz, bu iyi bir başlangıç ​​noktası olabilir. Yapılacak en iyi şey, bir botun nasıl çalıştığını öğrenmek olacaktır.

Ayrıca bazı kimlikleri veya sayfa öğesindeki yol niteliklerinin görüntülenmesini dolandırmayı da düşünürdüm:

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

bazı botlar sayfalarınızda veya hedeflenmiş öğelerinizde belirli kalıplar arayacak şekilde ayarlanabildiği için her seferinde formunu değiştirir.

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

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

1
Onları sadece yasaklamakla kalmaz, onlarla tamamen vidalamak istersin ... SEVİYORUM!
Zoidberg

Gizli yasaklama tam olarak düşündüğüm şeydi (gölgeleme, cehennem yasaklama).
ErikE

1

Normal ekran kazıma işlemini durduramazsınız. İyi ya da kötü, web'in doğasıdır.

Sen olabilir kimse (müzik dosyaları dahil) bazı şeyleri erişebilmesi için bunların kayıtlı bir kullanıcı olarak giriş sürece bunu yapmak. Apache'de yapmak çok zor değil . IIS'de de yapmanın çok zor olmayacağını düşünüyorum.


1

Bunun bir yolu, içeriği XML nitelikleri, URL kodlu dizeler, HTML kodlu JSON ile önceden biçimlendirilmiş metin veya veri URI'ları olarak sunmak ve ardından istemcideki HTML'ye dönüştürmektir. İşte bunu yapan birkaç site:

  • Skechers : XML

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
  • Chrome Web Mağazası : JSON

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

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

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : HTML Varlıkları + önceden biçimlendirilmiş JSON

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Amazon : Tembel Yükleme

    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 : Ad boşluklu XML + Özel MIME türü + Özel Dosya uzantısı

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

Yukarıdakilerden herhangi birinde kaynak görüntülerseniz, kazıma işleminin yalnızca meta veri ve gezinme döndüreceğini görürsünüz.


Yani ... bu yaklaşım kazıma işlemini daha da kolaylaştırıyor, çünkü içerik şimdi tek biçimli bir formatta. Aslında, artık kazıma olarak adlandırılmayacaktı : buna ayrıştırma denir ve programlı olarak yapılması çok kolaydır.
jpaugh

1

Çoğu zaten söylendi, ancak CloudFlare korumasını düşündünüz mü? Demek istediğim:

görüntü açıklaması

Diğer şirketler de muhtemelen bunu yapıyor, bildiğim tek şirket CloudFlare.

Bunun işlerini zorlaştıracağından eminim. Ayrıca oran sınırı nedeniyle CloudFlare tarafından korunan bir sitenin verilerini hurdaya ayırmaya çalıştığımda IP'yi 4 ay boyunca otomatik olarak yasakladım.


1

Yukarıdaki yazıların çoğuna katılıyorum ve sitenizin daha fazla arama motoru dostu olduğunu, daha kazıma yapabileceğini eklemek istiyorum. Sıyırıcılar için zorlaştıran çok şey var, ancak arama yeteneğinizi de etkileyebilir ... Bu, sitenizin arama motorlarında ne kadar iyi sıralanmasını istediğinize bağlıdır.


0

İçeriğinizi bir captcha'nın arkasına koymak, robotların içeriğinize erişmeyi zor bulacağı anlamına gelir. Bununla birlikte, insanlar rahatsız edici olabilir, böylece istenmeyen olabilir.


0

Harika bir örnek görmek istiyorsanız, http://www.bkstr.com/ adresini ziyaret edin . Bir çerez ayarlamak için aj / s algoritmasını kullanırlar, ardından isteğin bir tarayıcıda çalıştırıldığını doğrulamak için çerezi kullanabilmesi için sayfayı yeniden yüklerler. Kazıma için tasarlanmış bir masaüstü uygulaması kesinlikle bunu yapabilir, ancak çoğu cURL tipi kazımayı durdurabilir.


0

Ekran sıyırıcıları HTML'yi işleyerek çalışır. Ve eğer verilerinizi almaya kararlılarsa, teknik olarak yapabileceğiniz çok şey yoktur çünkü insan gözü herhangi bir şeyi işler. Yasal olarak zaten olsa bazı rücu olabilir işaret edildi ve bu benim tavsiye olurdu.

Ancak, HTML tabanlı olmayan sunum mantığını kullanarak verilerinizin kritik kısmını gizleyebilirsiniz

  • Her sanatçı / albüm vb. İçin bir Flash dosyası oluşturun .
  • Her sanatçı içeriği için bir resim oluşturun. Belki sadece sanatçı adı, vb. İçin bir görüntü yeterli olacaktır. Bunu, metni sunucudaki bir JPEG / PNG dosyasına işleyip o görüntüye bağlayarak yapın.

Bunun muhtemelen arama sıralamanızı etkileyeceğini unutmayın.


0

HTML, CSS ve JavaScript'i oluşturun. Oluşturucuları ayrıştırıcılardan yazmak daha kolaydır, böylece sunulan her sayfayı farklı şekilde oluşturabilirsiniz. Artık önbellek veya statik içerik kullanamazsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.