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.