Sayfalandırma ve Büyük Veri Kümelerini Toplama
Sayfalandırmayı ve next_cursor örüntülerini ele alma, time.sleep ile hız sınırlama ve ilerleme çubukları.
Sayfalandırma ve Büyük Veri Kümelerini Toplama, CoddyKit'te ücretsiz bir Learn AI with Python dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn AI with Python öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn AI with Python kursu toplamda 4 dersten oluşur.
Sayfalama Neden Vardır
API'ler nadiren tek bir yanıtta milyonlarca kayıt döndürür. Her yanıtın küçük ve hızlı kalması için sonuçları sayfalara bölerler.
Tam bir veri kümesi toplamak için her sayfada döngü kurmanız ve sonuçları birleştirmeniz gerekir. Bu derste yaygın sayfalama biçimlerinin yanı sıra istek hızı sınırlama ve ilerleme takibi ele alınmaktadır.
Sayfa Numaralı Sayfalama
En basit düzenekte bir page parametresi kullanılır. API boş bir sayfa döndürene kadar bu parametreyi artırırsınız.
import requests
all_items = []
page = 1
while True:
resp = requests.get(url, params={"page": page, "per_page": 100}, timeout=10)
resp.raise_for_status()
items = resp.json()
if not items:
break
all_items.extend(items)
page += 1
print(len(all_items), "items collected")İmleç / Sonraki URL ile Sayfalama
Birçok modern API, sonraki sayfayı gösteren bir sonraki URL veya imleç belirteci döndürür. Bir sonraki bağlantı mevcut olduğu sürece döngüyü sürdürürsünüz.
Bu yaklaşım sağlamdır; çünkü sonraki sayfanın nereden başlayacağını sunucu belirler.
all_items = []
next_url = "https://api.example.com/items?limit=100"
while next_url:
resp = requests.get(next_url, timeout=10)
resp.raise_for_status()
data = resp.json()
all_items.extend(data["results"])
next_url = data.get("next") # None when no more pages
print(len(all_items))time.sleep ile İstek Hızı Sınırlarına Uyma
API'ler saniye veya dakika başına gönderebileceğiniz istek sayısını sınırlar. İstekleri art arda ve aşırı hızda göndermek, 429 Too Many Requests yanıtı almanıza veya engellenmenize neden olur.
Uygun davranmak ve sınırın altında kalmak için isteklerin arasına kısa bir time.sleep ekleyin.
import time
while next_url:
resp = requests.get(next_url, timeout=10)
resp.raise_for_status()
data = resp.json()
all_items.extend(data["results"])
next_url = data.get("next")
time.sleep(0.5) # 2 requests per secondİstek Hızı Sınırı Üst Bilgilerini Okuma
Kurallara uygun çalışan API'ler, kalan kotanızı X-RateLimit-Remaining ve X-RateLimit-Reset gibi üst bilgilerde bildirir.
Her zaman beklemek yerine yalnızca sınıra yaklaştığınızda yavaşlamak için bu bilgileri okuyabilirsiniz.
remaining = int(resp.headers.get("X-RateLimit-Remaining", 1))
if remaining < 5:
reset = int(resp.headers.get("X-RateLimit-Reset", 1))
print("Near limit, sleeping", reset, "s")
time.sleep(reset)Geri Çekilmeyle 429 Durumunu Ele Alma
429 durumuyla karşılaşırsanız, yanıt genellikle ne kadar beklemeniz gerektiğini belirten bir Retry-After üst bilgisi içerir. Yeniden denemeden önce bu süreye uyun.
resp = requests.get(url, timeout=10)
if resp.status_code == 429:
wait = int(resp.headers.get("Retry-After", 5))
time.sleep(wait)
resp = requests.get(url, timeout=10) # retry oncetqdm ile İlerleme Çubukları
Uzun veri toplama işleri, geri bildirim olmadan takılmış gibi görünür. tqdm, herhangi bir yinelenebilir nesneyi sarar ve hız ile ETA'yı gösteren canlı bir ilerleme çubuğu yazdırır.
from tqdm import tqdm
for page in tqdm(range(1, 101), desc="Fetching"):
resp = requests.get(url, params={"page": page}, timeout=10)
all_items.extend(resp.json())
time.sleep(0.2)Bilinmeyen Toplamlarla tqdm Kullanımı
İmleçle sayfalama yaparken toplam kayıt sayısını önceden bilemezsiniz. tqdm'yi elle yönetilen bir sayaç olarak kullanın ve her döngüde update() çağrısını yapın.
from tqdm import tqdm
pbar = tqdm(desc="Pages")
while next_url:
resp = requests.get(next_url, timeout=10)
data = resp.json()
all_items.extend(data["results"])
next_url = data.get("next")
pbar.update(1)
pbar.close()Artımlı Veri Toplama
Çok büyük veri kümelerinde her şeyi bellekte tutmayın. Artımlı veri toplama, her sayfayı geldikçe diske yazar; böylece bir çökme tüm ilerlemenin kaybolmasına neden olmaz.
import json
with open("items.jsonl", "w") as f:
while next_url:
resp = requests.get(next_url, timeout=10)
data = resp.json()
for item in data["results"]:
f.write(json.dumps(item) + "\n")
next_url = data.get("next")Devam Ettirilebilir Veri Toplama
Son imleci veya sayfa numarasını kaydedin; böylece yeniden çalıştırma işlemi baştan başlamak yerine kaldığı yerden devam edebilir. Bu, uzun işlerin hatalara dayanıklı olmasını sağlar.
import os
start_page = 1
if os.path.exists("checkpoint.txt"):
start_page = int(open("checkpoint.txt").read()) + 1
for page in range(start_page, 1000):
# ... fetch and store ...
open("checkpoint.txt", "w").write(str(page))Hepsini Bir Araya Getirme
Üretim ortamına uygun bir veri toplama döngüsü tüm parçaları birleştirir: sayfalama yapar, istek hızı sınırları için bekler, ilerlemeyi gösterir, artımlı olarak yazar ve kontrol noktası oluşturur.
from tqdm import tqdm
import time, json
with open("out.jsonl", "a") as f:
next_url = "https://api.example.com/items?limit=100"
pbar = tqdm(desc="Pages")
while next_url:
r = requests.get(next_url, timeout=10)
r.raise_for_status()
d = r.json()
for it in d["results"]:
f.write(json.dumps(it) + "\n")
next_url = d.get("next")
pbar.update(1)
time.sleep(0.3)Hızlı Kontrol: İmleçle Sayfalama
Bir API, URL olan bir "next" alanı veya son sayfada None döndürür.
Özet: Büyük Veri Kümelerini Toplama
Artık birçok sayfaya yayılan veri kümelerini toplayabilirsiniz:
- Sayfa numarası ve imleçle (
while next_url) sayfalama - 429 yanıtlarından kaçınmak için
time.sleepve istek hızı sınırı üst bilgileri - Hız sınırlamasında
Retry-Afterile geri çekilme - Uzun işler için
tqdmilerleme çubukları - Hata toleransı için artımlı ve devam ettirilebilir yazma
Sırada: toplanan verileri verimli biçimde depolama.
Sıkça Sorulan Sorular
“Sayfalandırma ve Büyük Veri Kümelerini Toplama” dersi ücretsiz mi?
Evet — “Sayfalandırma ve Büyük Veri Kümelerini Toplama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn AI with Python kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn AI with Python kursu toplamda 4 dersten oluşur.
“Sayfalandırma ve Büyük Veri Kümelerini Toplama” dersinde ne öğreneceğim?
Sayfalandırmayı ve next_cursor örüntülerini ele alma, time.sleep ile hız sınırlama ve ilerleme çubukları. Learn AI with Python ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn AI with Python öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn AI with Python, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Sayfalandırma ve Büyük Veri Kümelerini Toplama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn AI with Python dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn AI with Python dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Veri Toplama İçin REST API Temelleri
- Sayfalandırma ve Büyük Veri Kümelerini Toplama
- Toplanan Verileri Verimli Biçimde Depolama
- Herkese Açık Veri API'leriyle Çalışma