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?
Sarı siteden veri çekebilen var mı?
6
●378
- 28-12-2024, 12:36:11Merhaba hocam bir kaç ay önce test amaçlı yazıldı. Stres Testi Yapılmadı bir deneyin isterseniz.yassmedya adlı üyeden alıntı: mesajı görüntüle
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.