“Gemini web scraping” anlatımlarının çoğu, sanki tek bir kişi için yazılmış gibi duruyor: elinde zaten sanal ortamı olan, Pydantic şemaları ve async kütüphaneler hakkında net fikirlere sahip bir Python geliştiricisi için. Eğer siz buysanız harika — birazdan koda giriyoruz. Ama satış, pazarlama ya da e-ticaret operasyonlarında çalışıyor ve markdownify’ın ne yaptığını öğrenmeden birkaç web sayfasından düzenli veri çekmek istiyorsanız, yalnız değilsiniz.
Gemini, Google’ın çok modlu yapay zekâ ailesi ve web verisi çıkarmada hızla öne çıkan araçlardan biri haline geliyor. 2025 Stack Overflow Developer Survey, geliştiricilerin %84’ünün yapay zekâ araçlarını kullandığını ya da kullanmayı planladığını gösteriyor — LLM destekli scraping de bu dalganın önemli bir parçası. Ama tek bir URL üzerinde çalışan “gösterişli demo” ile sayfalama, alt sayfalar, bot engelleri ve dağınık HTML’yi ölçekli biçimde yöneten gerçek bir süreç arasında dağlar kadar fark var. Bu rehberde hem Python tabanlı (kodlu) hem de kodsuz yolları ele alacağız, gerçek token hesaplarıyla model seçiminden geçeceğiz, çok sayfalı scraping’i (diğer rehberlerin çoğunda atlanan kısmı) anlatacağız ve Gemini scraping’in nerede tökezlediğini açık açık konuşacağız. Sonunda, hangi yolun iş akışınıza uyduğunu ve hem geliştiricilerin hem de iş kullanıcılarının sık düştüğü tuzaklardan nasıl kaçınacağınızı bileceksiniz.
Gemini Web Scraping Nedir?
Gemini web scraping, bir web sayfasının içeriğini — HTML, Markdown ya da hatta bir ekran görüntüsünü — Google’ın Gemini AI modellerinden birine verip sayfayı yorumlamasını ve yapılandırılmış veri olarak geri döndürmesini ifade eder. CSS seçici yok. XPath yok. Bir sitenin yerleşimi biraz değiştiğinde bozulan kırılgan kurallar yok.
Temel iş akışı şöyle görünür:
- Sayfayı çekin (
requests, headless browser veya bir Chrome uzantısıyla) - İçeriği temizleyip dönüştürün (genelde HTML → Markdown, token maliyetini düşürmek için)
- İstediğiniz alanları tanımlayan bir şema ile Gemini’ye gönderin
- Yapılandırılmış JSON alın — doğrudan tablo, CRM ya da veritabanı için hazır
Bunu BeautifulSoup veya Selenium ile yapılan geleneksel scraping ile karşılaştırın: div.product-title > span.price gibi seçicileri tek tek yazarsınız ve sitenin gelecek hafta yeniden tasarlanmadığına dua edersiniz. Gemini ise sayfayı bir insan gibi okur — bağlamı kavrar, yerleşim değişikliklerine uyum sağlar ve karmaşık biçimlendirmeyi özel kurallar yazmadan yönetir.
Bir önemli nokta daha: Gemini doğası gereği çok modlu. Tek bir istekte metin, görsel, video, ses, PDF ve kodla çalışabiliyor. Bu da — HTML yerine ekran görüntüsü göndermek gibi — çoğu diğer LLM’in yaklaşamadığı scraping yöntemlerini mümkün kılıyor. Birazdan buna da geleceğiz.
Gemini Web Scraping İş Ekipleri İçin Neden Önemli?
Bir pazarlama yöneticisi ya da e-ticaret analisti neden LLM’ler ve web scraping ile ilgilensin diye düşünüyorsanız, kısa cevap şu: inanılmaz zaman kazandırır ve site güncellendi diye sürekli bozulmaz.
Web scraping yazılım pazarı 2025’te yaklaşık 1 milyar dolardan 2030’da 2 milyar doların üzerine çıkacak şekilde büyüyor — en hızlı büyüyen segment ise yapay zekâ destekli veri çıkarımı. Bu bir abartı değil; ekiplerin veri toplama biçiminde gerçek bir değişimi yansıtıyor.
Gemini scraping’in günlük iş süreçlerinde yer bulduğu alanlar şunlar:
| Kullanım Alanı | Neler Çekiliyor | Kimler Faydalanır |
|---|---|---|
| Lead oluşturma | Dizinler, LinkedIn (herkese açık), şirket sitelerinden iletişim bilgileri | Satış, BDR ekipleri |
| Rakip fiyat takibi | Ürün fiyatları, stok durumu, kampanyalar | E-ticaret, fiyatlandırma ekipleri |
| Ürün kataloğu çıkarma | İsimler, teknik özellikler, görseller, yorumlar | Merchandising, marketplace operasyonları |
| Emlak ilanları | Mülk detayları, fiyatlar, danışman bilgileri | Emlakçılar, yatırımcılar |
| İçerik derleme | Haberler, blog yazıları, sosyal medya bahsetmeleri | Pazarlama, PR |
| İş piyasası araştırması | Pozisyonlar, maaşlar, lokasyonlar | İK, işe alım |
Pratik avantaj iki yönlüdür. Birincisi, ayrıştırma script’leri yazma, test etme ve hata ayıklama döngüsünden kurtulursunuz — model her seferinde sayfayı yeniden okur. İkincisi, bir site <div> değiştirince her defasında geliştirici çağırmanız gerekmez. Gemini’nin ücretsiz katmanı küçük işler için denemeyi neredeyse sıfır maliyetli hale getirir: Flash-Lite için günde yaklaşık 1.000 istek, Pro için 100 istek, kredi kartı gerektirmeden.
Hangi Gemini Modelini Seçmelisiniz? (Flash Lite vs. Flash vs. Pro)
Scraping için tüm Gemini modelleri aynı değil. Bu, her rehberde görmek istediğim pratik karşılaştırma; çünkü yanlış seviye seçmek ya gereksiz para harcatır ya da çöp veri üretir.
Mevcut üç Gemini 2.5 modeli de 1.048.576 token’lık bağlam penceresini paylaşıyor ve çok modlu. Farklar maliyet, hız ve karmaşık çıkarımı ne kadar iyi yaptıklarında.
| Model | Giriş Maliyeti (1M token başına) | Çıkış Maliyeti (1M token başına) | En Uygun Olduğu Alan | Karmaşık Şemalarda Doğruluk | Hız |
|---|---|---|---|---|---|
| Gemini 2.5 Flash Lite | ~$0.025 | ~$0.10 | Basit, düz veri, yüksek hacim | ⚠️ İç içe/geçici alanlarda zorlanır | En hızlı |
| Gemini 2.5 Flash | ~$0.075 | ~$0.625 | Çoğu scraping işi | ✅ Yapılandırılmış çıkarımda iyi | Hızlı |
| Gemini 2.5 Pro | ~$0.3125 | ~$2.50 | Karmaşık iç içe şemalar, uç durumlar | ✅ En yüksek doğruluk | En yavaş |
(Fiyatlar Gemini Developer API üzerinden alınmıştır. Batch API bu oranlarda %50 indirimlidir.)
Gemini 2.5 Flash Lite: Hızlı ve Ucuz, Ama Eksik Alanlara Dikkat
Flash Lite bütçe dostu seçenektir. Ürün adları, fiyatlar, tek seviyeli listeler gibi basit ve düz veriler için, özellikle yüksek hacimde idealdir. Ancak isteğe bağlı alanlar, zaman damgaları ve iç içe veriler konusunda bilinen sorunları vardır. Google forumundaki bir geliştirici, şema içinde zorunlu olmayan alanlar olduğunda Flash Lite’ın “kontrolden çıktığını” ve token sınırına kadar tekrar eden metinler ürettiğini bildirdi. Şemanız iki seviyeden fazla iç içe yapı içeriyorsa veya bazı sayfalarda eksik olabilecek alanlar varsa, Flash Lite hem token’ınızı hem sabrınızı tüketebilir.
Gemini 2.5 Flash: Çoğu Scraping İşinde En Dengeli Seçim
Gerçek dünyadaki neredeyse tüm scraping işleri için ilk başlayacağım model Flash olurdu. Yapılandırılmış çıkarımı iyi yönetir, sayfalama mantığını idare eder ve giriş maliyeti Flash Lite’a göre yaklaşık 3 kat daha yüksek olsa da doğruluk artışı buna değer. GPQA düzeyi akıl yürütme benchmark’larında Flash, Pro’ya oldukça yakındır; yani scraping’in gerçekten gerektirdiği çıkarım, normalleştirme ve düzleştirme işlerinde başarılıdır.
Gemini 2.5 Pro: Karmaşık Veri İçin Maksimum Doğruluk
Pro, hassas iş için kullanılan modeldir. Derin iç içe şemalar çıkarırken kullanın (örneğin: birden fazla varyant grubu olan ürün özellikleri; her grupta beden, renk ve fiyatlar), ya da uydurma alanların kabul edilemez olduğu durumlarda (hukuki, finansal, medikal veri). Giriş maliyeti kabaca Flash Lite’ın 12 katıdır; bu yüzden fiyatın değil doğruluğun daha önemli olduğu işler için saklayın.
Hesaplı Maliyet Örneği: 10.000 Ürün Sayfası
HTML’yi Markdown’a önceden dönüştürdüğünüzü varsayalım (ki bunu yapmalısınız — aşağıda anlatıyorum). Tipik bir ürün sayfası yaklaşık 20.000 token’lık ham HTML’den yaklaşık 4.000 token’lık Markdown’a düşer. Çıkış JSON’u sayfa başına yaklaşık 500 token’dır.
| Model | Giriş Maliyeti (40M token) | Çıkış Maliyeti (5M token) | 10K Sayfa İçin Toplam |
|---|---|---|---|
| Flash Lite | $1.00 | $0.50 | ~$1.50 |
| Flash | $3.00 | $3.13 | ~$6.13 |
| Pro | $12.50 | $12.50 | ~$25.00 |
Markdown ön işleme olmadan (ham HTML ile yaklaşık 200M token giriş), bu rakamlar 4–5 kat artar. Ön işleme, boru hattındaki en yüksek etkili optimizasyondur.
Kodlu ve Kodsuz: Gemini Web Scraping İçin İki Yol
Kavşaktasınız. Eğer özel bir boru hattı kuran geliştiriciyseniz, Python + Gemini API size maksimum kontrol sağlar. Eğer veriye hemen ihtiyacı olan ve terminale dokunmak istemeyen bir iş kullanıcısıysanız, kodsuz AI scraper sizi daha hızlı sonuca götürür.
| Kriter | Gemini API (Python) | Thunderbit (Kodsuz) |
|---|---|---|
| Kurulum süresi | 15–30 dk (ortam, anahtar, kütüphaneler) | < 1 dk (Chrome uzantısı kurulumu) |
| Kod gerekir mi? | Evet (Python, Pydantic) | Hayır |
| Sayfalama yönetimi | Elle scripting | Yerleşik (tıklama ya da sonsuz kaydırma) |
| Alt sayfa zenginleştirme | Site başına özel kod | Tek tıkla "Scrape Subpages" |
| Token maliyeti yönetimi | Elle (HTML temizliği, model seçimi) | Yapay zekâ motoru tarafından yönetilir |
| Dışa aktarma seçenekleri | JSON/CSV script ile | Excel, Google Sheets, Airtable, Notion |
| En uygun olduğu durum | Özel boru hattı geliştirenler | Hemen veriye ihtiyacı olan iş kullanıcıları |
Thunderbit, Thunderbit’te geliştirdiğimiz kodsuz seçenektir — Gemini, ChatGPT, Claude ve diğerlerini arka planda kullanarak alan öneren, iki tıkla scraping yapan ve veriyi istediğiniz araca aktaran bir Chrome uzantısı. Aşağıda iki yolu da anlatacağım.
Önceliği tablo olan kullanıcılar için Quadratic de bilmeye değer bir seçenek — Gemini destekli web scraping’i doğrudan tablonun içinde çalıştırabilen bir AI spreadsheet. Ancak başlangıcı belirli bir web sayfası olan iş akışlarında (ürün listeleri, dizinler, lead veritabanları) Thunderbit, kullanıcının zihinsel modeline daha yakın çalışır.
Adım Adım: Python ile Gemini Web Scraping
Bu bölüm geliştiriciler içindir. Kodsuz yolu istiyorsanız atlayabilirsiniz.
Başlamadan önce:
- Zorluk seviyesi: Orta (Python bilgisi gerekir)
- Gerekli süre: İlk scraping için yaklaşık 20–30 dakika
- Gerekenler: Python 3.10+, ücretsiz bir Google AI Studio hesabı, hedef URL
1. Adım: Python Ortamını ve Gemini API Anahtarını Kurun
Bir proje klasörü ve sanal ortam oluşturun, ardından gerekli kütüphaneleri yükleyin:
mkdir gemini-scraper && cd gemini-scraper
python -m venv venv && source venv/bin/activate
pip install -U google-genai requests beautifulsoup4 markdownify pydantic
Önemli: 2026’da kullanmanız gereken tek doğru SDK google-genai’dir. Eski google-generativeai paketi 2025-11-30 tarihinde kullanım ömrünü tamamladı ve artık desteklenmiyor. Bir rehberde import google.generativeai as genai görürseniz, o kod güncel değildir.
Sonra Google AI Studio üzerinden API anahtarınızı alın. “Get API Key”e tıklayın, yeni bir anahtar oluşturun ve bunu bir çevre değişkeni olarak kaydedin:
export GEMINI_API_KEY="your-key-here"
Artık tüm bağımlılıkları kurulmuş, API anahtarı hazır çalışan bir Python ortamınız var.
2. Adım: Hedef Sayfanın HTML’ini Çekin
Sayfayı almak için requests kullanın. Bu örnekte bir ürün sayfası çekelim:
import requests
url = "https://example.com/product/widget-pro"
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
html = response.text
Site ağır JavaScript render’ı ya da bot koruması kullanıyorsa, requests.get() size boş bir kabuk veya 403 döndürebilir. Bunu sınırlamalar bölümünde ele alacağız — fakat birçok herkese açık site için bu yöntem gayet yeterlidir.
3. Adım: HTML’i Temizleyip Markdown’a Dönüştürün
Rehberlerin çoğunun bahsettiği ama sayı vermediği adım budur. Tipik bir ürün sayfasının ham HTML’i yaklaşık 20.000 token’dır. BeautifulSoup ile temizlik ve Markdown dönüşümünden sonra bunu yaklaşık 765–4.000 token aralığına indirirsiniz — 5–10 katlık bir düşüş gerçek para tasarrufu sağlar ve halüsinasyon riskini azaltır.
from bs4 import BeautifulSoup
from markdownify import markdownify
soup = BeautifulSoup(html, "html.parser")
main = soup.select_one("main") or soup # sadece içerik alanını al
markdown_content = markdownify(str(main))
select_one("main") çağrısı başlık, alt bilgi, menü çubukları ve script’leri temizler — token israf eden ve modeli karıştıran tüm gürültüyü. Site <main> etiketi kullanmıyorsa .product-detail, #content ya da gerçek veriyi saran başka bir kapsayıcıyı deneyin.
Bu adımın sonunda, sayfanın anlamlı içeriğini içeren temiz bir Markdown dizeniz olmalı.
4. Adım: Veri Şemanızı Tanımlayın ve Gemini’ye Gönderin
Geri almak istediğiniz yapıyı Pydantic ile tanımlayın. google-genai SDK’sı, response_schema olarak doğrudan bir Pydantic BaseModel kabul eder:
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
name: str
price: str
sku: str | None = None
description: str
sizes: list[str] = []
colors: list[str] = []
client = genai.Client() # GEMINI_API_KEY değişkenini ortamdan okur
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Bu sayfadan ürün detaylarını çıkar:\n\n{markdown_content}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
product = response.parsed
print(product)
Belgelendirilmiş hata kayıtlarında yer alan birkaç önemli nokta:
- Gemini’ye gönderilen şemalarda
Field(default=...)kullanmayın — APIValueErrorverir. Bunun yerine tür seviyesindesku: str | None = Noneyazın. - İç içe yapıyı sığ tutun (en fazla 3 seviye). Derin iç içe şemalar Flash ve Flash Lite’ın döngüsel çıktı üretmesine veya kapatılmamış parantezler oluşturmasına neden olabilir.
- Flash Lite kullanırken alanları zorunlu işaretleyin ve eksik alanlar için yok saymak yerine boş string gibi işaret değerleri kullanın — Flash Lite’ın isteğe bağlı alanları işlemesi güvenilir değildir.
Artık sayfadan yapılandırılmış veri içeren bir Product nesnesine sahipsiniz.
5. Adım: Çıktıyı Dışa Aktarın ve Saklayın
Sonucu JSON veya CSV olarak kaydedin:
import json
with open("products.json", "w") as f:
json.dump(product.model_dump(), f, indent=2)
Google Sheets’e aktarmak için gspread kütüphanesini kullanabilirsiniz. Veritabanları için ise sonucu seçtiğiniz ORM’e serileştirin. Gemini’nin yapılandırılmış çıktısı, çoğu aşağı akış aracına doğrudan aktarılacak kadar temizdir.
Adım Adım: Kodsuz Gemini Web Scraping (Thunderbit ile)
Bu yol iş kullanıcıları içindir — ya da tek kullanımlık scraping script’leri yazmak istemeyen geliştiriciler için.
Başlamadan önce:
- Zorluk seviyesi: Başlangıç
- Gerekli süre: İlk scraping için yaklaşık 5 dakika
- Gerekenler: Chrome tarayıcı, Thunderbit uzantısı (ücretsiz katman yeterli)
1. Adım: Thunderbit Chrome Uzantısını Kurun
Chrome Web Store sayfasına gidin ve “Add to Chrome”a tıklayın. E-postanızla kayıt olun — tüm süreç bir dakikadan kısa sürer. Yukarıdaki 15–30 dakikalık Python kurulumuyla kıyaslayınca fark açık.
2. Adım: Hedef Sayfayı Açın ve “AI Suggest Fields”e Tıklayın
Scrape etmek istediğiniz siteye gidin — ürün listesi, emlak dizini, lead veritabanı, ne olursa. Tarayıcınızdaki Thunderbit simgesine tıklayın ve ardından “AI Suggest Fields” seçeneğine basın.
Thunderbit’in yapay zekâsı sayfayı okur ve sütun adları ile veri tiplerini otomatik önerir — örneğin “Ürün Adı,” “Fiyat,” “Puan,” “Görsel URL’si.” Sütun adlarını düzenleyebilir, gereksiz alanları kaldırabilir veya her sütun için özel AI istemleri ekleyebilirsiniz (örneğin “High/Medium/Low olarak sınıflandır” ya da “İngilizceye çevir”).
Tek bir satır scrape etmeden önce, yapılandırdığınız sütunlarla birlikte bir tablo önizlemesi görürsünüz.
3. Adım: “Scrape”e Tıklayın ve Sonuçları Kontrol Edin
Tek tık. Thunderbit sayfalama işlemini yönetir — hem tıklamalı “Next” düğmelerini hem de sonsuz kaydırmayı — ve veriyi yapılandırılmış bir tabloya çıkarır. Şunlar arasında seçim yapabilirsiniz:
- Cloud Scraping: Daha hızlıdır, aynı anda 50 sayfaya kadar işler. Herkese açık sitelerde çalışır.
- Browser Scraping: Giriş yapmış tarayıcı sekmenizde çalışır. Kimlik doğrulama gerektiren siteler için kullanın (CRM’ler, erişim kontrollü dizinler, iç araçlar).
Sonuçlar, uzantının yan panelinde doğrudan bir tabloda görünür. Dışa aktarmadan önce bariz hataları kontrol edin.
4. Adım: Excel, Google Sheets, Airtable veya Notion’a Aktarın
Dışa aktarma düğmesine tıklayın ve formatınızı seçin. Thunderbit veriyi Excel, Google Sheets, Airtable ve Notion’a ücretsiz olarak aktarır — ödeme duvarı yok. Görsel alanları doğrudan Notion ve Airtable görsel kütüphanelerine yüklenir; ürün fotoğrafları veya profil görselleri çekiyorsanız güzel bir artı.
JSON ayrıştırma yok. Script yok. Veri hemen kullanılmaya hazır.
Gemini ile Çok Sayfalı ve Alt Sayfalı Scraping
Rehberlerin çoğu sessizce tek bir URL’den sonra biter. Gerçek scraping işleri bitmez.
Sayfalama ve detay alt sayfaları olan 500 ürün sayfasını çekmek bir iştir — tek URL demosu ile gerçek operasyon arasındaki boşluk ise çok büyüktür.
Gemini API ile Sayfalama Yönetimi (Kodlu Yaklaşım)
Sayfa numaralı URL’ler için (en yaygın desen), boş sonuç gelene kadar sayfaları döngüye alın:
import time
all_products = []
for page in range(1, 101): # en fazla 100 sayfa
url = f"https://example.com/products?page={page}"
md = fetch_clean(url) # yukarıdaki HTML→Markdown fonksiyonunuz
response = client.models.generate_content(
model="gemini-2.5-flash-lite", # liste sayfaları için ucuz
contents=f"Ürün adlarını ve URL’lerini çıkar:\n\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=list[ListingItem],
),
)
items = response.parsed
if not items:
break
all_products.extend(items)
time.sleep(4) # ücretsiz katman hız limitlerine uyun
Cursor tabanlı veya sonsuz kaydırmalı sitelerde, ön yüzün çağırdığı XHR endpoint’ini yakalamanız gerekir (tarayıcınızın Network sekmesine bakın) ve doğrudan o endpoint üzerinde döngü kurun. Yeniden render etmekten daha ucuzdur; alanların LLM ile temizlenmesi gerekiyorsa yalnızca ürünleri Gemini’ye gönderirsiniz.
Burada token maliyetlerini dikkatle izleyin — her sayfa faturayı büyütür. Basit liste sayfaları için Flash Lite kullanın, detay çıkarımı gerektiğinde Flash’a geçin.
Daha Zengin Veri İçin Alt Sayfa Scraping (Kodlu Yaklaşım)
Klasik iki aşamalı desen: 1. aşama liste sayfasından URL’leri toplar, 2. aşama her detay sayfasını ziyaret edip daha zengin veriyi çeker.
# 1. aşama: ucuz Flash Lite ile URL’leri topla
class Listing(BaseModel):
product_urls: list[str]
listing = client.models.generate_content(
model="gemini-2.5-flash-lite",
contents=f"Ürün URL’lerini çıkar:\n{listing_md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Listing,
),
).parsed
# 2. aşama: Flash ile detayları çek
class ProductDetail(BaseModel):
name: str
price: str
specs: dict[str, str]
reviews: list[str]
for url in listing.product_urls:
md = fetch_clean(url)
detail = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Ürün detaylarını çıkar:\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=ProductDetail,
),
).parsed
# detayları kaydet...
time.sleep(0.5)
Bu çalışır, ama epey fazla altyapı işi çıkarır: URL çoğaltma önleme, hata yönetimi, hız sınırı, yeniden deneme mantığı, şema değişirse yeniden fetch etmeyi gerektirmemek için ham HTML’i önbelleğe alma. 50 sayfa için idare eder. 5.000 sayfa için altyapı kuruyorsunuz.
Kodsuz Alternatif: Thunderbit’in Yerleşik Sayfalama ve Alt Sayfa Scraping Özelliği
Thunderbit, hem tıklamalı hem de sonsuz kaydırmalı sayfalamayı otomatik yönetir — döngü script’i yazmanız gerekmez. Alt sayfa zenginleştirmesi için “Scrape Subpages” özelliği, listenizdeki her detay sayfasını ziyaret eder ve orijinal tabloyu daha derin alanlarla zenginleştirir. Tek tık, tek script değil.
Cloud scraping modu aynı anda 50 sayfaya kadar işler; bu da ürün kataloğu veya emlak dizini gibi ölçekli işlerde gerçekten fark yaratır. Python döngüleri ve yeniden deneme mantığıyla uğraşmak istemeyenler için bu en pratik seçimdir. (Web sitelerinden Excel’e veri çekme konusunda ayrıca bir rehberimiz de var.)
Ekran Görüntüsü ile Scraping: Gemini’nin Çok Modlu Kestirme Yolu
Rehberlerin çoğunun tamamen atladığı bir yöntem var: ham HTML yerine web sayfasının bir ekran görüntüsünü Gemini’nin vision API’sine göndermek. Bir geliştirici, tek bir ekran görüntüsünün sadece yaklaşık 258 token tuttuğunu bildirdi — temizlenmiş Markdown için bile bu binlerce token’a kıyasla çok büyük bir fark. Basit çıkarımlar için ciddi bir maliyet avantajı.
Gemini Vision API ile Web Scraping Nasıl Yapılır?
Playwright ile bir ekran görüntüsü alın, kodlayın ve Gemini’ye gönderin:
from playwright.sync_api import sync_playwright
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
title: str
price: str
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://example.com/product/widget-pro")
page.wait_for_load_state("networkidle")
png_bytes = page.screenshot(full_page=False) # sadece üst görünüm
client = genai.Client()
resp = client.models.generate_content(
model="gemini-2.5-flash",
contents=[
{"inline_data": {"mime_type": "image/png", "data": png_bytes}},
"Ürün başlığını ve fiyatını JSON olarak çıkar.",
],
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
print(resp.parsed)
Google’ın görsel token dokümantasyonuna göre, her iki boyutu da 384 piksel veya altında olan bir görsel 258 token tutar. Daha büyük görseller 768×768 parçacıklara ayrılır ve her parça 258 token olarak ücretlendirilir. Kısa bir üst görünüm ekran görüntüsü (258–1.600 token), ham HTML’i rahatça geçebilir — ama çok uzun tam sayfa bir ekran görüntüsü (~5.000 token), temiz Markdown’a (~765–1.200 token) yenilebilir.
Ekran Görüntüsü Scraping’in Sınırlamaları
- Yoğun tablolar için daha düşük hassasiyet: Çok sütunlu düzenler, küçük yazılar ve üst üste binen öğeler eksik okumalara yol açar — halüsinasyon değil, eksik etiketler ve yanlış hizalanmış başlıklar.
- Bağlantıları takip edemez: Vision metin döndürür, tıklanabilir bağlantılar değil. Sayfalama yok, alt sayfa zenginleştirme yok.
- Çözünürlük sınırı: Yaklaşık 10 px’den küçük metinler sıkça yanlış okunur. Google, uzun kenarı yaklaşık 1.568 px’e kadar küçültür.
- Yakalama yükü: Playwright başlatma + networkidle bekleme her sayfada 2–5 saniye sürer; ölçek büyüdükçe bu birikir.
Ekran görüntüsü scraping, JS ağırlıklı sayfalar, bot engelli siteler (requests.get() 403 döndürürken tarayıcıda düzgün açılanlar) ve verinin grafik ya da görsellerin içine gömülü olduğu sayfalar için çok uygundur. Uzun ve metin ağırlıklı sayfalarda ise Markdown hâlâ daha iyi seçimdir.
Thunderbit’in görsel ve PDF scraping özelliği benzer bir AI-vision yaklaşımı kullanır — bir görsel veya PDF yükleyin, size yapılandırılmış tabloyu döndürsün; ekran görüntüsü script’i ya da base64 uğraşı gerekmez. (Ayrıca bkz: görselleri Excel’e dönüştürme.)
Gemini Web Scraping Ne Zaman Başarısız Olur? (Ve Ne Yapmalı?)
Gemini bir çıkarım motorudur, bir getirme motoru değil. Sayfa içeriğini Gemini’ye ulaştıramıyorsanız, işe yaramaz. Nokta.
Bu yaklaşımın tamamen bozulduğu birkaç yaygın senaryo var; çoğu rehber bunu sonradan eklenmiş bir ayrıntı gibi geçiştirir. Ben doğrudan söylemeyi tercih ederim.
| Sınırlama | Ne Olur | Çözüm |
|---|---|---|
| Anti-bot / Cloudflare | API istekleri engellenir; requests.get() 403 veya doğrulama sayfası döndürür | TLS parmak izi rotasyonu olan proxy’ler kullanın veya tarayıcı tabanlı araçlara geçin (Thunderbit’in browser scraping modu giriş yapılmış oturumunuzu kullanır) |
| Token pencere sınırları | Büyük sayfalar kullanılabilir bağlamı aşar (~200K–300K, teknik olarak 1M desteklense de güvenilir çıkarım için bu aralık daha gerçekçidir) | HTML→Markdown temizliği yapın, sayfayı bölün veya ekran görüntüsü kullanın |
| Görsel içerikte halüsinasyon | Gemini gerçek görsel içeriği yerine alt metin ya da açıklamalardan tahmin yürütür | Çıktıları doğrulayın; görsel veri için vision API’yi açıkça kullanın; grounding doğrulayıcılar ekleyin |
| API hız limitleri | Ölçekte kısıtlanır — ücretsiz katmanda Pro için yaklaşık 100 RPD, Flash Lite için yaklaşık 1.000 RPD | Kuyruk yönetimi, toplu işleme (%50 indirim) veya hazır araçlara geçiş |
| Tutarsız çıkarım (Lite modeller) | İsteğe bağlı alanlar, zaman damgaları ve iç içe veri kaçırılır ya da uydurulur | Flash/Pro’ya yükseltin veya açık şema kısıtları ekleyin |
| Korumalı siteler (LinkedIn vb.) | Hata ya da boş veri döner | Aktif oturumla tarayıcı tabanlı scraping kullanın (Thunderbit bunu destekler); kullanım şartlarına uyun |
Bunlardan birkaçını biraz açmak gerekiyor.
Anti-bot artık aktif olarak LLM farkındalığına sahip. Cloudflare, Temmuz 2025 itibarıyla AI crawler’larını varsayılan olarak engelliyor; ilk beş ayda 416 milyar AI bot isteği engellendi. Datadome 2025’te LLM’ye özel tespiti devreye aldı ve LLM bot trafiğinde dört kat artış gördü. Düz bir requests.get() + Gemini, Datadome korumalı siteler karşısında neredeyse ölüdür. Sorun IP değil, parmak izidir — TLS parmak izi “Python requests” diye bağırıyorsa IP değiştirmek tek başına bir şeyi çözmez.
Halüsinasyon ince ince gelir. Yardımcı olmaya ayarlı LLM’ler, isteğe bağlı alanları null döndürmek yerine makul görünen uydurmalarla doldurur. Modellerin bir ürünün markasını URL slug’ından tahmin ettiğini, para birimini TLD’den çıkardığını ve skeleton loader’lardaki görünüşte mantıklı ama sahte yorum sayılarını yazdığını gördüm. Çözüm katmanı: katı Pydantic şemaları, doğrulama geri bildirimiyle yeniden deneme döngüleri, çıkarılan değerlerin gerçekten kaynak HTML’de geçtiğini kontrol eden grounding doğrulayıcılar ve iki aşamalı çıkarım (Flash çıkarır, Pro örnekleri doğrular).
1M bağlam penceresi, gerçekten 1M gibi kullanılamaz. Chroma ve benzerlerinin araştırmaları, akıl yürütme kalitesinin token sınırına çok gelmeden düşmeye başladığını gösteriyor. Yapılandırılmış çıkarım için yaklaşık 200K–300K token’ı pratik üst sınır gibi düşünün.
Karar Ağacı: Hangi Aracı Kullanmalısınız?
- Düşük hacim + basit sayfalar + geliştirici → Gemini API ücretsiz katman + Python
- Orta hacim + karmaşık şemalar + geliştirici → ücretli Gemini 2.5 Flash + Python + yapılandırılmış çıktı + ön işleme
- Her hacim + geliştirici olmayan + giriş duvarlı veya yoğun sayfalama içeren siteler → Thunderbit
- Çok yüksek hacim + yoğun anti-bot + kritik görev → Yönetilen scraping altyapısı (proxy servisleri) + çıkarım katmanı olarak Gemini
Gemini Web Scraping: Zaman ve Para Kazandıran İpuçları
İster Python yazın ister düğmelere tıklayın, bunlar can sıkıntısını azaltır.
- Gemini’ye göndermeden önce HTML’i her zaman Markdown’a dönüştürün. 5–10 kat token tasarrufu yaygındır; BeautifulSoup ile ön kırpma yaparsanız %95’e kadar tasarruf mümkündür.
- Sadece
google-genaikullanın. Kullanım ömrü bitmişgoogle-generativeaipaketini kullanmayın — EOL. - Flash Lite’a yalnızca düz şemalarla başlayın. İç içe yapı veya isteğe bağlı alanlar göründüğü anda Flash’a geçin.
- Gemini’ye verdiğiniz Pydantic şemalarda
Field(default=...)kullanmayın. Tür seviyesindesku: str | None = Noneyazın. - Pydantic +
response_schemakritik önemdedir — hem sözleşme hem de halüsinasyon güvenlik bariyeridir. - 1.000 sayfayı aşan işler için Batch API kullanın — %50 indirimlidir ve gerçek zamanlı RPM’i tüketmez.
- Yeni bir çıkarıcıyı ölçeklemeden önce 10–50 satırlık rastgele bir örneği elle doğrulayın. Doğruluk sapması, siz bakana kadar görünmez.
- Ham HTML’i diske önbelleğe alın — şema değişiklikleri için tekrar fetch etmeye gerek kalmasın.
- Her satıra kaynak URL’si ekleyin — böylece tüm işi yeniden çalıştırmadan tek tek sayfaları yeniden tarayabilirsiniz.
- Kodsuz kullanıcılar için: Thunderbit’te sütun başına özel AI istemleri kullanın — prompt mühendisliğini tablo katmanına taşıyın; sütun bazında çeviri, sınıflandırma, özetleme yapın.
Bir ipucu daha: ücretsiz katmanı üretime göndermeyin. Limitler Aralık 2025’te %50–80 azaltıldı ve bir daha uyarı olmadan düşürülebilir.
Kapanış
Tek URL’lik bir Gemini demosu ile üretim boru hattı arasındaki mesafe, çoğu rehberin anlattığından daha büyüktür.
Python + Gemini API yolu, geliştiricilere model seçimi, ön işleme, sayfalama ve şema tasarımı üzerinde tam kontrol verir. Kodsuz yol — Thunderbit gibi araçlar — iş kullanıcılarına terminale dokunmadan aynı yapılandırılmış veri çıkarımını sağlar.
Benim çıkaracağım dersler şunlar:
- Model seçimi önemlidir. Hacim için Flash Lite, denge için Flash, karmaşıklık için Pro. En ucuz seçeneği varsayılan yapıp verinizin neden yanlış çıktığını merak etmeyin.
- Çok sayfalı ve alt sayfalı scraping, rehberlerin tökezlediği yerdir — gerçek iş de orada olur. Burada anlattığımız iki yol bu açığı kapatır.
- Dürüst sınırlamalar zaman kazandırır. Bir site API isteklerini engelliyorsa, hiçbir prompt mühendisliği onu kurtarmaz. İş için doğru aracı seçin, en parlak olanı değil.
- HTML’i Markdown’a ön işlemek, en yüksek etkili optimizasyondur — maliyeti %75+ düşürür ve halüsinasyonu azaltır.
Kodsuz yolu denemek isterseniz, Thunderbit’in ücretsiz katmanı ile birkaç sayfa scrape edip sonucu kendiniz görebilirsiniz. Kod yazmayı tercih ediyorsanız, Gemini’nin ücretsiz API katmanı öğleden sonra bir boru hattı prototipi kurmak için yeterlidir. Her iki durumda da, kopyala-yapıştırdan çok daha hızlı yapılandırılmış veri elde edersiniz. Web sitelerinden Excel’e veri çekme veya en iyi AI web scraper’lar hakkında daha fazlası için blogumuzda bu konuları ayrıntılı işledik.
AI Web Scraping için Thunderbit’i Deneyin Get Started Free
SSS
Gemini ile web scraping ne kadar tutar?
Gemini API’nin ücretsiz katmanı, erken 2026 itibarıyla yaklaşık olarak Pro için günde 100 istek, Flash için 500 istek ve Flash Lite için 1.000 istek sunar (bu limitler Aralık 2025’te düşürüldü). Ücretli katmanda, 10.000 ürün sayfasını scrape etmek; HTML’yi önce Markdown’a dönüştürdüğünüz varsayımıyla, Flash Lite ile yaklaşık 1,50 $, Flash ile 6 $, Pro ile 25 $ tutar. Ön işleme yapmazsanız maliyet 4–5 kat artar. Batch API, gerçek zamanlı olmayan işler için %50 indirim sunar.
Gemini, giriş yapmayı gerektiren siteleri scrape edebilir mi?
Gemini’nin API’si tek başına sitelere giriş yapamaz — sadece gönderdiğiniz içeriği işler. HTML’i kendi kimlik doğrulanmış oturumunuzla kendiniz çekmeniz gerekir (örneğin headless browser ve kayıtlı çerezlerle). Thunderbit’in Browser Scraping modu bunu doğal olarak yönetir: giriş yaptığınız Chrome sekmenizde çalışır; tarayıcınızda görebildiğiniz her siteyi Thunderbit scrape edebilir.
Gemini web scraping yasal mı?
Yasal durum; sitenin kullanım şartlarına, veri türüne ve bulunduğunuz ülkeye bağlıdır. ABD’de, hiQ v. LinkedIn ve Meta v. Bright Data sonrası, giriş yapmadan herkese açık veriyi scrape etmek genellikle izin verilebilir kabul edilir — ancak her olay kendi özel koşullarına bağlıdır. Giriş duvarının arkasındaki verileri çekmek daha yüksek hukuki risk taşır. AB’de yaşayanların kişisel verileri, sitenin herkese açık olup olmamasından bağımsız olarak GDPR kapsamındadır. Her zaman robots.txt ve kullanım şartlarına uyun; hukuka uygun bir dayanak olmadan kişisel veri scrape etmeyin.
Dinamik ve ağır JavaScript kullanan siteleri Gemini ile scrape edebilir miyim?
Evet, ama önce JavaScript’i render etmeniz gerekir — ya headless browser (Playwright, Puppeteer) ile ya da sitenin API endpoint’lerini doğrudan yakalayarak. Render edilmiş HTML’yi aldıktan sonra temizleyip her zamanki gibi Gemini’ye gönderirsiniz. Alternatif olarak, Gemini’nin vision API’si ile ekran görüntüsü scraping JS render’ını tamamen atlatır — eğer tarayıcıda görünüyorsa, Gemini de görebilir. Thunderbit, hem Cloud hem de Browser scraping modlarında JS ile render edilen sayfaları otomatik olarak yönetir.
Scraping için Gemini kullanmak ile Thunderbit gibi özel bir scraping aracı kullanmak arasındaki fark nedir?
Gemini bir çıkarım motorudur — içeriği yorumlar ve yapılandırılmış veri döndürür. Web sitelerini ziyaret etmez, sayfalama yönetmez, kimlik doğrulama yapmaz veya veriyi tabloya aktarmak gibi işleri üstlenmez. İçeriği Gemini’ye ulaştıracak bir şeye ve çıktıyı işe yarar hale getirecek bir araca yine ihtiyacınız vardır. Thunderbit gibi özel araçlar; getirme, render etme, AI ile çıkarım, sayfalama, alt sayfa zenginleştirme ve dışa aktarmayı tek pakette birleştirir — ek kurgu gerekmez.
Daha Fazla Bilgi


