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
- DAPI:er och HTTPkrävs
- DLicenser och öppna datakrävs
- DReguljära uttryckkrävs
Intuition
Ordningen att pröva, alltid:
- Finns ett API? Använd det. Stabilare, snabbare, tillåtet.
- Finns en nedladdningsbar dump? Wikipedia, Kolada, SCB och många myndigheter erbjuder det.
- 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:
- Identifiera dig i User-Agent med kontaktuppgift.
- En begäran åt gången, med paus. Parallell skrapning av samma domän är i praktiken en överbelastningsattack.
- Respektera 429 och Retry-After.
- Cacha — hämta aldrig samma sida två gånger i onödan.
- Hämta bara det du behöver.
- 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
- Creative Commons — licenser — CC BY 4.0
- IMY — Integritetsskyddsmyndigheten — myndighetsmaterial