trendyol-review-summarizer / scrape /trendyol_scraper.py
enesmanan's picture
Upload 3 files
26b9192 verified
raw
history blame
4.98 kB
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ı")