• 28-12-2024, 12:11:59
    #1
    Merhabalar, bildiğiniz gibi sarı site scraper için çok büyük önlemler alıyor. Benimde bir proje için ilan listesini çekmem gerekiyor ama denemediğim yol kalmadı. En fazla 15-20 tane ilana girebiliyorum sonrasında logine yönlendiriyor.

    Selenium ile denedim proxy satın aldım tr proxy hepsi ama genede yakalıyor bir yerden öneriniz var mı nasıl şey yapmalıyım?
  • 28-12-2024, 12:13:51
    #2
    konu sahibi izniyle takip
  • 28-12-2024, 12:17:07
    #3
    herşey gibi bununda yöntemleri var elbette. selenium bu sevideki siteler için çerez. web request kullanmalısın.
  • 28-12-2024, 12:17:11
    #4
    🎩 SMM PANEL YAZILIMI 🎩
    Python QWebEngine e bakabilirsiniz.
  • 28-12-2024, 12:17:55
    #5
    hesap oluşturup cookie sini al her istekte cookie giriş yapsın
  • 28-12-2024, 12:20:18
    #6
    Hesap sorunu için hesap cookiesi ile çözüyorum. Cloudflare için ise cloudflare baypass sistemi kullanıyorum. İmzamdaki numaradan yazarsanız yardımcı olabilirim
  • 28-12-2024, 12:36:11
    #7
    yassmedya adlı üyeden alıntı: mesajı görüntüle
    Merhabalar, bildiğiniz gibi sarı site scraper için çok büyük önlemler alıyor. Benimde bir proje için ilan listesini çekmem gerekiyor ama denemediğim yol kalmadı. En fazla 15-20 tane ilana girebiliyorum sonrasında logine yönlendiriyor.

    Selenium ile denedim proxy satın aldım tr proxy hepsi ama genede yakalıyor bir yerden öneriniz var mı nasıl şey yapmalıyım?
    Merhaba hocam bir kaç ay önce test amaçlı yazıldı. Stres Testi Yapılmadı bir deneyin isterseniz.

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    import random
    import requests
    import json
    
    # 2Captcha API anahtarınız
    API_KEY = 'KENDI_2CAPTCHA_API_ANAHTARINIZ'
    site_key = 'SAHIBINDEN_CAPTCHA_SITE_KEY'
    url = 'https://www.sahibinden.com'
    
    # Kullanıcı-agent ve proxy listesi
    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/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101 Firefox/89.0",
        "Mozilla/5.0 (Linux; Android 11; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.181 Mobile Safari/537.36",
        # Ek kullanıcı-agent ekleyin
    ]
    
    proxies = [
        'http://proxy1:port',
        'http://proxy2:port',
        'http://proxy3:port',
        # Ek proxy adresleri ekleyin
    ]
    
    # Tarayıcı başlatma ayarları
    def initialize_driver():
        chrome_options = Options()
        chrome_options.add_argument(f"user-agent={random.choice(user_agents)}")
        chrome_options.add_argument('--proxy-server=' + random.choice(proxies))
        driver = webdriver.Chrome(options=chrome_options)
        return driver
    
    # CAPTCHA çözümü
    def solve_captcha():
        response = requests.post('https://2captcha.com/in.php', data={
            'key': API_KEY,
            'method': 'userrecaptcha',
            'googlekey': site_key,
            'pageurl': url
        })
        captcha_id = response.text.split('|')[1]
        time.sleep(15)  # CAPTCHA'nın çözülmesini beklemek için kısa bir süre
        result = requests.get(f'https://2captcha.com/res.php?key={API_KEY}&action=get&id={captcha_id}')
        return result.text.split('|')[1]  # Çözülen CAPTCHA kodu
    
    # Rastgele bekleme süresi
    def random_wait():
        time.sleep(random.uniform(5, 10))
    
    # İnsan davranışı taklidi
    def simulate_human_behavior(driver):
        action = ActionChains(driver)
        action.move_by_offset(random.randint(0, 300), random.randint(0, 300)).perform()
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        random_wait()
    
    # Sayfadan veri çekme
    def scrape_page(driver, page_url):
        driver.get(page_url)
        random_wait()
        simulate_human_behavior(driver)
        # İlan başlığı, fiyat gibi bilgileri çek
        title_elements = driver.find_elements_by_css_selector('.classified-title')
        price_elements = driver.find_elements_by_css_selector('.classified-price')
        data = []
        for title, price in zip(title_elements, price_elements):
            data.append({
                'title': title.text,
                'price': price.text
            })
        return data
    
    # JSON olarak veriyi kaydetme
    def save_to_json(data):
        with open('sahibinden_data.json', 'a') as f:
            json.dump(data, f, indent=4)
            f.write('\n')  # Her çekimde yeni bir satıra yaz
    
    # Tüm veriyi toplama ve döngü ile veri çekme işlemi
    def collect_data():
        driver = initialize_driver()
        total_data = []
        try:
            page = 1
            while len(total_data) < 200:  # 200 veriye ulaşana kadar devam et
                url = f'https://www.sahibinden.com/kategori?page={page}'
                page_data = scrape_page(driver, url)
                total_data.extend(page_data)
                
                # JSON olarak kaydet ve kontrol
                save_to_json(page_data)
                
                # 200 veriye ulaştıysak döngüden çık
                if len(total_data) >= 200:
                    break
                
                # 2-3 sayfada bir user-agent ve proxy değiştir
                if page % 3 == 0:
                    driver.quit()
                    driver = initialize_driver()
                
                page += 1
                
        finally:
            driver.quit()
    
    # Programı çalıştır
    if __name__ == "__main__":
        collect_data()
    Kodun Çalışma Yapısı
    Tarayıcı Başlatma ve Yeniden Başlatma: initialize_driver() fonksiyonu, rastgele bir kullanıcı-agent ve proxy seçerek tarayıcıyı başlatır. Her 2-3 sayfada bir yeniden başlatarak kullanıcı-agent ve proxy değişimi yapılır.

    CAPTCHA Çözümü: CAPTCHA engeliyle karşılaşırsa, solve_captcha() fonksiyonu ile 2Captcha API kullanılarak çözülür.

    İnsan Davranışı Simülasyonu: simulate_human_behavior() fonksiyonu fare hareketlerini ve kaydırma işlemlerini simüle ederek insan gibi görünmesini sağlar.

    Veri Çekme ve Kaydetme: scrape_page() fonksiyonu her sayfadaki başlık ve fiyatları çekerek veriyi toplar. save_to_json() fonksiyonu veriyi sahibinden_data.json dosyasına JSON formatında kaydeder.

    Veri Miktarı Sınırı: collect_data() fonksiyonu, toplam 200 ilan verisi çekilene kadar sayfa sayfa gezerek veri çeker. 200 veriye ulaşıldığında döngü sona erer ve program kendini kapatır.