Python ile Amazon Yorumlarını Nasıl Çekerim (Giriş Duvarını Aşarak)

Son güncelleme: April 16, 2026

Amazon yorum çekme aracım altı hafta boyunca sorunsuz çalıştı — sonra bir sabah 200 OK döndü ve karşıma bomboş bir sayfa çıktı. Hata yoktu, CAPTCHA yoktu; yüzlerce yorumun olması gereken yerde artık sadece boş HTML vardı.

Bu sana tanıdık geliyorsa yalnız değilsin. 2025’in sonlarına doğru Amazon, tam yorum sayfalarını giriş duvarının arkasına taşımaya başladı ve pek çok Python tabanlı scraping betiği bir gecede çalışmaz hale geldi. Son birkaç ayı ekibinde hem kendi AI scraper’ımızı geliştirerek hem de kişisel Python yorum toplama akışımı ayakta tutmaya çalışarak bu sorunla uğraşarak geçirdim. Bu yüzden, betiğim ilk kez bozulduğunda elimde olmasını isteyeceğim rehberi yazmanın tam zamanı olduğunu düşündüm. Bu yazıda çalışan yaklaşımı anlatıyorum: cookie tabanlı kimlik doğrulama, Amazon’un CSS karartmasını aşan sağlam selector’lar, 10 sayfalık sayfalama sınırını aşma yöntemleri, bot karşıtı savunmalar ve ham yorum metnini gerçek iş içgörülerine dönüştüren bonus duygu analizi bölümü. Ve eğer bir noktada “Ben bu kodun bakımını yapmak istemiyorum” diye düşünürseniz, aynı işi ile yaklaşık iki dakikada, sıfır Python ile nasıl yaptığınızı da göstereceğim.

Amazon Yorumlarını Çekmek Nedir ve Neden Önemlidir?

Amazon yorumlarını çekmek, müşteri değerlendirme verilerini — yıldız puanları, yorum metni, yazar adı, tarih, doğrulanmış satın alma etiketi gibi bilgileri — Amazon ürün sayfalarından programlı olarak toplama işlemidir. Amazon ve bir daha geri getirmediği için, bu verilere programatik olarak ulaşmanın tek yolu web scraping’dir.

Rakamlar da bunu doğruluyor. ve . Bir ürün sayfasında yalnızca 5 yorum göstermek bile . Yorum duyarlılığını sistematik biçimde analiz eden şirketler görüyor. Bu, soyut bir veri bilimi egzersizi değil; rekabet istihbaratı, ürün geliştirme sinyalleri ve pazarlama dili Amazon’un sunucularında düz metin halinde duruyor.

Neden Amazon Yorumlarını Python ile Çekmelisiniz?

Python bu iş için hâlâ en çok tercih edilen dil. sırada yer alıyor ve requests, BeautifulSoup, pandas, Scrapy gibi ekosistemi sayesinde tam zamanlı geliştirici olmayanların bile web scraping yapmasını kolaylaştırıyor.

Farklı ekipler bu verileri farklı amaçlarla kullanıyor:

EkipKullanım SenaryosuNeleri Çekerler
Ürün / Ar-GeTekrarlayan şikayetleri tespit etmek, iyileştirmeleri önceliklendirmek1–2 yıldız yorum metni, anahtar kelime sıklığı
SatışRakip ürün algısını izlemekPuanlar, yorum hacmi trendleri
PazarlamaReklam metinleri için müşteri dilini çıkarmakOlumlu yorum ifadeleri, özellik atıfları
E-ticaret OperasyonlarıKendi ürün algısını zaman içinde izlemekYıldız dağılımı, doğrulanmış satın alma oranı
Pazar AraştırmasıKategori liderlerini özellik bazında karşılaştırmakÇoklu ASIN yorum veri setleri

Bir mutfak eşyası markası , ürünü yeniden formüle etti ve 60 gün içinde yeniden #1 Best Seller konumunu aldı. Bir fitness takip cihazı şirketi , lateks alerjisi problemini tespit etti, hipoalerjenik bir versiyon çıkardı ve iade oranını %40 düşürdü. Mühendislik emeğini anlamlı kılan ROI tam olarak bu.

Giriş Duvarı: Amazon Yorum Çekiciniz Neden Çalışmayı Durdu?

14 Kasım 2024’te . Bu değişiklik ve doğrulandı. /product-reviews/{ASIN}/ adresine gizli sekmede giderseniz yorum verisi yerine bir giriş sayfasına yönlendirilirsiniz.

python-web-scraping-diagram.webp

Belirtiler sinsi: betiğiniz 200 OK yanıtı alır, ancak HTML gövdesinde yorumlar yerine bir giriş formu (name="email", id="ap_password") bulunur. Hata kodu yok. CAPTCHA yok. Sadece... işe yarayan hiçbir şey yok.

Amazon bunu bot karşıtı ve bölgesel uyumluluk nedenleriyle yaptı. Uygulama tutarsız olabiliyor — bazen taze bir tarayıcı penceresi duvar devreye girmeden önce birkaç yorumu gösterebiliyor, özellikle ilk sayfada — ama ölçekli çalışan her scraper için duvarın her zaman aktif olduğunu varsaymalısınız.

Farklı Amazon ülke alan adları (.de, .co.uk, .co.jp) bu duvarı ayrı ayrı uygular. Bir forum kullanıcısının dediği gibi: “her ülke için ayrı giriş gerekiyor.” .com çerezleriniz .co.uk üzerinde çalışmaz.

Öne Çıkan Yorumlar ve Tüm Yorumlar: Giriş Yapmadan Hâlâ Ne Görülebilir?

Amazon ürün sayfaları (/dp/{ASIN}/ URL’si) hâlâ kimlik doğrulama olmadan yaklaşık gösteriyor. Bunlar Amazon’un algoritması tarafından seçiliyor ve hızlı bir duygu kontrolü için faydalı; ancak sıralanamaz, filtrelenemez ya da sayfalanamaz.

Tüm yorum sayfaları (/product-reviews/{ASIN}/) — en yeniye göre sıralama, yıldız puanına göre filtreleme ve yüzlerce yorum arasında sayfalama gibi özelliklerle — giriş gerektiriyor.

Eğer sadece kısa bir nabız kontrolü için birkaç yoruma ihtiyacınız varsa ürün sayfasını çekin. Yüzlerce veya binlerce yorum istiyorsanız kimlik doğrulamayı çözmeniz gerekir.

Başlamadan Önce Gerekli Olanlar: Python Kurulumu ve Kütüphaneler

Kod yazmaya geçmeden önce kurulum şu şekilde olmalı:

  • Zorluk seviyesi: Orta düzey (Python’a ve temel HTML bilgisine hakim olmak gerekir)
  • Gerekli süre: Tüm akış için yaklaşık 45 dakika; temel bir çekim için yaklaşık 10 dakika
  • İhtiyacınız olacaklar: Python 3.8+, Chrome tarayıcı, geçerli bir Amazon hesabı

Temel kütüphaneleri yükleyin:

1pip install requests beautifulsoup4 lxml pandas textblob

İsteğe bağlı (ileri seviye duygu analizi için):

1pip install transformers torch

ASIN nedir? Amazon’un 10 karakterli ürün kimliğidir. Bunu herhangi bir ürün URL’sinde bulabilirsiniz — örneğin amazon.com/dp/B0BCNKKZ91 içinde ASIN B0BCNKKZ91 olur. Bunu yorum URL’sine ekleyeceğiniz anahtar olarak kullanacaksınız.

En güvenilir yöntem, Amazon’a tarayıcıda giriş yapmak, oturum çerezlerinizi kopyalamak ve bunları Python requests.Session() içine yerleştirmektir. Bu yöntem, Selenium tabanlı giriş otomasyonunun sık sık tetiklediği CAPTCHA ve SMS 2FA sorunlarından kaçınmanızı sağlar.

Şu yedi çereze ihtiyacınız var:

Çerez AdıAmacı
session-idDönen oturum kimliği
session-id-timeOturum zaman damgası
session-tokenDönen oturum jetonu
ubid-mainKullanıcı gezinme tanımlayıcısı
at-mainBirincil kimlik doğrulama jetonu
sess-at-mainOturuma bağlı kimlik doğrulama
x-mainKullanıcı e-posta anahtarlı tanımlayıcı

Chrome DevTools’tan Cookie’ler Nasıl Çıkarılır?

  1. Chrome’da amazon.com’a giriş yapın
  2. DevTools’u açın (F12 veya sağ tık → İncele)
  3. ApplicationStorageCookieshttps://www.amazon.com yoluna gidin
  4. Tablo içindeki her çerez adını bulun ve değerini kopyalayın
  5. Bunları Python için noktalı virgülle ayrılmış bir dize halinde biçimlendirin

Oturumunuzu şöyle kurun:

1import requests
2session = requests.Session()
3# Çerez değerlerinizi buraya yapıştırın
4cookies = {
5    "session-id": "YOUR_SESSION_ID",
6    "session-id-time": "YOUR_SESSION_ID_TIME",
7    "session-token": "YOUR_SESSION_TOKEN",
8    "ubid-main": "YOUR_UBID_MAIN",
9    "at-main": "YOUR_AT_MAIN",
10    "sess-at-main": "YOUR_SESS_AT_MAIN",
11    "x-main": "YOUR_X_MAIN",
12}
13headers = {
14    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
15    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
16    "Accept-Language": "en-US,en;q=0.5",
17}
18session.cookies.update(cookies)
19session.headers.update(headers)

Önemli: Tüm isteklerinizde aynı session nesnesini yeniden kullanın. Bu, çerezlerin tutarlı kalmasını sağlar ve gerçek bir tarayıcı oturumunu taklit eder. Çerezler genellikle scraping yüküne bağlı olarak günler ile haftalar arasında geçerli kalır; ancak yeniden giriş sayfasına yönlendirilmeye başlarsanız çerezleri tarayıcınızdan yenileyin.

.com dışındaki pazar yerlerinde çerez adları biraz değişir — amazon.de at-main yerine at-acbde, amazon.co.uk ise at-acbuk kullanır ve benzeri. Her pazar yerinin kendi bağımsız oturumu gerekir.

Adım 2: İsteği Oluşturun ve Yorum HTML’ini BeautifulSoup ile Ayrıştırın

Amazon yorum URL’si şu yapıyı takip eder:

1https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1

Temel fonksiyon:

1from bs4 import BeautifulSoup
2import time, random
3def get_soup(session, url):
4    time.sleep(random.uniform(2, 5))  # Nezaket gecikmesi
5    response = session.get(url, timeout=15)
6    # Giriş duvarını tespit et
7    if "ap_email" in response.text or "Amazon Sign-In" in response.text:
8        raise Exception("Giriş duvarı tespit edildi — çerezlerinizi yenileyin")
9    if response.status_code != 200:
10        raise Exception(f"HTTP {response.status_code}")
11    return BeautifulSoup(response.text, "lxml")

İşe yarayan küçük bir taktik: yorum sayfasına gitmeden önce ürün sayfasını ziyaret edin. Bu, oturumunuzda doğal bir gezinme kalıbı oluşturur.

1# Önce ürün sayfasını ziyaret et (gerçek gezinmeyi taklit eder)
2product_url = f"https://www.amazon.com/dp/{asin}"
3session.get(product_url, timeout=15)
4time.sleep(random.uniform(1, 3))
5# Ardından yorum sayfasına git
6reviews_url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1"
7soup = get_soup(session, reviews_url)

Adım 3: Yorum Verisini Çekmek için Kararlı Selector’lar Kullanın (CSS Class’lara Güvenmeyi Bırakın)

2022–2023 tarihli çoğu rehberin dağıldığı yer burası. Amazon CSS sınıf adlarını gizler — bunlar periyodik olarak değişir ve bir forumda sinirlenen bir geliştiricinin dediği gibi: “span etiketlerinin sınıf adlarında tek bir ortak desen bile yoktu.”

Çözüm: Amazon yorum öğelerinde data-hook özniteliklerini kullanır ve bunlar şaşırtıcı derecede sabittir. Bunlar, Amazon’un kendi ön yüz kodunun dayandığı anlamlı tanımlayıcılardır; bu yüzden rastgeleleştirilmezler.

Yorum AlanıKararlı Selector (data-hook)Kırılgan Selector (class)
Yorum metni[data-hook="review-body"].review-text-content (değişir)
Yıldız puanı[data-hook="review-star-rating"].a-icon-alt (belirsiz)
Yorum başlığı[data-hook="review-title"].review-title (bazen)
Yazar adıspan.a-profile-nameNispeten sabit
Yorum tarihi[data-hook="review-date"].review-date (bölgeye göre değişir)
Doğrulanmış satın alma[data-hook="avp-badge"]span.a-size-mini

data-hook selector’larını kullanan çekim kodu:

1import re
2def extract_reviews(soup):
3    reviews = []
4    review_divs = soup.select('[data-hook="review"]')
5    for div in review_divs:
6        # Yıldız puanı
7        rating_el = div.select_one('[data-hook="review-star-rating"]')
8        rating = None
9        if rating_el:
10            rating_text = rating_el.get_text(strip=True)
11            match = re.search(r'(\d\.?\d?)', rating_text)
12            if match:
13                rating = float(match.group(1))
14        # Başlık
15        title_el = div.select_one('[data-hook="review-title"]')
16        title = title_el.get_text(strip=True) if title_el else ""
17        # Gövde
18        body_el = div.select_one('[data-hook="review-body"]')
19        body = body_el.get_text(strip=True) if body_el else ""
20        # Yazar
21        author_el = div.select_one('span.a-profile-name')
22        author = author_el.get_text(strip=True) if author_el else ""
23        # Tarih ve ülke
24        date_el = div.select_one('[data-hook="review-date"]')
25        date_text = date_el.get_text(strip=True) if date_el else ""
26        # Format: "Reviewed in the United States on January 15, 2025"
27        country_match = re.search(r'Reviewed in (.+?) on', date_text)
28        date_match = re.search(r'on (.+)$', date_text)
29        country = country_match.group(1) if country_match else ""
30        date = date_match.group(1) if date_match else ""
31        # Doğrulanmış satın alma
32        verified_el = div.select_one('[data-hook="avp-badge"]')
33        verified = bool(verified_el)
34        reviews.append({
35            "author": author,
36            "rating": rating,
37            "title": title,
38            "content": body,
39            "date": date,
40            "country": country,
41            "verified": verified,
42        })
43    return reviews

Bu selector setini aylardır birden fazla ASIN üzerinde çalıştırıyorum ve data-hook öznitelikleri bir kez bile değişmedi. Buna karşılık CSS sınıfları aynı dönemde en az iki kez yenilendi.

Adım 4: Sayfalama ve Amazon’un 10 Sayfalık Sınırını Yönetin

Amazon, pageNumber parametresini her filtre kombinasyonu için 10 sayfa ve sayfa başına 10 yorumla sınırlar — yani sert bir şekilde yaklaşık 100 yorumluk tavan koyar. “Sonraki sayfa” düğmesi 10. sayfadan sonra tamamen kaybolur.

Temel sayfalama döngüsü:

1all_reviews = []
2for page in range(1, 11):
3    url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber={page}"
4    soup = get_soup(session, url)
5    page_reviews = extract_reviews(soup)
6    if not page_reviews:
7        break  # Bu sayfada artık yorum yok
8    all_reviews.extend(page_reviews)
9    print(f"Sayfa {page}: {len(page_reviews)} yorum")

Amazon Yorumlarında 10 Sayfadan Fazla Veriye Nasıl Ulaşılır?

Çözüm filtre bucketing’dir. Her filterByStar ve sortBy kombinasyonu kendi bağımsız 10 sayfalık penceresine sahiptir.

Yıldız filtresi değerleri: one_star, two_star, three_star, four_star, five_star
Sıralama değerleri: recent, helpful (varsayılan)

5 yıldız filtresi × 2 sıralama seçeneğini birleştirerek ürün başına 100 sayfaya, yani 1.000 yoruma kadar erişebilirsiniz — ayrıca yıldız dağılımı dengesiz olan ürünlerde çoğu zaman tüm yorum setine oldukça yaklaşılır.

1star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
2sort_orders = ["recent", "helpful"]
3all_reviews = []
4seen_titles = set()  # Basit tekrar engelleme
5for star in star_filters:
6    for sort in sort_orders:
7        for page in range(1, 11):
8            url = (
9                f"https://www.amazon.com/product-reviews/{asin}"
10                f"?filterByStar={star}&sortBy={sort}&pageNumber={page}"
11            )
12            soup = get_soup(session, url)
13            page_reviews = extract_reviews(soup)
14            if not page_reviews:
15                break
16            for review in page_reviews:
17                # Başlık + yazar kombinasyonuna göre tekrarları ayıkla
18                key = (review["title"], review["author"])
19                if key not in seen_titles:
20                    seen_titles.add(key)
21                    all_reviews.append(review)
22            print(f"[{star}/{sort}] Sayfa {page}: {len(page_reviews)} yorum")
23print(f"Toplam benzersiz yorum: {len(all_reviews)}")

Bucket’lar arasında örtüşme olur, bu yüzden tekrarları ayıklamak şarttır. Hızlı bir anahtar olarak yorum başlığı + yazar adı kombinasyonunu kullanıyorum — kusursuz değil ama tekrarların büyük çoğunluğunu yakalıyor.

Adım 5: Bot Karşıtı Savunmaları Aşın (Rotate, Throttle, Retry)

Amazon AWS WAF Bot Control kullanıyor ve bu sistem artık çok daha agresif. Tek katmanlı önlemler (sadece User-Agent döndürmek, sadece gecikme eklemek gibi) yeterli olmuyor.

TeknikUygulama
User-Agent döndürme10+ gerçek tarayıcı dizesi arasından rastgele seçim
Üstel geri çekilme503’lerde 2 sn → 4 sn → 8 sn yeniden deneme gecikmeleri
İstek kısmaSayfalar arasında random.uniform(2, 5) saniye
Proxy rotasyonuResidential proxy’ler arasında döngü
Oturum parmak iziHer oturum için tutarlı çerezler + header’lar
TLS taklidiÜretimde standart requests yerine curl_cffi kullanın

Üretime uygun bir yeniden deneme sarmalayıcısı:

1import time, random
2USER_AGENTS = [
3    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
4    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
5    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
6    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
8]
9def scrape_with_retries(session, url, max_retries=3):
10    for attempt in range(max_retries):
11        try:
12            session.headers["User-Agent"] = random.choice(USER_AGENTS)
13            time.sleep(random.uniform(2, 5))
14            response = session.get(url, timeout=15)
15            # Engelleme tespiti
16            if "validateCaptcha" in response.url or "Robot Check" in response.text:
17                wait = (2 ** attempt) * 5
18                print(f"CAPTCHA tespit edildi. {wait}s bekleniyor...")
19                time.sleep(wait)
20                continue
21            if response.status_code in (429, 503):
22                wait = (2 ** attempt) * 2
23                print(f"Oran limiti aşıldı ({response.status_code}). {wait}s bekleniyor...")
24                time.sleep(wait)
25                continue
26            if "ap_email" in response.text:
27                raise Exception("Giriş duvarı — çerezler süresi geçmiş")
28            return BeautifulSoup(response.text, "lxml")
29        except Exception as e:
30            if attempt == max_retries - 1:
31                raise
32            print(f"Deneme {attempt + 1} başarısız: {e}")
33    return None

Proxy konusunda bir not: Amazon, bilinen veri merkezi IP aralıklarını ağ seviyesinde kara listeye alır. 100 sayfadan fazla scraping yapıyorsanız residential proxy’ler pratikte zorunlu hale gelir — hacme bağlı olarak ayda 50–200+ dolar harcamanız beklenebilir. Daha küçük projelerde (günde 100 isteğin altında) ev IP’nizden dikkatli throttling genellikle yeterli olur.

Amazon ayrıca TLS parmak izlerini de inceler. Python’un standart requests kütüphanesinin WAF’ler tarafından önceden engellenen . Üretim scraper’ları için gerçek tarayıcı TLS yığınlarını taklit eden curl_cffi’yi düşünün. Eğitim amaçlı ölçekte (birkaç yüz sayfa) ise iyi header’larla birlikte requests çoğu zaman iş görür.

Adım 6: Çektiğiniz Amazon Yorumlarını CSV veya Excel’e Aktarın

Yorumları topladıktan sonra bunları kullanışlı bir formata dönüştürmek pandas ile oldukça kolaydır:

1import pandas as pd
2df = pd.DataFrame(all_reviews)
3df.to_csv("amazon_reviews.csv", index=False)
4print(f"{len(df)} yorum amazon_reviews.csv dosyasına aktarıldı")

Örnek çıktı:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Bu yıl aldığım en iyi ürünBatarya tüm gün gidiyor, ekran harika...January 15, 2025the United StatesTrue
Mike T.2.02 hafta sonra hayal kırıklığıŞarj girişi çalışmayı durdurdu...February 3, 2025the United StatesTrue
Priya K.4.0Fiyatına göre çok iyiİhtiyacım olan her şeyi yapıyor, yoğun uygulamalarda ufak gecikme var...March 10, 2025the United StatesFalse

Excel’e aktarmak için: df.to_excel("amazon_reviews.xlsx", index=False) (openpyxl gerekir).

Google Sheets için gspread kütüphanesi çalışır, ancak gerektirir — proje oluşturma, iki API’yi etkinleştirme, service account kimlik bilgisi üretme, tabloyu paylaşma. Bu, scraping’in kendisinden daha fazla kurulum gibi geliyorsa haklısınız. (İşte tam bu noktada veriyi tek tıkla Google Sheets’e aktaran oldukça cazip görünmeye başlıyor.)

Bonus: Çektiğiniz Yorumlara 5 Satır Python ile Duygu Analizi Ekleyin

Çoğu scraping rehberi CSV dışa aktarımla biter. Oysa duygu puanlama, ham veriyi iş kararlarına dönüştüren kısımdır.

En hızlı başlangıç yöntemi TextBlob’dur:

1from textblob import TextBlob
2df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)

Bu, her yorum için -1.0 (çok negatif) ile +1.0 (çok pozitif) arasında bir kutupsallık puanı verir. Örnek çıktı:

| content (kısaltılmış) | rating | sentiment | |---|---|---|---| | "Battery lasts all day, screen is gorgeous..." | 5.0 | 0.65 | | "The charging port stopped working after..." | 2.0 | -0.40 | | "Does everything I need, minor lag on..." | 4.0 | 0.25 | | "Absolute garbage. Returned immediately." | 1.0 | -0.75 | | "It's okay. Nothing special but works." | 3.0 | 0.10 |

En ilginç satırlar uyuşmazlıklardır — örneğin pozitif dilli 3 yıldız yorumu ya da negatif ifadeler içeren 5 yıldız yorumu. Bu farklar, yıldız puanlarının tek başına göstermediği ayrıntılı müşteri görüşlerini ortaya çıkarır.

ai-review-analysis.webp

Üretim düzeyinde doğruluk için önerim Hugging Face Transformers’tır. ve sağlayabiliyor. nlptown/bert-base-multilingual-uncased-sentiment modeli doğrudan 1–5 yıldız tahmini bile yapabiliyor:

1from transformers import pipeline
2clf = pipeline("sentiment-analysis",
3               model="nlptown/bert-base-multilingual-uncased-sentiment")
4df["predicted_stars"] = df["content"].apply(
5    lambda x: int(clf(str(x)[:512])[0]["label"][0])
6)

Amazon yorumları gösterir — 5 yıldızda büyük bir zirve, 1 yıldızda daha küçük bir zirve ve ortada bir çukur. Bu nedenle ortalama yıldız puanı, çoğu zaman gerçek ürün kalitesini iyi yansıtmaz. 1 yıldız kümesini segmentlere ayırın ve tekrar eden temaları çıkarın — genellikle tek bir düzeltilebilir kusur orada saklıdır.

Dürüst Karşılaştırma: Kendi Python Çözümünüz, Ücretli Scraping API’leri ve Thunderbit

Amazon için Python scraper’ları yönettim ve dürüst olayım: bozuluyorlar. Selector’lar değişiyor, çerezler süresi doluyor, Amazon yeni bir bot algılama katmanı yayınlıyor ve bir anda cumartesi sabahınız veri analizi yerine scraper debug etmeye gidiyor. Forum kullanıcıları da aynı hayal kırıklığını paylaşıyor — geçen ay çalışan DIY betiklerin artık sürekli yamalanması gerekiyor.

Üç ana yaklaşım şöyle karşılaştırılabilir:

KriterKendi Python’unuz (BS4/Selenium)Ücretli Scraping APIThunderbit (Kod Gerektirmez)
Kurulum süresi1–3 saat30 dk (API anahtarı)2 dakika
MaliyetÜcretsiz (+ proxy maliyeti)Aylık 50–200+ dolarÜcretsiz plan mevcut
Giriş duvarını yönetmeManuel cookie yönetimiGenellikle halledilirOtomatik yönetilir
BakımYüksek (selector’lar bozulur)Düşük (sağlayıcı bakım yapar)Sıfır (AI uyum sağlar)
SayfalamaÖzel kod gerekirYerleşikYerleşik
Çok ülkeyi desteklemeHer alan adı için ayrı oturumGenellikle desteklenirTarayıcı tabanlı = yerel diliniz
Duygu analiziKendi kodunuzu eklemelisinizBazen dahilSheets’e aktarın, istediğiniz yerde analiz edin
En iyi kullanımÖğrenme, tam kontrolÖlçekli/üretim veri akışlarıHızlı veri çekimi, teknik olmayan ekipler

Python size tam kontrol sağlar ve web scraping’in iç işleyişini öğrenmek için gerçekten en iyi yoldur. Ücretli API’ler (ScrapingBee, Oxylabs, Bright Data) ise çalışma süresi maliyetten daha önemli olduğunda üretim akışları için mantıklıdır. Ve geliştirme yükü olmadan yorum verisine ihtiyaç duyan ekipler için — rakip ürünleri haftalık izleyen e-ticaret operasyonları, reklam metni için müşteri dili çeken pazarlama ekipleri — üçüncü bir yol daha var.

Thunderbit ile Amazon Yorumları Nasıl Çekilir? (Kod Yok, Bakım Yok)

’i tam da Python scraper bakımı gereksiz zahmete dönüştüğünde devreye girecek şekilde tasarladık. Akış şöyle görünür:

  1. kurun
  2. Tarayıcınızda Amazon ürün yorum sayfasına gidin (zaten giriş yapmış olacaksınız, dolayısıyla giriş duvarı sorun olmaz)
  3. “AI Suggest Fields” düğmesine tıklayın — Thunderbit sayfayı okur ve Author, Rating, Title, Review Text, Date, Verified Purchase gibi sütunlar önerir
  4. “Scrape” düğmesine tıklayın — veriler yerleşik sayfalama ile anında çıkarılır
  5. Excel, Google Sheets, Airtable veya Notion’a dışa aktarın

Asıl avantaj, Thunderbit’in AI’sının sayfa yapısını her seferinde yeniden okumasıdır. Bakım yapılacak CSS selector yok, cookie yönetimi yok, bot karşıtı kod yok. Amazon HTML’i değiştirdiğinde AI uyum sağlar. Programatik erişim isteyen ancak tam DIY istemeyen okuyucular için Thunderbit ayrıca bir de sunuyor — AI destekli alan algılama ile API üzerinden yapılandırılmış veri çıkarımı, selector bakımı gerekmez.

Amazon verileri hakkında daha derin içerikler için ve rehberlerimize bakabilirsiniz.

Python ile Ölçekli Amazon Yorumu Çekmek İçin İpuçları

Birden fazla ASIN üzerinden yorum çekiyorsanız, birkaç iyi uygulama sizi büyük dertlerden kurtarır:

  • ASIN’leri toplu işleyin ve ürünler arasında da gecikme ekleyin, sadece sayfalar arasında değil. Ben ASIN’ler arasında 10–15 saniyelik bekleme kullanıyorum.
  • Tekrarları agresif biçimde ayıklayın. Birden fazla yıldız filtresi ve sıralama kombinasyonu kullandığınızda örtüşen yorumlar göreceksiniz. Dedup anahtarı olarak (title, author, date) tuple’larını kullanın.
  • Hataları loglayın. Hangi ASIN + sayfa + filtre kombinasyonlarının başarısız olduğunu takip edin; böylece her şeyi yeniden çekmeden yalnızca onları tekrar deneyebilirsiniz.
  • Büyük projelerde veriyi veritabanında saklayın. Basit bir SQLite veritabanı, büyüyen CSV dosyalarına göre çok daha iyi ölçeklenir:
1import sqlite3
2conn = sqlite3.connect("reviews.db")
3df.to_sql("reviews", conn, if_exists="append", index=False)
  • Tekrarlayan çekimleri zamanlayın. Sürekli izleme için bir cron job kurun ya da Thunderbit’in Scheduled Scraper özelliğini kullanın — URL’yi ve zamanlamayı tanımlayın, gerisini sunucuya ihtiyaç duymadan o halleder.

Ek yaklaşımlar için ve yazılarımızda daha fazla seçenek bulabilirsiniz.

Kısa Bir Yasal ve Etik Not

Amazon’un , Amazon Hizmetlerine erişmek için “herhangi bir robot, spider, scraper veya başka bir otomatik yöntemin kullanımını” açıkça yasaklar. Buna rağmen, son ABD dava kararları kamuya açık veriyi çeken scraper’lar açısından olumlu olmuştur. davasında bir federal mahkeme, kamuya açık veriyi çekmenin, scraper giriş yapmış bir “kullanıcı” değilse kullanım şartlarını ihlal etmediğine karar verdi.

Nüans şu: giriş arkasında scraping yapmak (bu rehberin kapsadığı durum) sizi sözleşme hukuku alanına taşır; çünkü hesabınızı oluştururken Amazon’un ToS’unu kabul etmiş oldunuz. Kamuya açık öne çıkan yorumları çekmek, giriş duvarının arkasında scraping yapmaya göre daha düşük hukuki risk taşır.

Pratik kurallar: çektiğiniz veriyi ticari olarak yeniden dağıtmayın, kamuya açık şekilde gösterilenden öte kişisel kullanıcı verisi çekmeyin, robots.txt’ye saygı gösterin ve büyük ölçekli ya da ticari kullanım için hukuk danışmanına başvurun. Bu hukuki tavsiye değildir. Yasal çerçeve hakkında daha fazlası için özetimize bakabilirsiniz.

Sonuç: Amazon Yorumlarını Python ile Çekin ya da Kodu Baştan Sona Atlayın

Bu rehberde neleri ele aldığımızın kısa özeti:

  • Giriş duvarı gerçek, ancak cookie tabanlı kimlik doğrulama ile aşılabilir — tarayıcınızdan 7 çerezi kopyalayıp requests.Session() içine yerleştirin
  • Her birkaç haftada bir bozulmayan çekimler için CSS class’lar yerine data-hook selector’larını kullanın
  • 10 sayfalık sayfalama sınırını aşmak ve ürün başına 500+ yoruma ulaşmak için yıldız filtrelerini ve sıralama modlarını birleştirin
  • Hızlı bir başlangıç için TextBlob ile, üretim doğruluğu için Hugging Face Transformers ile duygu analizi ekleyin
  • Bot karşıtı savunmaları sürdürün: throttling, User-Agent rotasyonu, üstel geri çekilme ve ölçek için residential proxy’ler

Python size tam kontrol verir ve sistemin içini anlamanın en iyi yoludur. Ancak kullanım senaryonuz “üretim veri hattı kurmak istiyorum” değil de “Cuma gününe kadar rakip yorumlarını bir tabloda görmek istiyorum” ise, özel bir scraper’ın bakım yükü buna değmeyebilir.

kimlik doğrulama, selector’lar, sayfalama ve dışa aktarmayı birkaç tıkla halleder — deneyin ve iş akışınıza uyup uymadığını görün. Amazon bot karşıtı önlemleri sıkılaştırmaya devam ettikçe, gerçek zamanlı uyum sağlayan AI destekli araçlar bir lüksten çok bir zorunluluk haline gelecek.

Ayrıca scraping iş akışlarının video anlatımları için sayfamızı inceleyebilirsiniz.

SSS

1. Giriş yapmadan Amazon yorumları çekilebilir mi?

Evet, ancak yalnızca ürün detay sayfasında (/dp/{ASIN}/) gösterilen yaklaşık 8 adet “öne çıkan yorum” alınabilir. Sıralama, filtreleme ve sayfalama içeren tam yorum sayfaları 2024 sonlarından itibaren kimlik doğrulama gerektiriyor. Çoğu iş senaryosunda giriş duvarını aşmanız gerekir.

2. Amazon yorumlarını çekmek yasal mı?

Amazon’un Hizmet Koşulları otomatik scraping’i yasaklar. Ancak son ABD içtihatları (Meta v. Bright Data, 2024; hiQ v. LinkedIn) kamuya açık verinin çekilmesini destekliyor. Giriş arkasındaki scraping daha yüksek hukuki risk taşır çünkü Amazon’un ToS’unu kabul etmiş olursunuz. Ticari kullanım için hukuk danışmanına başvurun.

3. Ürün başına kaç Amazon yorumu çekebilirim?

Amazon, her sıralama ve yıldız filtresi kombinasyonu için yorum sayfalarını 10 ile sınırlar. 5 yıldız filtresi × 2 sıralama modu kullanarak ürün başına 100 sayfaya, yani yaklaşık 1.000 yoruma erişebilirsiniz. Anahtar kelime filtreleriyle teorik tavan çok daha yüksektir, ancak tekrar oranı da ciddi biçimde artar.

4. Amazon yorumlarını çekmek için en iyi Python kütüphanesi hangisidir?

Statik HTML ayrıştırma için requests + BeautifulSoup en yaygın ve güvenilir kombinasyondur. JavaScript ile render gerekiyorsa Selenium faydalıdır. Giriş duvarını ve sayfalamayı otomatik yöneten kodsuz bir alternatif için ’i deneyin.

5. Amazon yorumlarını çekerken engellenmemek için ne yapmalıyım?

10+ gerçek tarayıcı dizesi arasından User-Agent değiştirin, istekler arasında 2–5 saniyelik rastgele gecikmeler ekleyin, 503/429 hatalarında üstel geri çekilme uygulayın, ölçek için residential proxy kullanın (veri merkezi IP’leri önceden engellenir) ve istekler arasında tutarlı oturum çerezleri koruyun. Sıfır bakım yaklaşımı için Thunderbit bot karşıtı savunmaları tarayıcı oturumunuz üzerinden otomatik yönetir.

Daha Fazla Bilgi

İçindekiler

Thunderbit’i dene

Lead’leri ve diğer verileri sadece 2 tıkla çek. Yapay zeka destekli.

Thunderbit’i Al Ücretsiz
Yapay zeka ile veri çıkar
Verileri kolayca Google Sheets, Airtable veya Notion’a aktar
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week