0Pricing
AI Agents · Ders

Sayfalandırma ve Dinamik İçeriği Ele Alma

Sonraki sayfa bağlantılarını izleme ve JavaScript ile oluşturulan sayfalar için Playwright kullanma.

Sayfalandırma ve Dinamik İçeriği Ele Alma, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 3. 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, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

Sayfalandırma Sorunu

Gerçek web sitelerinin çoğu tüm verilerini tek bir sayfada sunmaz. Yükü azaltmak için sonuçlar birden fazla sayfaya bölünür. Bir ajanın eksiksiz veri kümeleri toplamak için sayfalandırmayı algılayıp takip etmesi gerekir.

Yaygın iki sayfalandırma biçimi vardır: sonraki sayfa bağlantıları ve sayfa numarası URL kalıpları.

Sonraki Sayfa Bağlantılarını Algılama

Birçok sitede bir 'İleri' düğmesi veya ok bağlantısı bulunur. rel='next' özniteliğine sahip ya da 'İleri' gibi bir metin içeren bağlantı etiketini bulun, href değerini çıkarın ve artık bulunmayana kadar bu işlemi bir döngü içinde sürdürün.

from bs4 import BeautifulSoup
import httpx

def scrape_all_pages(start_url: str) -> list:
    results = []
    url = start_url

    while url:
        response = httpx.get(url, timeout=10.0)
        soup = BeautifulSoup(response.text, 'html.parser')

        # Collect data from this page
        for item in soup.select('.result-item'):
            results.append(item.text.strip())

        # Find the next page link
        next_link = soup.find('a', rel='next') or soup.find('a', string='Next')
        url = next_link.get('href') if next_link else None

    return results

Sayfa Numarası URL Kalıpları

Birçok uygulama programlama arayüzü ve site, öngörülebilir URL kalıpları kullanır: /results?page=1, /results?page=2 vb. Bir ajan, sonraki bağlantı için DOM'u ayrıştırmadan bu sayfalar arasında doğrudan ilerleyebilir.

import httpx

def scrape_paginated_api(base_url: str, max_pages: int = 10) -> list:
    all_items = []

    for page in range(1, max_pages + 1):
        response = httpx.get(
            base_url,
            params={'page': page, 'per_page': 50},
            timeout=10.0
        )
        response.raise_for_status()
        data = response.json()

        items = data.get('results', [])
        if not items:
            break  # No more data

        all_items.extend(items)
        print(f'Page {page}: fetched {len(items)} items')

    return all_items

İmleç Tabanlı Sayfalandırma

Modern uygulama programlama arayüzleri (GitHub, Slack, Twitter) imleç tabanlı sayfalandırma kullanır. Her yanıt, sonraki sayfa için bir imleç belirteci içerir. İmleç bulunmayana veya null olana kadar sonraki istekte bu imleci gönderin.

import httpx

def fetch_with_cursor(url: str, headers: dict) -> list:
    all_data = []
    cursor = None

    while True:
        params = {'cursor': cursor} if cursor else {}
        response = httpx.get(url, headers=headers, params=params, timeout=10.0)
        response.raise_for_status()
        data = response.json()

        all_data.extend(data.get('items', []))

        cursor = data.get('next_cursor')  # None when done
        if not cursor:
            break

    return all_data

Statik ve Dinamik İçerik

Bazı sayfalar, ilk HTML gönderildikten sonra içeriği JavaScript aracılığıyla yükler. Normal bir HTTP istemcisi yalnızca boş kabuğu alır; gerçek veriler tarayıcıda JS tarafından eklenir.

Bu sayfalar için Playwright gibi araçlar gerçek bir tarayıcı motoru çalıştırır ve içerik çıkarılmadan önce JavaScript'in yürütülmesini bekler.

Playwright'ı Kurma ve İçe Aktarma

Playwright'ı pip install playwright ile kurun, ardından tarayıcıyı indirmek için playwright install chromium komutunu çalıştırın. Eşzamansız ajan iş akışları için async_playwright() kullanın.

# Installation (run in terminal):
# pip install playwright
# playwright install chromium

from playwright.async_api import async_playwright
import asyncio

async def fetch_dynamic(url: str) -> str:
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto(url)
        html = await page.content()  # Full rendered HTML
        await browser.close()
    return html

# html = asyncio.run(fetch_dynamic('https://example.com'))

Dinamik İçeriğin Yüklenmesini Bekleme

JavaScript sayfaları genellikle verileri eşzamansız olarak yükler. İçerik çıkarmadan önce belirli bir öğe görünene kadar beklemesi için Playwright'a talimat verin; böylece ihtiyacınız olan verilerin DOM'da gerçekten bulunduğundan emin olun.

from playwright.async_api import async_playwright

async def scrape_dynamic_table(url: str) -> list:
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto(url)

        # Wait for the table to appear in the DOM
        await page.wait_for_selector('table.results', timeout=10000)

        html = await page.content()
        await browser.close()

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, 'html.parser')
    return [td.text for td in soup.select('table.results td')]

Sayfaları Tıklama ve Sayfalarla Etkileşim Kurma

Playwright, tıklama, form doldurma, kaydırma ve klavye girdisi gibi kullanıcı etkileşimlerini benzetebilir. Bu sayede bir ajan giriş akışları, açılır menüler veya sonsuz kaydırmalı sayfalar arasında gezinebilir.

from playwright.async_api import async_playwright

async def click_load_more(url: str) -> str:
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto(url)

        # Click the 'Load More' button
        load_more = page.locator('button:text("Load More")')
        if await load_more.count() > 0:
            await load_more.click()
            await page.wait_for_timeout(2000)  # wait 2s for content

        html = await page.content()
        await browser.close()
    return html

Sonsuz Kaydırmayı Yönetme

Bazı siteler siz aşağı kaydırdıkça daha fazla içerik yükler. Playwright, bu yüklemeleri tetiklemek için kaydırmayı benzetebilir. Tekrarlı olarak kaydırın ve her seferinde yeni içeriğin görünüp görünmediğini kontrol edin.

from playwright.async_api import async_playwright

async def scrape_infinite_scroll(url: str, scroll_count: int = 5) -> str:
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto(url)

        for _ in range(scroll_count):
            await page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
            await page.wait_for_timeout(1500)  # wait for new content

        html = await page.content()
        await browser.close()
    return html

Playwright ile BeautifulSoup'ı Birleştirme

Playwright sayfayı oluşturup tam HTML'yi döndürdükten sonra kolayca veri çıkarmak için bu HTML'yi BeautifulSoup'a aktarın. Böylece her iki kütüphanenin güçlü yönlerini birleştirmiş olursunuz.

from playwright.async_api import async_playwright
from bs4 import BeautifulSoup

async def extract_js_rendered_data(url: str) -> list:
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto(url)
        await page.wait_for_selector('.product-card')
        html = await page.content()
        await browser.close()

    soup = BeautifulSoup(html, 'html.parser')
    products = []
    for card in soup.select('.product-card'):
        products.append({
            'name': card.select_one('.name').text.strip(),
            'price': card.select_one('.price').text.strip()
        })
    return products

Doğru Aracı Seçme

Her sayfa için Playwright gerekmez. İşe yarayan en basit yaklaşımı kullanın:

  • Statik HTML: httpx + BeautifulSoup (hızlıdır, tarayıcı ek yükü yoktur)
  • Sayfalandırmalı JSON uygulama programlama arayüzü: sayfa/imleç parametreleriyle httpx
  • JS ile oluşturulan içerik: eşzamansız Playwright (daha yavaş, ancak daha güçlü)

Her zaman statik yaklaşımla başlayın ve yalnızca gerektiğinde Playwright'a başvurun.

Bilgi Kontrolü: Sayfalandırma ve Dinamik İçerik

Sayfalandırma ve dinamik içerik yönetimi konusundaki anlayışınızı sınayın.

Özet: Sayfalandırma ve Dinamik İçerik

Ajanlarınız artık web içeriğinin tüm çeşitleriyle çalışabilir:

  • Sonraki sayfa bağlantılarını takip edin veya URL sayfa parametreleri arasında ilerleyin
  • Modern uygulama programlama arayüzü sayfalandırması için imleç belirteçlerini kullanın
  • JavaScript ile oluşturulan sayfalar için async_playwright() kullanın
  • page.wait_for_selector() ile öğeleri bekleyin
  • Kolay veri çıkarma için Playwright'ı BeautifulSoup ile birleştirin

Her zaman en basit yaklaşımla başlayın ve yalnızca statik yaklaşım yetersiz kaldığında Playwright'a geçin.

Sıkça Sorulan Sorular

“Sayfalandırma ve Dinamik İçeriği Ele Alma” dersi ücretsiz mi?

Evet — “Sayfalandırma ve Dinamik İçeriği Ele Alma” 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 AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Sayfalandırma ve Dinamik İçeriği Ele Alma” dersinde ne öğreneceğim?

Sonraki sayfa bağlantılarını izleme ve JavaScript ile oluşturulan sayfalar için Playwright kullanma. AI Agents 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.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, 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 3. dersidir.

“Sayfalandırma ve Dinamik İçeriği Ele Alma” 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 AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents 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. Aracılar İçin HTTP İstemcileri: httpx ve requests
  2. BeautifulSoup ile HTML Ayrıştırma
  3. Sayfalandırma ve Dinamik İçeriği Ele Alma
  4. Ölçülü Veri Kazıma Uygulamaları
← AI Agents Sayfasına Dön