0Pricing
Learn AI with Python · Pelajaran

Membuat Halaman dan Mengumpulkan Dataset Besar

Menangani pembuatan halaman, pola next_cursor, pembatasan laju dengan time.sleep, dan bilah kemajuan.

Membuat Halaman dan Mengumpulkan Dataset Besar adalah pelajaran Learn AI with Python gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn AI with Python, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn AI with Python mencakup 4 pelajaran total.

Mengapa Paginasi Diperlukan

API jarang mengembalikan jutaan catatan dalam satu respons. API membagi hasil menjadi halaman agar setiap respons tetap kecil dan cepat.

Untuk mengumpulkan seluruh kumpulan data, Anda harus mengulang setiap halaman dan menggabungkan hasilnya. Pelajaran ini membahas gaya paginasi yang umum, serta pembatasan laju dan pelacakan kemajuan.

Paginasi Berdasarkan Nomor Halaman

Skema paling sederhana menggunakan parameter page. Anda menaikkan nilainya hingga API mengembalikan halaman kosong.

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")

Paginasi dengan Kursor / URL Berikutnya

Banyak API modern mengembalikan URL berikutnya atau token kursor yang menunjuk ke halaman selanjutnya. Anda melakukan perulangan selama tautan berikutnya masih ada.

Cara ini tangguh karena server mengendalikan lokasi awal halaman berikutnya.

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))

Mematuhi Batas Laju dengan time.sleep

API membatasi jumlah permintaan yang boleh Anda kirim per detik atau per menit. Membanjiri API akan menghasilkan 429 Too Many Requests atau membuat akses Anda diblokir.

Sisipkan time.sleep singkat di antara permintaan agar tetap sopan dan berada di bawah batas tersebut.

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

Membaca Header Batas Laju

API yang dikelola dengan baik melaporkan kuota tersisa Anda melalui header seperti X-RateLimit-Remaining dan X-RateLimit-Reset.

Anda dapat membacanya untuk memperlambat permintaan hanya ketika sudah mendekati batas, alih-alih selalu berhenti sejenak.

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)

Menangani 429 dengan Jeda Bertahap

Jika Anda memang menerima 429, respons sering menyertakan header Retry-After yang memberi tahu berapa lama Anda harus menunggu. Patuhi waktu tersebut sebelum mencoba lagi.

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

Bilah Kemajuan dengan tqdm

Pekerjaan pengumpulan yang lama terasa macet tanpa umpan balik. tqdm membungkus iterable apa pun dan menampilkan bilah kemajuan langsung beserta laju dan ETA.

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)

tqdm dengan Total yang Tidak Diketahui

Untuk paginasi dengan kursor, Anda tidak mengetahui jumlah totalnya sejak awal. Gunakan tqdm sebagai penghitung manual dan panggil update() pada setiap perulangan.

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()

Pengumpulan Bertahap

Untuk kumpulan data yang sangat besar, jangan menyimpan semuanya di memori. Pengumpulan bertahap menulis setiap halaman ke disk saat halaman tersebut tiba, sehingga kegagalan tidak menghilangkan seluruh kemajuan.

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")

Pengumpulan yang Dapat Dilanjutkan

Simpan kursor atau nomor halaman terakhir agar proses yang dijalankan ulang dapat dilanjutkan, bukan dimulai dari awal. Hal ini membuat pekerjaan panjang tahan terhadap kegagalan.

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))

Menggabungkan Semuanya

Perulangan pengumpulan untuk penggunaan produksi menggabungkan semua bagian: melakukan paginasi, berhenti sejenak untuk mematuhi batas laju, menampilkan kemajuan, menulis secara bertahap, dan membuat titik pemulihan.

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)

Pemeriksaan Singkat: Paginasi dengan Kursor

Sebuah API mengembalikan bidang "next" yang berupa URL, atau None pada halaman terakhir.

Ringkasan: Mengumpulkan Kumpulan Data Besar

Sekarang Anda dapat mengumpulkan kumpulan data yang mencakup banyak halaman:

  • Paginasi berdasarkan nomor halaman dan kursor (while next_url)
  • time.sleep dan header batas laju untuk menghindari respons 429
  • Jeda bertahap Retry-After saat terkena pembatasan
  • Bilah kemajuan tqdm untuk pekerjaan yang lama
  • Penulisan bertahap dan dapat dilanjutkan untuk ketahanan terhadap kegagalan

Berikutnya: menyimpan data yang telah dikumpulkan secara efisien.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membuat Halaman dan Mengumpulkan Dataset Besar” gratis?

Ya — teks lengkap “Membuat Halaman dan Mengumpulkan Dataset Besar” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn AI with Python, upgrade ke CoddyKit PRO. Kursus Learn AI with Python mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membuat Halaman dan Mengumpulkan Dataset Besar”?

Menangani pembuatan halaman, pola next_cursor, pembatasan laju dengan time.sleep, dan bilah kemajuan. Kamu berlatih Learn AI with Python dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Learn AI with Python?

Tidak diperlukan pengalaman sebelumnya. Learn AI with Python di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Membuat Halaman dan Mengumpulkan Dataset Besar” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn AI with Python ini?

Ya. Setiap pelajaran Learn AI with Python menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar REST API untuk Pengumpulan Data
  2. Membuat Halaman dan Mengumpulkan Dataset Besar
  3. Menyimpan Data yang Dikumpulkan secara Efisien
  4. Bekerja dengan API Data Publik
← Kembali ke Learn AI with Python