from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.options import Options import time import pandas as pd import os import random def scrape_reviews(url): print("Scraping başlatılıyor...") data_directory = "data" if not os.path.exists(data_directory): os.makedirs(data_directory) def comprehensive_scroll(driver): print("Sayfa kaydırma başlıyor...") last_height = driver.execute_script("return document.body.scrollHeight") scroll_count = 0 while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(3) new_height = driver.execute_script("return document.body.scrollHeight") scroll_count += 1 print(f"Scroll {scroll_count}: {new_height}") if new_height == last_height: break last_height = new_height print("Sayfa kaydırma tamamlandı") chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--lang=tr') chrome_options.add_argument('--disable-notifications') chrome_options.add_argument("--window-size=1920,1080") try: print("Chrome başlatılıyor...") service = Service() driver = webdriver.Chrome(service=service, options=chrome_options) print(f"URL'ye gidiliyor: {url}") driver.get(url) time.sleep(5) # Sayfa yüklenme süresini artırdık # Sayfa kaynağını kontrol et page_source = driver.page_source print(f"Sayfa uzunluğu: {len(page_source)}") try: print("Çerez popup'ı aranıyor...") cookie_button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "onetrust-accept-btn-handler")) ) cookie_button.click() print("Çerez popup'ı kapatıldı") except Exception as e: print(f"Çerez popup'ı işlemi: {str(e)}") comprehensive_scroll(driver) print("Yorum elementleri aranıyor...") # Önce yorum container'ını bul review_container = driver.find_element(By.CLASS_NAME, "pr-rnr-com-w") print("Yorum container'ı bulundu") # Yorum elementlerini bul comment_elements = review_container.find_elements(By.CLASS_NAME, "comment-cards-item") total_comments = len(comment_elements) if total_comments == 0: print("Alternatif yorum elementi aranıyor...") comment_elements = driver.find_elements(By.CSS_SELECTOR, "div.comment-cards-item") total_comments = len(comment_elements) print(f"Bulunan yorum sayısı: {total_comments}") if total_comments == 0: print("Hiç yorum bulunamadı!") return pd.DataFrame() data = [] for i, element in enumerate(comment_elements, 1): try: username = element.find_element(By.CLASS_NAME, "user-name").text except: username = "N/A" print(f"Kullanıcı adı alınamadı: {i}") try: comment = element.find_element(By.CLASS_NAME, "comment-text").text except: comment = "N/A" print(f"Yorum metni alınamadı: {i}") try: date = element.find_element(By.CLASS_NAME, "comment-date").text except: date = "N/A" print(f"Tarih alınamadı: {i}") try: stars = len(element.find_elements(By.CSS_SELECTOR, "div.full[style='width: 100%; max-width: 100%;']")) except: stars = 0 print(f"Yıldız sayısı alınamadı: {i}") data.append({ "Kullanıcı_id": i, "Kullanıcı Adı": username, "Yorum": comment, "Tarih": date, "Yıldız Sayısı": stars }) if i % 5 == 0: print(f"{i} yorum işlendi") print("Veri toplama tamamlandı") return pd.DataFrame(data) except Exception as e: print(f"Kritik hata: {str(e)}") if 'driver' in locals(): print("Son sayfa kaynağı:") print(driver.page_source[:500]) # İlk 500 karakteri göster return pd.DataFrame() finally: if 'driver' in locals(): driver.quit() print("Chrome kapatıldı")