Python Academy · leksjon

Håndtere JavaScript og tiltak mot scraping

Bruk Playwright/Selenium for JS-generert innhold og hastighetsbegrensning.

Leksjon 4 av 413 trinn

Håndtere JavaScript og tiltak mot scraping er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hvorfor JavaScript er viktig

Moderne nettsteder gjengir innhold med JavaScript etter at siden er lastet inn. Statiske HTML-scrapere som requests+BS4 ser skjelettet, ikke den gjengitte DOM-en.

# Static scraper sees:
# <div id="app"></div>

# Rendered page has:
# <div id="app">
#   <h1>Product List</h1>
#   <ul>... dynamically loaded items ...</ul>
# </div>

Playwright for Python

Playwright styrer en ekte nettleser (Chromium, Firefox, WebKit) programmatisk. Det venter på at JavaScript skal kjøre før innholdet hentes ut.

# pip install playwright
# playwright install
import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://example.com")
        title = await page.inner_text("h1")
        print(title)
        await browser.close()

asyncio.run(main())

Vente på elementer

Bruk page.wait_for_selector() til å vente til et element vises i DOM-en før data hentes ut.

from playwright.async_api import async_playwright
import asyncio

async def scrape():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://spa-example.com")
        await page.wait_for_selector(".product-list")
        items = await page.query_selector_all(".product-item")
        texts = [await i.inner_text() for i in items]

Selenium

Selenium er et eldre bibliotek for nettleserautomatisering. Playwright foretrekkes i nye prosjekter på grunn av bedre støtte for asynkron kjøring og høyere hastighet.

# pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://example.com")
elem = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(elem.text)
driver.quit()

Hodeløs modus

Kjør nettlesere i hodeløs modus (uten synlig vindu) for scraping på serversiden.

from playwright.async_api import async_playwright
import asyncio

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)  # no window
        page = await browser.new_page()
        await page.goto("https://example.com")
        html = await page.content()
        await browser.close()

Fange opp nettverksforespørsler

Playwright kan fange opp og mocke nettverksforespørsler, noe som er nyttig for å blokkere annonser og sporere eller hente API-svar direkte.

from playwright.async_api import async_playwright
import asyncio

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()

        await page.route("**/*.{png,jpg,css}", lambda route: route.abort())
        await page.goto("https://example.com")   # loads 3x faster

Frekvensbegrensning og forsinkelser

Etterlign menneskelig atferd: legg inn tilfeldige forsinkelser mellom forespørsler og begrens frekvensen for å unngå å utløse anti-bot-systemer.

import time, random

def polite_scrape(urls):
    for url in urls:
        fetch(url)
        time.sleep(random.uniform(1, 3))  # 1-3 s random delay

Rotering av User-Agent

Roter User-Agent-strenger for å unngå å bli blokkert på grunn av standard-User-Agent-en til scraperen.

import requests, random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
]

def fetch(url):
    return requests.get(url, headers={"User-Agent": random.choice(USER_AGENTS)})

Informasjonskapsler og sesjoner

Bevar sesjonens informasjonskapsler for å holde deg innlogget på tvers av forespørsler. Både requests Session og Playwright håndterer informasjonskapsler automatisk.

import requests

with requests.Session() as s:
    s.post("https://example.com/login", data={"user":"me","pass":"pw"})
    # session cookie kept automatically:
    dashboard = s.get("https://example.com/dashboard")

CAPTCHA og juridiske hensyn

CAPTCHA-er er tiltak mot boter. Det er teknisk mulig å løse dem programmatisk (2captcha, anti-captcha), men det reiser etiske og juridiske spørsmål. Gå alltid gjennom nettstedets robots.txt og bruksvilkår før du scraper.

# Before scraping:
# 1. Check robots.txt: https://example.com/robots.txt
# 2. Review the Terms of Service for "scraping" or "automated access" clauses
# 3. Only scrape public data
# 4. Honour Crawl-delay directives
# 5. Cache responses to avoid repeated hits

Skjermbilder og PDF med Playwright

Playwright kan ta skjermbilder eller skrive ut sider til PDF – nyttig for visuell testing og arkivering.

from playwright.async_api import async_playwright
import asyncio

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://example.com")
        await page.screenshot(path="page.png", full_page=True)
        await page.pdf(path="page.pdf")
        await browser.close()

Hurtigsjekk

Hvorfor mislykkes requests + BeautifulSoup på mange moderne nettsteder?

Oppsummering

Bruk Playwright eller Selenium for JavaScript-genererte sider. Kjør i hodeløs modus på servere. Legg inn forsinkelser og roter User-Agents for å unngå blokkeringer. Fang opp nettverksforespørsler for å blokkere sporere. Respekter alltid robots.txt og bruksvilkårene.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «Håndtere JavaScript og tiltak mot scraping» gratis?

Ja – hele teksten i «Håndtere JavaScript og tiltak mot scraping» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Håndtere JavaScript og tiltak mot scraping»?

Bruk Playwright/Selenium for JS-generert innhold og hastighetsbegrensning. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Håndtere JavaScript og tiltak mot scraping»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. HTTP-forespørsler med requests og httpx
  2. Analysere HTML med BeautifulSoup
  3. Bygge en Scrapy-spider
  4. Håndtere JavaScript og tiltak mot scraping
← Tilbake til Python Academy