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.com
Sorun 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 articleId
leri 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 div
bir kimliğe sahip article-content
makalenin 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-content
div 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-content
gibi bir şey haline gelir div.a4c36dda13eaf0
ve 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 div
bir 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.div
h1
div
span
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=somesearchquery
ve 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.php
ziyaret 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, style
gizlemek 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: