Gelişmiş Python Web Kazıma Taktikleri

Yorumlar: 0

Bir web sitesinden veri toplamak, içeriğini toplamaktan çok daha fazlasıdır; işin içinde çok şey vardır. Sınırları, boşlukları ve diğer karmaşık engelleri aşmak için Python veri kazıma gibi çok sayıda ek yöntem kullanılmalıdır.

Bu makalede, Python kazıma işleminin ne olduğunu tanımlayacak ve neden bu görev için en uygun araç olduğunu gerekçelendireceğiz. Ayrıca Python veri kazıma yeteneklerinden yararlanan taktiklerin ana hatlarını çizeceğiz. Tüm bunlar, en güvenli sitelerden bile bilgi alınmasına yardımcı olacaktır.

Python Web Kazıma için Neden İdealdir?

Bu araç, web sitelerinden veri toplamak için mükemmel bir kaynak olarak hizmet etmek üzere özel olarak tasarlanmıştır. Kullanılabilirliğinin yanı sıra, Python'un Scrapy, Selenium ve BeautifulSoup gibi kütüphaneleri oldukça güçlüdür. Bunun dışında, komut dosyaları geliştirmeye devam eden ve yeni kullanıcılara destek sağlayan aktif bir yeni topluluk var. Bu yüzden Python günümüzde web kazıma için kullanılıyor. Öyleyse, şu anda mevcut olan ana stratejileri vurgulayalım.

Python ile Kazıma Taktikleri

Bu blok, kullanıcıya Python'da yerleşik olarak bulunan daha karmaşık teknikleri kullanarak karmaşık web sitelerinin nasıl kazınacağını gösterecektir. Kullanıcı nasıl yapılacağını öğrenecek:

  • Bot koruması tarafından engellenmekten kaçının - CAPTCHA, honeypots ve TLS parmak izi ile başa çıkın.
  • Engellenmeyi önlemek için gerçek bir kullanıcı gibi davranın.
  • Kısıtlı sayfalara erişirken kimliğinizi korumak için çerezleri ve oturumları kontrol edin.
  • API'lerden elde edilen verileri yönetin ve eşzamansız olarak yüklenen verileri işleyin.
  • Komut dosyasını sayfadaki değişikliklerden koruyun ve dinamik kaynaklar için mantığı iyileştirin.

Bu yaklaşımlar, Python veri kazımayı etkili hale getirirken, sunucudan engellenme veya erişimin reddedilmesi olasılığını en aza indirmeye yardımcı olacaktır.

Şimdi, Python'da kazıma işleminin etkili bir şekilde nasıl yapılacağına dair taktiklere geçelim.

Taktik 1: CAPTCHA'ların ve Anti-Bot Önlemlerinin Ele Alınması

Çok sayıda web sitesi CAPTCHA güvenlik sistemlerini, bilgilerini Python'dan kasıtlı olarak veri kazınmasına karşı korumak için sağlam bir savunma hattı olarak uygulamaktadır. Bu tür sistemler, 2Captcha veya Anti-Captcha gibi otomatik tanıma hizmetleri kullanarak veya görüntüleri bilişsel olarak tanımlamak için makine öğrenimini kullanarak birçok yolla yenilebilir. Bir başka olasılık da sorgu miktarını mahkemenin Bilgi toplama beklentisiyle ilişkilendirmeyeceği bir düzeye indirmektir.

Taktik 2: İnsan Davranışını Taklit Etmek

Sorguları daha az düşmanca hale getirmek için kullanıcıların normal davranışa daha yakın bir şekilde hareket etmesi gerekir. Eylemler arasında rastgele zamanlama ekleyin, Kullanıcı Aracısını değiştirin, sayfayı kaydırın, fare işaretçisini hareket ettirin, yazı yazmayı simüle edin ve hatta daha fazlasını yapın. Python kazıma araçları olarak Selenium veya Playwright kullanımı, otomasyona çok daha fazla insan benzeri özellikler kazandırır, böylece bloklardan kaçınılabilir.

  • Kullanıcı Aracısını Değiştirme:
    
    import random
    import requests
    
    url = 'https://google.com'
    
    user_agents = [
       'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
       'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    ]
    headers = {
       'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
       'accept-language': 'en-IN,en;q=0.9',
       'dnt': '1',
       'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
       'sec-ch-ua-mobile': '?0',
       'sec-ch-ua-platform': '"Linux"',
       'sec-fetch-dest': 'document',
       'sec-fetch-mode': 'navigate',
       'sec-fetch-site': 'none',
       'sec-fetch-user': '?1',
       'upgrade-insecure-requests': '1',
    }
    
    
    headers['user-agent'] = random.choice(user_agents)
    response = requests.get(url=url, headers=headers)
    
    
    
  • İmleç Hareketi:
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")  # Tarayıcıyı grafik arayüz olmadan çalıştırma
    driver = webdriver.Chrome(options=options)
    
    driver.get("https://google.com")
    
    # XPath ile bir öğe bulma
    element = driver.find_element(By.XPATH, "//button[text()=Confirm]")
    
    # İmleci hareket ettirmek için ActionChains kullanın
    actions = ActionChains(driver)
    actions.move_to_element(element).perform()
    
    # Tarayıcıyı kapatın
    driver.quit()
    
    
    

Taktik 3: Bal Küpü Tuzaklarından Kaçınma

Bazı web siteleri normal kullanıcılar için tasarlanmış ve görünmez olan ek unsurlar yerleştirir, ancak bir bot bunları yanlışlıkla tetikleyebilir. Bu unsurlar arasında gizli formlar yer alır, bunlara tıklamak ve göndermek sitenin botun erişimini engellemesine neden olur. Veri toplamadan önce, CSS stillerini ve display: none veya opacity: 0 gibi öznitelikleri kullanın ve bu stilleri devreye sokmaktan kaçının.

Taktik 4: Çerezleri ve Oturumları Yönetme

İstekler doğru çerezler veya oturum yapılandırması olmadan yapılırsa, bazı siteler çok basit olduğu düşünülen tekrarlanan istekleri engelleyecektir. Bu sorunu aşmak için requests.Session() işlevini kullanın, kaydedilmiş çerezleri kullanın ve gerçek bir kullanıcı gibi davranın. User-Agent başlıklarının değiştirilmesi de gereklidir çünkü bot bunlar tarafından tanınacaktır.

Taktik 5: Python Veri Kazıma için Yeniden Deneme Talebi için Üstel Geri Çekilmenin Uygulanması

Sunucunun yanıt vermemesi veya geçici olarak bir hata döndürmesi durumunda, komutu tekrarlamak için başka girişimlerde bulunmadan önce duraklayın. Üstel geri alma daha çok tercih edilir - her başarısız denemenin ardından bekleme süresinin artırılması anlamına gelir. Örneğin, 1 saniye, 2 saniye, sonra 4 saniye vb. artırılabilir. Bu, engellenme olasılığını azaltırken web sitesi sınırlamalarını en aza indirir ve Python ile veri kazıma iş yükünü azaltır.


import time
import requests


def fetch_with_backoff(url, max_retries=5):
   retries = 0
   wait_time = 1  # 1 saniyelik gecikme

   while retries < max_retries:
       try:
           response = requests.get(url)

           # İstek başarılı olursa, sonucu döndürün
           if response.status_code == 200:
               return response.text

           print(f"Error {response.status_code}. Retrying in {wait_time} sec.")

       except requests.exceptions.RequestException as e:
           print(f"Connection error: {e}. Retrying in {wait_time} sec.")

       # Yeniden denemeden önce bekleyin
       time.sleep(wait_time)

       # Gecikmeyi artırın
       wait_time *= 2
       retries += 1

   return None


url = "https://google.com"
html = fetch_with_backoff(url)


Taktik 6: Karmaşık Etkileşimler için Başlıksız Tarayıcıları Kullanma

Bazı web siteleri içeriği aşamalı olarak yükleyebilir veya yalnızca kullanıcıdan bazı girdiler aldıktan sonra çalışabilir. Bu gibi durumlarda BeautifulSoup gibi kütüphanelerin yardımcı olması pek olası değildir. Bu durumda, Selenium, Puppeteer ve Playwright ile web kazıma yardımcı olacaktır. Bu araçlar, sayfaları normal bir kullanıcı gibi açmanıza olanak tanır; yani kullanıcı düğmelere tıklayabilir, metin yazabilir ve sayfadaki öğelerle etkileşime geçebilir.

Taktik 7: Eşzamansız Yüklemeden Python Veri Kazıma

Kullanıcı web sayfasına erişene kadar veri göstermek için JavaScript kullanmayan bazı web sayfaları vardır. Bununla birlikte, standart bir HTTP isteği gerekli tüm bilgileri getirmeyecektir. Bu tür bilgileri toplamak için Selenium kullanılabilir veya tarayıcı DevTools kullanılarak ağ istekleri incelenebilir. Bu, daha sonra en az güçlükle bilgi almak için kullanılabilecek gizli API uç noktalarının tespit edilmesine yardımcı olur.

Taktik 8: TLS Parmak İzini Tespit Etme ve Önleme

Web sitelerinin büyük çoğunluğu otomatik istekleri daha fazla işlem için sunucuya iletir. Bazı web sitelerinin otomatik istekleri ayırt etmenin bir yolu olarak TLS parmak izlerini doğruladığı iyi bilinmektedir. Bu, sunucunun teknoloji, şifreler ve diğer sofistike bağlantıları kullanarak TLS/SSL dikkati gibi çeşitli bağlantı özelliklerini incelediği anlamına gelir. Bunu başarmak, özel başlıklar ve proxy'ler kullanan isteklerde bağlantı özniteliklerini karıştırarak yapılabilir.

  • Vekillerin entegrasyonu:
    
    import requests
    
    url = 'username:password@your-proxy'
    
    proxy = 'your-proxy'
    proxies = {
       "http": f"http://{proxy}",
       "https": f"https://{proxy}",
    }
    response = requests.get(url=url, proxies=proxies)
    
    
    

Taktik 9: Kullanılabilir Olduğunda API Uç Noktalarından Yararlanma

Bir web sitesi herkese açık bir API sunuyorsa, kazıma yöntemine başvurmak yerine bunu kullanmanız önerilir. Bu yaklaşım daha hızlı, daha güvenilir ve engellenme olasılığı daha düşüktür. Bir API uç noktası bulmak için iyi bir başlangıç noktası, DevTools'ta görülebilen web sitesinin yaptığı istekleri kontrol etmektir. API olmaması durumunda HTML kodu ile çalışmanız gerekecektir.

Taktik 10: Web Sitesi Yapısındaki Değişiklikleri İzleme

Web siteleri kodlarını değiştirebilir ve bu da kazıma işlemini geciktirebilir. Bir sayaç olarak aşağıdakileri göz önünde bulundurun:

  • CSS seçicilerini kullanmaktan XPath'e geçin;
  • Sayfa yapısını periyodik olarak izlemek için otomatik testler kullanın;
  • Olası değişikliklerle başa çıkabilecek akıllı kodlar oluşturun. Bunun bir yolu, öğeleri önceden belirlenmiş yollar yerine içeriklerine göre aramaktır.

Taktik 11: Web Sitesi Hizmet Şartlarına Uygunluğun Sağlanması

Bazı durumlarda, web sitelerinden Python ile web kazıma, kullanım koşullarını ihlal edebilir ve hatta bazı yargı bölgelerinde yasa dışı olarak kabul edilebilir. Veri kazımadan önce site politikasının yanı sıra hem robots.txt hem de hizmet şartlarını incelemek zorunludur. Ayrıca, mevcutsa genel bir API kullanmak en iyisidir. Ayrıca, sunucu üzerindeki yükü en aza indirmek için istek sayılarına sınırlar koyun.

Python Veri Kazıma: Sonuç

Python ile gelişmiş web kazıma kendi avantajlarıyla birlikte gelir, ancak bunu doğru şekilde yapmak da aynı derecede önemlidir. CAPTCHA'yı atlama, kullanıcı eylemlerini simüle etme, çerezleri ve oturumları yönetme, honeypot'larla başa çıkma ve eşzamansız web uygulamalarında verileri inceleme ile ilgili böyle bir sürecin önemli yönlerini tartıştık.

Ayrıca, kullanılan sitenin ahlaki yönünü ve ilgili sözleşmesini de aklınızda bulundurun. Kullanılabilir olduğunda API uç noktalarını kullanın ve HTML ayrıştırma kaçınılmazsa, engellenme ve yasal sorunlarla karşılaşma olasılığını azaltmak için tüm yönergeleri izleyin.

Python ile bu web kazıma eğitim yöntemlerinin kullanılmasıyla, risk potansiyeli büyük ölçüde azaltılabilirken, etkinlik maksimum düzeyde artırılabilir.

Yorumlar:

0 yorumlar