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 resultsSayfa 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_dataStatik 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 htmlSonsuz 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 htmlPlaywright 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 productsDoğ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
- Aracılar İçin HTTP İstemcileri: httpx ve requests
- BeautifulSoup ile HTML Ayrıştırma
- Sayfalandırma ve Dinamik İçeriği Ele Alma
- Ölçülü Veri Kazıma Uygulamaları