Sivutuksen ja dynaamisen sisällön käsittely
Seuraavan sivun linkkien seuraaminen ja Playwrightin käyttäminen JavaScriptillä renderöidyillä sivuilla
Sivutuksen ja dynaamisen sisällön käsittely on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Sivutuksen ongelma
Useimmat oikeat verkkosivustot eivät tarjoa kaikkea dataansa yhdellä sivulla. Tulokset jaetaan useille sivuille kuormituksen vähentämiseksi. Agentin on tunnistettava sivutus ja seurattava sitä, jotta se voi kerätä täydelliset aineistot.
Sivutuksessa on kaksi yleistä tapaa: seuraavan sivun linkit ja sivunumeroihin perustuvat URL-mallit.
Seuraavan sivun linkkien tunnistaminen
Monilla sivustoilla on Next-painike tai nuolilinkki. Etsikää ankkuritagi, jolla on rel='next'-attribuutti, tai ankkuritagi, jonka tekstinä on esimerkiksi Next, poimikaa sen href-attribuutti ja seuratkaa linkkiä silmukassa, kunnes sitä ei enää ole.
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 resultsSivunumeroihin perustuvat URL-mallit
Monet API:t ja sivustot käyttävät ennakoitavia URL-malleja: /results?page=1, /results?page=2 ja niin edelleen. Agentti voi käydä nämä suoraan läpi ilman, että DOM:sta tarvitsee etsiä seuraavan sivun linkkiä.
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_itemsKursoripohjainen sivutus
Nykyajan API:t, kuten GitHub, Slack ja Twitter, käyttävät kursoripohjaista sivutusta. Jokainen vastaus sisältää seuraavan sivun kursoritunnisteen. Välittäkää kursori seuraavassa pyynnössä, kunnes se puuttuu tai on null.
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_dataStaattinen ja dynaaminen sisältö
Jotkin sivut lataavat sisällön JavaScriptillä sen jälkeen, kun alkuperäinen HTML on toimitettu. Tavallinen HTTP-asiakasohjelma vastaanottaa vain tyhjän rungon — selain lisää varsinaisen datan siihen JavaScriptillä.
Tällaisilla sivuilla Playwright-työkalun kaltaiset työkalut käyttävät oikeaa selainmoottoria ja odottavat JavaScriptin suorittamista ennen sisällön poimimista.
Playwrightin asentaminen ja importointi
Asentakaa Playwright komennolla pip install playwright ja ladatkaa selain suorittamalla sitten playwright install chromium. Käyttäkää async_playwright()-funktiota asynkronisissa agenttityönkuluissa.
# 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'))Dynaamisen sisällön latautumisen odottaminen
JavaScript-sivut lataavat datan usein asynkronisesti. Määrittäkää Playwright odottamaan tietyn elementin ilmestymistä ennen sisällön poimimista, jotta tarvitsemanne data on varmasti DOM:ssa.
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')]Sivuilla napsauttaminen ja toimiminen
Playwright voi simuloida käyttäjän toimia: napsautuksia, lomakkeiden täyttämistä, vierittämistä ja näppäimistön syötettä. Näin agentti voi siirtyä kirjautumisprosesseissa, käyttää avattavia valikoita tai selata sivuja, joilla sisältö latautuu loputtomasti.
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 htmlLoputtoman vierityksen käsittely
Jotkin sivustot lataavat lisää sisältöä, kun vieritätte alaspäin. Playwright voi simuloida vierittämistä näiden latausten käynnistämiseksi. Vierittäkää toistuvasti ja tarkistakaa joka kerta, ilmestyikö uutta sisältöä.
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 htmlPlaywrightin ja BeautifulSoupin yhdistäminen
Kun Playwright on muodostanut sivun ja palauttanut koko HTML:n, välittäkää se BeautifulSoupille helppoa poimimista varten. Näin yhdistätte molempien kirjastojen vahvuudet.
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 productsOikean työkalun valitseminen
Kaikki sivut eivät tarvitse Playwrightia. Käyttäkää yksinkertaisinta toimivaa menetelmää:
- Staattinen HTML: httpx + BeautifulSoup (nopea, ei selainohjelman aiheuttamaa lisäkuormaa)
- JSON-API sivutuksella: httpx sivu- tai kursori-parametreilla
- JavaScriptillä muodostettu sisältö: Playwright async (hitaampi, mutta tehokkaampi)
Aloittakaa aina staattisesta menetelmästä ja käyttäkää Playwrightia vasta tarvittaessa.
Osaamisen tarkistus: sivutus ja dynaaminen sisältö
Testatkaa sivutuksen ja dynaamisen sisällön käsittelyn ymmärrystänne.
Kertaus: sivutus ja dynaaminen sisältö
Agenttinne osaavat nyt käsitellä verkkosisältöä laajasti:
- Seurata seuraavan sivun linkkejä tai käydä URL-osoitteiden sivuparametrit läpi
- Käyttää kursoritunnisteita nykyajan API:en sivutuksessa
- Käyttää
async_playwright()-funktiota JavaScriptillä muodostetuilla sivuilla - Odottaa elementtejä komennolla
page.wait_for_selector() - Yhdistää Playwrightin BeautifulSoupiin helppoa poimimista varten
Aloittakaa aina yksinkertaisimmasta menetelmästä ja siirtykää Playwrightiin vasta, kun staattinen menetelmä ei riitä.
Opi Tekoälyagentit tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 60
- Oppitunnit
- 239
Usein kysytyt kysymykset
Onko oppitunti ”Sivutuksen ja dynaamisen sisällön käsittely” ilmainen?
Kyllä – oppitunnin ”Sivutuksen ja dynaamisen sisällön käsittely” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Sivutuksen ja dynaamisen sisällön käsittely”?
Seuraavan sivun linkkien seuraaminen ja Playwrightin käyttäminen JavaScriptillä renderöidyillä sivuilla Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Sivutuksen ja dynaamisen sisällön käsittely”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyagentit-oppitunnilla?
Kyllä. Jokainen Tekoälyagentit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Agenttien HTTP-asiakkaat: httpx ja requests
- HTML:n jäsentäminen BeautifulSoupilla
- Sivutuksen ja dynaamisen sisällön käsittely
- Vastuullisen raapinnan käytännöt