Hoppa till innehållet
AI-grafen
E· Universitetdatahantering· ca 60 min· utvecklande· verifierad 2026-09-20

Webbskrapning — teknik och regler

Kunna hämta data från webben ansvarsfullt: robots.txt, takt, villkor.

Förkunskaper

Intuition

Ordningen att pröva, alltid:

  1. Finns ett API? Använd det. Stabilare, snabbare, tillåtet.
  2. Finns en nedladdningsbar dump? Wikipedia, Kolada, SCB och många myndigheter erbjuder det.
  3. Först därefter: skrapa.

Innan du skrapar, kontrollera fyra saker:

  • robots.txt — vad som får hämtas och hur ofta.
  • Användarvillkoren — de kan förbjuda automatiserad hämtning även när robots.txt tillåter.
  • Upphovsrätten till innehållet — att få hämta är inte att få publicera.
  • Personuppgifter — att uppgifter är offentliga gör dem inte fria att samla in i stor skala.

Kod

import time, urllib.robotparser as rp
import httpx
from bs4 import BeautifulSoup

UA = "AI-grafen-bot/1.0 (+https://example.org/om-boten; [email protected])"

class Skrapare:
    def __init__(self, bas, fordrojning=2.0):
        self.bas, self.fordrojning, self.sist = bas, fordrojning, 0.0
        self.robots = rp.RobotFileParser()
        self.robots.set_url(bas.rstrip("/") + "/robots.txt")
        self.robots.read()
        self.klient = httpx.Client(headers={"User-Agent": UA}, timeout=20, follow_redirects=True)

    def hamta(self, url):
        if not self.robots.can_fetch(UA, url):
            raise PermissionError(f"robots.txt tillåter inte {url}")
        vanta = self.fordrojning - (time.time() - self.sist)
        if vanta > 0:
            time.sleep(vanta)                       # en sida varannan sekund
        r = self.klient.get(url)
        self.sist = time.time()
        if r.status_code == 429:
            time.sleep(60); return self.hamta(url)  # respektera bakåttryck
        r.raise_for_status()
        return r.text

s = Skrapare("https://example.org")
soup = BeautifulSoup(s.hamta("https://example.org/artiklar"), "html.parser")

Sex regler som skiljer ansvarsfull hämtning från missbruk:

  1. Identifiera dig i User-Agent med kontaktuppgift.
  2. En begäran åt gången, med paus. Parallell skrapning av samma domän är i praktiken en överbelastningsattack.
  3. Respektera 429 och Retry-After.
  4. Cacha — hämta aldrig samma sida två gånger i onödan.
  5. Hämta bara det du behöver.
  6. Spara källa, tidsstämpel och licens för varje dokument — annars går materialet inte att använda ansvarsfullt sedan.

Det sista är precis vad AI-grafens källregister gör: varje källa har licens, fingeravtryck, hämtningsdatum och ansvarig redaktör.

Behärskning innebär

  • Hämtar data från webben tekniskt korrekt
  • Följer robots.txt, villkor och rimlig takt
  • Vet vad som är tillåtet och vad som inte är det

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser