0Pricing
Learn AI with Python · Ders

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 once

tqdm 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.sleep ve istek hızı sınırı üst bilgileri
  • Hız sınırlamasında Retry-After ile geri çekilme
  • Uzun işler için tqdm ilerleme ç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

  1. Veri Toplama İçin REST API Temelleri
  2. Sayfalandırma ve Büyük Veri Kümelerini Toplama
  3. Toplanan Verileri Verimli Biçimde Depolama
  4. Herkese Açık Veri API'leriyle Çalışma
← Learn AI with Python Sayfasına Dön