Skrap Etsy med Python: Søk, produkter, butikker og anmeldelser

Sist oppdatert April 28, 2026
Skrap Etsy med Python: Søk, produkter, butikker og anmeldelser

Etsy har over 100 millioner aktive annonser, 5,6 millioner selgere og rundt 450 millioner besøk i måneden. Det er enorme mengder offentlig tilgjengelige data om priser, trender, anmeldelser og konkurrenter — og hvis du noen gang har prøvd å samle det manuelt, vet du hvor tungvint det er.

Jeg brukte en gang en hel helg på å katalogisere konkurrentprodukter manuelt til et markedsundersøkelsesprosjekt. Da jeg kom til produkt nummer 30, begynte jeg å stille spørsmål ved alle livsvalgene som hadde ført meg til det regnearket. Poenget er at Etsy-data er utrolig verdifulle for prisanalyse, produktutvikling, nisjeoppdagelse og selgerbenchmarking — men bare hvis du faktisk klarer å hente dem ut i stor skala. Det er det denne guiden handler om: en samlet gjennomgang av hvordan du skraper Etsy med Python på tvers av alle de fire viktigste sidetypene (søkeresultater, produktsider, butikksider og anmeldelser), pluss ærlig veiledning om Etsys anti-bot-forsvar og et kodefritt alternativ for deg som helst vil slippe all scripting.

Hva betyr det å skrape Etsy med Python?

Webskraping betyr, ganske enkelt, å skrive kode som besøker nettsider og automatisk henter ut dataene du bryr deg om — produktnavn, priser, beskrivelser, bilder, vurderinger, anmeldelser, butikkdetaljer — og organiserer dem i et strukturert format som et regneark eller en database.

Python er det foretrukne språket for denne typen arbeid. Det er nybegynnervennlig, har et stort fellesskap og et bredt økosystem av biblioteker laget for skraping: Requests (for å hente sider), BeautifulSoup (for å analysere HTML), Selenium og Playwright (for nettleserautomatisering) og pandas (for å organisere og eksportere data). Python ligger jevnlig blant de tre mest populære språkene i Stack Overflows årlige utviklerundersøkelse, og skrapebibliotekene er blant de mest nedlastede på PyPI.

Når du skraper Etsy, henter du data fra HTML-en (og noen ganger skjult JSON) som Etsy sender til nettleseren din. Typiske data du kan hente ut inkluderer:

  • Produktnavn, priser, beskrivelser, bilder og varianter
  • Selger-/butikkinfo (navn, antall salg, plassering, vurdering)
  • Vurderinger og fullstendig anmeldelsestekst
  • Oppføringer i søkeresultater, kategorier og trendindikatorer

Hvorfor skrape Etsy? Praktiske brukstilfeller som gir avkastning

Å skrape Etsy er ikke bare en teknisk øvelse — det er et konkurransefortrinn. Enten du er selger, produktleder eller dataanalytiker, kan strukturert Etsy-data fort påvirke bunnlinjen din.

etsy_stats_4f1f4d51c3.png

BrukstilfelleHva du skraperHvem som får verdiForretningspåvirkning
Konkurranseanalyse for priserSøkeresultater + produktpriserE-handel, selgereDynamisk prising kan øke inntektene med 5–22 % i snitt
Oppdagelse av nisjer og trenderSøkeresultater, trendende oppføringerGründere, analytikereFang opp trendnisjer tidlig (f.eks. økte søk etter "preppy pajamas" med +1 112 %)
Produktutvikling og forbedringAnmeldelser, produktdetaljerProduktteamEt kjøkkenutstyrsmerke tok tilbake #1 Best Seller på 60 dager ved å bruke sentimentdata fra anmeldelser
SEO og nøkkelordanalyseSøkeresultater, produkttitler/-taggerMarkedsføringsteamIdentifiser nøkkelord med høy etterspørsel og lav konkurranse
Benchmarking av selgereButikksider, salgstallSalgsteam, analytikereBygg kvalifiserte lead-lister til 0,01–0,10 USD per post i stedet for kjøpte lister
Lager- og beholdningsovervåkingProdukttilgjengelighetE-handelReager raskere på konkurrenters lagerendringer

Hver av disse brukstilfellene krever data fra ulike Etsy-sidetypper — og nettopp derfor dekker denne guiden alle fire.

Tidsbesparelse: manuelt vs. automatisert

  • Manuell Etsy-undersøkelse: 30–45 minutter per produkt (50–75 timer for 100 produkter)
  • Automatisert skraping: 100 oppføringer på 2–5 minutter
  • AI-drevet skraping er 30–40 % raskere med opptil 99,5 % nøyaktighet

Etsy API vs. webskraping: Hva bør du velge?

Før du skriver én eneste linje kode, er det verdt å spørre: bør jeg bruke Etsys offisielle API eller skrape nettstedet direkte? Dette er et spørsmål jeg ser stadig i forum, og svaret avhenger av hvilke data du trenger.

Hva Etsy API kan og ikke kan gjøre

Etsy tilbyr API v3 med OAuth 2.0-autentisering. Det fungerer fint for å få tilgang til data fra din egen butikk — oppføringer, ordrer, kvitteringer. Men det har klare begrensninger:

  • Konkurrentdata: API-et er stort sett begrenset til din egen butikk. Du kan ikke hente pris, salg eller oppføringer fra andre selgere.
  • Anmeldelser: Det finnes ikke et robust endepunkt for full anmeldelsestekst i bulk.
  • Ratelimits: 10 forespørsler/sekund, 10 000 forespørsler/dag som standard. Offset-grensen er 12 000 poster.
  • AI/ML-bruk: Avvises eksplisitt i app-gjennomgang.
  • Dokumentasjon: Det er utbredt misnøye i brukerfellesskapet — dårlige eksempler, utdaterte endepunkter og treg support.

Når webskraping er det bedre valget

Hvis du trenger konkurrentinnsikt, sentiment i anmeldelser, analyse på tvers av butikker eller data utover det API-et eksponerer, er skraping veien å gå. Avveiningen er at du møter Etsys anti-bot-forsvar (mer om det nedenfor), og du må investere i oppsett.

Sammenligningstabell: API vs. skraping vs. kodefritt

KriteriumEtsys offisielle APIPython-webskrapingThunderbit (kodefritt)
Tilgang til produktpriser✅ (begrensede felt)✅ Full HTML/JSON-LD✅ AI henter ut alle synlige felt
Anmeldelsesdata❌ Ikke tilgjengelig i bulk✅ Via anmeldelses-endepunkt/HTML✅ Skraping av undersider
Konkurrentbutikkdata❌ Kun egen butikk✅ Alle offentlige butikker✅ Alle offentlige butikker
Krever autentisering✅ OAuth 2.0⚠️ Cookies for innloggede data⚠️ Nettleserskraping for innlogging
Risiko for bot-blokkeringIngenHØY (DataDome)Håndtert (nettleser-nativt)
OppsettstidMiddels (API-nøkler, OAuth)Høy (kode + proxyer)~2 minutter

Hvis du trenger konkurrentdata, anmeldelser eller analyse på tvers av butikker, dekker API-et rett og slett ikke behovet. Det er den ærlige sannheten.

Velg Python-tilnærming før du skriver en eneste linje kode

Et spørsmål jeg stadig ser på Reddit og Stack Overflow: "Skal jeg bruke Requests + BeautifulSoup, Selenium, en proxy-API eller noe helt annet?" Det riktige svaret avhenger av ferdighetsnivå, budsjett og brukstilfelle.

TilnærmingBest forLæringskurveTakler JS?Anti-bot-håndteringKostnad
Requests + BeautifulSoupUtviklere som vil ha full kontrollMiddelsManuell (headere, proxyer)Gratis + proxykostnader
Selenium / PlaywrightJS-tunge sider, innloggingsflytHøyDelvis (nettleserfingeravtrykk)Gratis + proxykostnader
Proxy-API-tjenesterSkala + omgåelse av anti-botMiddels✅ (via API)✅ InnebygdFra 49 USD/mnd
Thunderbit (kodefritt)Ikke-utviklere, rask uthentingSvært lav✅ (nettleser-nativt)✅ (nettlesersesjon)Gratis nivå tilgjengelig

Hvis du vil ha full kontroll og er komfortabel med Python, gå for Requests + BeautifulSoup. Hvis du trenger JS-rendering eller innloggingsflyt, bruk Selenium. Hvis du vil omgå anti-bot i stor skala, vurder en proxy-tjeneste. Og hvis du vil ha Etsy-data uten å skrive eller vedlikeholde kode, er Thunderbit verdt en titt — mer om det senere.

Slik kjemper Etsy tilbake: forstå DataDome anti-bot-beskyttelse

De fleste skrapeguider vil si "bruk bare en proxy" og gå videre. Det er ikke nok for Etsy. Etsy bruker DataDome, et av de mest aggressive anti-bot-systemene på nettet. DataDome sin egen case-studie fremhever Etsy som en suksesshistorie, og sier at skrapere tidligere sto for rundt 1 % av Etsys datakostnader.

etsy_antibot_5431142c9c.png

Hva er DataDome, og hvordan fungerer det?

DataDome sjekker ikke bare IP-adressen din. Det bruker et deteksjonsoppsett med flere lag:

  • TLS-fingeravtrykk (JA3): Python-biblioteket requests har en særegen TLS-signatur som DataDome kan oppdage umiddelbart.
  • Inspeksjon av HTTP-headere/protokoll: Sjekker om nettleserheadere er komplette og konsistente — manglende eller feil rekkefølge på headere er et faresignal.
  • JavaScript-fingeravtrykk (Picasso-protokollen): Kjører JS-utfordringer i nettleseren for å verifisere at du er en ekte bruker.
  • Atferdsbasert maskinlæring: Analyserer 35+ signaler per forespørsel, med 85 000+ modellprofiler per nettsted.
  • IP-omdømmescore: Datasenter-IP-er blir flagget umiddelbart.
  • Cookie-verifisering: datadome-cookien må være til stede og gyldig.

Tegn på at du er blokkert (og hvordan du sjekker det)

En av de vanligste fallgruvene: du får en 200 OK-respons, men HTML-en er egentlig en CAPTCHA-side, ikke dataene du ville ha. Andre tegn:

  • 403 Forbidden-feil
  • Omdirigeringsløkker
  • Responskroppen inneholder et dd JavaScript-objekt eller HTML for skyve-CAPTCHA

Sjekk alltid responskroppen, ikke bare statuskoden. En rask kontroll:

if "captcha" in resp.text.lower() or "datadome" in resp.text.lower():
    print("Blokkert! Fikk en CAPTCHA-side i stedet for data.")

Headere og cookies som reduserer deteksjon

Du kan ikke garantere at du ikke blir blokkert, men realistiske headere og god cookie-håndtering kommer langt:

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/133.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Sec-Ch-Ua": '"Chromium";v="133", "Not-A.Brand";v="99", "Google Chrome";v="133"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Upgrade-Insecure-Requests": "1",
})

Viktig også:

  • Behold cookies mellom forespørsler med requests.Session().
  • Legg inn tilfeldige forsinkelser (2–7 sekunder) mellom forespørsler.
  • Simuler en henvisningskjede: Besøk først forsiden, deretter søk, så produktsider.
  • I stor skala er rotasjon av residential proxyer avgjørende. Datasenter-IP-er blir nesten umiddelbart flagget.

Disse teknikkene reduserer deteksjon, men fjerner den ikke. For skraping med høyt volum trenger du sannsynligvis en proxy-tjeneste eller en nettleserbasert tilnærming.

Slik setter du opp Python-miljøet for å skrape Etsy

Før du begynner:

  • Vanskelighetsgrad: Middels
  • Tidsbruk: Ca. 30–60 minutter (oppsett + første skraping)
  • Det du trenger: Python 3.8+, pip, en kodeditor, Chrome-nettleser (for inspeksjon i DevTools)

Installer avhengigheter

Opprett en prosjektmappe, sett opp et virtuelt miljø og installer bibliotekene du trenger:

mkdir etsy-scraper && cd etsy-scraper
python -m venv venv
source venv/bin/activate  # På Windows: venv\Scripts\activate

pip install requests beautifulsoup4 lxml pandas
  • requests — henter nettsider
  • beautifulsoup4 — analyserer HTML
  • lxml — raskere HTML-parser (valgfritt, men anbefalt)
  • pandas — strukturerer og eksporterer data til CSV/Excel

Hvis du trenger nettleserautomatisering senere (for innlogging eller JS-tunge sider), installer også:

pip install selenium

Forstå sidens struktur før du koder

Her er et tips som sparer masse tid: Etsy legger inn strukturert produktdata i <script type="application/ld+json">-tagger på de fleste sider. Disse JSON-LD-dataene er allerede strukturert — produktnavn, pris, vurdering, bilder — så du slipper å slåss med skjøre CSS-selektorer for hvert eneste felt.

Åpne en hvilken som helst Etsy-produktside, høyreklikk, velg "Vis kilde", og søk etter application/ld+json. Du finner en blokk med @type: Product som inneholder det meste av dataene du trenger. Søkeresultatsider har @type: ItemList.

CSS-selektorer er fortsatt nyttige som reservevalg (for data som ikke ligger i JSON-LD, som fraktinformasjon eller anmeldelsestekst), men JSON-LD bør være første stopp.

Steg 1: Skrap Etsy-søkeresultater med Python

Søkeresultater er utgangspunktet for de fleste Etsy-skrapingsprosjekter — enten du overvåker en nisje, følger konkurrentpriser eller bygger en produktdatabase.

Bygg søke-URL-en

Etsys søke-URL-er følger dette mønsteret:

https://www.etsy.com/search?q={keyword}&ref=pagination&page={page_number}

For forespørsler med flere ord må mellomrom URL-kodes (for eksempel handmade+jewelry eller handmade%20jewelry). Parameteren ref=pagination får forespørselen til å ligne mer på vanlig nettlesernavigasjon.

Andre nyttige parametere: order (most_relevant, price_asc, price_desc, date_desc), min_price, max_price, ship_to, free_shipping=true. Hver side returnerer 48 elementer.

Send forespørselen og analyser HTML-en

import requests
from bs4 import BeautifulSoup
import json
import time
import random

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

def scrape_etsy_search(query, max_pages=3):
    all_products = []
    for page in range(1, max_pages + 1):
        url = f"https://www.etsy.com/search?q={query}&ref=pagination&page={page}"
        resp = requests.get(url, headers=headers, timeout=30)
        if "captcha" in resp.text.lower():
            print(f"Blokkert på side {page}. Prøv med forsinkelser eller proxyer.")
            break
        soup = BeautifulSoup(resp.text, "lxml")
        for script in soup.find_all("script", type="application/ld+json"):
            data = json.loads(script.string)
            if data.get("@type") == "ItemList":
                for item in data.get("itemListElement", []):
                    all_products.append({
                        "name": item.get("name"),
                        "url": item.get("url"),
                        "image": item.get("image"),
                        "price": item.get("offers", {}).get("price"),
                        "currency": item.get("offers", {}).get("priceCurrency"),
                        "position": item.get("position"),
                    })
        time.sleep(random.uniform(2, 5))
    return all_products

Hent annonseringsdata fra JSON-LD

itemListElement-arrayen gir deg navnet på hver oppføring, URL, bilde, pris og valuta. Hvis du også trenger stjernevurderinger eller antall treff (ikke alltid i JSON-LD), kan du falle tilbake på CSS-selektorer:

  • Oppføringskort: .v2-listing-card
  • Tittel: h3.v2-listing-card__title
  • Pris: span.currency-value
  • Lenke: a.listing-link (href)

Håndter paginering

Løp gjennom sidene og legg inn en tilfeldig forsinkelse mellom hver forespørsel. Etsy returnerer vanligvis opptil 20–250 sider, avhengig av søket.

results = scrape_etsy_search("handmade+jewelry", max_pages=5)
print(f"Skrapet {len(results)} produkter.")

For en skraping av 5 sider tok dette omtrent 20 sekunder i min testing — sammenlignet med over 30 minutter med manuell kopier-og-lim.

Steg 2: Skrap Etsy-produktsider med Python

Når du har en liste med produkt-URL-er fra søk, er neste steg å hente detaljert data fra hver enkelt produktside.

Hent produktsiden

def scrape_etsy_product(url):
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "Product":
            offers = data.get("offers", {})
            price = offers.get("price") or offers.get("lowPrice")
            rating_data = data.get("aggregateRating", {})
            return {
                "name": data.get("name"),
                "description": data.get("description", "")[:500],
                "brand": data.get("brand", {}).get("name") if isinstance(data.get("brand"), dict) else data.get("brand"),
                "category": data.get("category"),
                "price": price,
                "currency": offers.get("priceCurrency"),
                "availability": offers.get("availability"),
                "rating": rating_data.get("ratingValue"),
                "review_count": rating_data.get("reviewCount"),
                "images": data.get("image", []),
                "sku": data.get("sku"),
                "material": data.get("material"),
            }
    return None

Håndter prisvariasjoner

Noen produkter har én enkelt offers.price. Andre (med varianter som størrelse eller farge) bruker offers.lowPrice og offers.highPrice. Koden over håndterer begge ved å falle tilbake fra price til lowPrice.

Hent flere felt via CSS-selektorer

For data som ikke ligger i JSON-LD — fraktinformasjon, varianter, fullstendige selgerdetaljer — trenger du CSS-selektorer:

  • Tittel: h1[data-buy-box-listing-title]
  • Varianter: select[data-selector-id] eller div[data-option-set]
  • Frakt: div.wt-text-caption nær fraktseksjonen

Avveiningen er at JSON-LD er renere og mer stabilt når layouten endres. CSS-selektorer er mer skjøre, men dekker flere felt.

Steg 3: Skrap Etsy-butikksider med Python

Dette er delen de fleste konkurrentguider hopper helt over — og den er trolig den mest verdifulle for salgsteam og konkurranseanalytikere.

Bygg butikk-URL-en og hent siden

def scrape_etsy_shop(shop_name):
    url = f"https://www.etsy.com/shop/{shop_name}"
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")

    # Butikkmetadata fra HTML (ikke i JSON-LD)
    sales_el = soup.select_one("div.shop-sales-reviews a")
    rating_el = soup.find("input", {"name": "initial-rating"})
    location_el = soup.select_one("div.shop-location")

    shop_data = {
        "name": shop_name,
        "sales": sales_el.text.strip() if sales_el else None,
        "rating": rating_el["value"] if rating_el else None,
        "location": location_el.text.strip() if location_el else None,
    }

    # Oppføringer fra JSON-LD
    listings = []
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "ItemList":
            for item in data.get("itemListElement", []):
                listings.append({
                    "name": item.get("name"),
                    "url": item.get("url"),
                    "price": item.get("offers", {}).get("price"),
                })
    shop_data["listings"] = listings
    return shop_data

Hva du kan hente fra butikksider

JSON-LD på butikksider er @type: ItemList — det dekker produktoppføringene, men ikke butikkmetadata som antall salg, plassering eller vurdering. For disse trenger du CSS-selektorer:

DatapunktSelektorMerknader
Butikknavnh1 eller meta-tittelVanligvis i sidetittelen
Totalt antall salgdiv.shop-sales-reviews aTekst som "12 345 sales"
StjernevurderingVerdi i input[name="initial-rating"]Tall fra 1–5
Plasseringdiv.shop-locationBy, land
Medlem sidendiv.shop-infoDatotekst

Butikkdata er spesielt verdifulle for å bygge lead-lister, benchmarke konkurrenter eller identifisere toppselgere i en nisje.

Steg 4: Skrap Etsy-anmeldelser med Python

Anmeldelser er blant de mest verdifulle — og vanskeligste — datapunktene på Etsy. Den fulle anmeldelsesteksten, vurderingene og datoene ligger ikke i den første HTML-en; de lastes via et internt API-endepunkt.

Tilnærming 1: Finn Etsys interne API-endepunkt for anmeldelser

Åpne en produktside i Chrome, åpne DevTools (F12), gå til Network-fanen og scroll ned til anmeldelsesdelen. Du vil se en POST-forespørsel til noe som ligner:

https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews

Dette endepunktet returnerer HTML-biter som inneholder anmeldelseskortene. For å bruke det trenger du:

  • listing_id — den numeriske ID-en fra produkt-URL-en
  • shop_id — hent fra produktsidens HTML ved hjelp av regex
  • csrf_nonce — hent fra en <meta>-tagg på siden

Hent ut ID-er og CSRF-token

import re

def get_review_params(product_url):
    resp = requests.get(product_url, headers=headers)
    html = resp.text
    listing_id = product_url.split("/")[-1].split("?")[0]
    shop_id_match = re.search(r'"shopId"\s*:\s*(\d+)', html)
    shop_id = shop_id_match.group(1) if shop_id_match else None
    soup = BeautifulSoup(html, "lxml")
    csrf_meta = soup.find("meta", {"name": "csrf_nonce"})
    csrf = csrf_meta["content"] if csrf_meta else None
    return listing_id, shop_id, csrf

Skrap anmeldelser med paginering

def scrape_reviews(listing_id, shop_id, csrf, max_pages=5):
    session = requests.Session()
    session.headers.update(headers)
    all_reviews = []
    for page in range(1, max_pages + 1):
        payload = {
            "specs": {
                "deep_dive_reviews": {
                    "module_path": "neu/specs/deep_dive_reviews",
                    "listing_id": listing_id,
                    "shop_id": shop_id,
                    "page": page,
                }
            }
        }
        resp = session.post(
            "https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews",
            json=payload,
            headers={"x-csrf-token": csrf, "Content-Type": "application/json"},
        )
        data = resp.json()
        html_fragment = data.get("output", {}).get("deep_dive_reviews", "")
        review_soup = BeautifulSoup(html_fragment, "lxml")
        for card in review_soup.select("div.review-card"):
            rating_el = card.find("input", {"name": "rating"})
            text_el = card.select_one("div.wt-text-body")
            user_el = card.select_one("a[data-review-username]")
            date_el = card.select_one("p.wt-text-body-small")
            all_reviews.append({
                "rating": rating_el["value"] if rating_el else None,
                "text": text_el.text.strip() if text_el else None,
                "reviewer": user_el.text.strip() if user_el else None,
                "date": date_el.text.strip() if date_el else None,
            })
        time.sleep(random.uniform(2, 5))
    return all_reviews

Tilnærming 2: Parse anmeldelser fra HTML (reservevalg)

Hvis API-tilnærmingen feiler (for eksempel på grunn av problemer med CSRF-token), kan du analysere den første siden med anmeldelser direkte fra produktsidens HTML. Begrensningen er at bare den første bunken med anmeldelser ligger i den statiske HTML-en. For mer enn det trenger du API-et eller et nettleserautomatiseringsverktøy som Selenium.

Håndtere data som krever innlogging: skrap din egen Etsy-butikk

Dette er et hull ingen andre guider dekker, men det er et reelt behov — spesielt for Etsy-selgere som vil hente egne ordrer, inntekter og statistikk.

Problemet er at requests alene ikke kan få tilgang til Etsy-dashbordet ditt fordi det ikke har med innloggingscookie-ene dine.

Alternativ 1: Selenium med manuell innlogging og cookie-henting

Bruk Selenium til å åpne en nettleser, logg inn manuelt (eller automatiser innloggingen), og fortsett deretter skrapingen mens du er autentisert:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.etsy.com/signin")
# Logg inn manuelt i nettleservinduet, og deretter:
input("Trykk Enter etter innlogging...")

cookies = driver.get_cookies()
# Bruk nå driver.get() til å navigere til dashbord-sidene dine og skrap dem

Du kan også lagre cookies fra Selenium-økten og gjenbruke dem med requests.Session() for raskere og lettere skraping etter den første innloggingen.

Alternativ 2: Eksporter nettleser-cookies for bruk med Requests

Bruk en nettleserutvidelse (som "EditThisCookie") til å eksportere aktive Etsy-øktcookies, og last dem deretter inn i en Requests-økt:

import requests

session = requests.Session()
# Legg til cookies eksportert fra nettleseren din
session.cookies.set("uaid", "YOUR_UAID_VALUE", domain=".etsy.com")
session.cookies.set("user_prefs", "YOUR_USER_PREFS_VALUE", domain=".etsy.com")
# ... legg til andre øktcookies etter behov

resp = session.get("https://www.etsy.com/your/orders", headers=headers)

Den enkle veien: Thunderbits nettleserskrapingsmodus

Siden Thunderbit kjører i Chrome-nettleseren din, arver den den aktive Etsy-økten din automatisk. Ingen autentiseringskode, ingen cookie-eksport — bare gå til Etsy-dashbordet ditt og skrap. Dette er virkelig nyttig for å hente ut ordrer, inntekter, statistikk og andre selgerdata uten scripting.

Skrap Etsy-dashbordet ditt med AI

Eksport og bruk av skrapede Etsy-data

Lagre til CSV eller JSON

import pandas as pd

df = pd.DataFrame(results)
df.to_csv("etsy_products.csv", index=False, encoding="utf-8")
df.to_json("etsy_products.json", orient="records", indent=2)

Beste praksis: ta med tidsstempler i filnavnene, bruk UTF-8-koding, og håndter spesialtegn i produktnavn (Etsy-selgere elsker emojis og aksenttegn).

Eksporter til Google Sheets, Airtable eller Notion

For Python-brukere lar biblioteker som gspread (Google Sheets) eller Airtable API deg sende data programmessig. Men hvis du bruker Thunderbit, er alle eksportmuligheter — til Google Sheets, Excel, Airtable og Notion — gratis og ett klikk unna. Ingen API-nøkler, ingen OAuth-oppsett.

Hopp over koden: Slik skraper du Etsy med Thunderbit (kodefritt alternativ)

Ikke alle vil skrive Python-skript, vedlikeholde proxy-oppsett eller feilsøke CSS-selektorer klokken 02.00 om natten. Hvis du kjenner deg igjen, er dette måten å hente Etsy-data med Thunderbit.

Installer Thunderbit Chrome-utvidelsen

Gå til Chrome Nettmarked og installer Thunderbit. Opprett en gratis konto — gratisnivået gir deg 6 sider/måned, og alle eksporteringer er gratis.

Bruk AI-forslag til felter på hvilken som helst Etsy-side

Gå til en Etsy-søke-, produkt- eller butikkside. Klikk "AI-forslag til felter" i Thunderbit-sidepanelet. AI-en skanner siden og foreslår kolonner — produktnavn, pris, vurdering, bilder, butikknavn, tagger, fraktinfo. Juster eller legg til kolonner etter behov.

Klikk skrap og eksporter

Klikk "Skrap" for å hente data fra den gjeldende siden. For resultater over flere sider bruker du Thunderbits pagineringsskraping. For å berike en liste med produkt-URL-er med detaljdata fra hver produktside (beskrivelser, anmeldelser, frakt), bruker du skraping av undersider — Thunderbit besøker hver lenke og henter ekstra data automatisk.

Eksporter til Excel, Google Sheets, Airtable eller Notion — helt gratis.

Når Thunderbit er bedre enn Python for Etsy-skraping

  • Ingen proxy-oppsett eller anti-bot-kode nødvendig. Thunderbit kjører i din ekte Chrome-nettleser, så den arver økten din og ser ut som en vanlig bruker for DataDome.
  • AI tilpasser seg layoutendringer automatisk. Ingen ødelagte selektorer å fikse når Etsy oppdaterer frontenden.
  • Supert for engangsundersøkelser, konkurranseanalyse eller teammedlemmer uten teknisk bakgrunn. Hvis du bare trenger et raskt datasett, trenger du ikke et Python-miljø.
  • Skraping av undersider lar deg berike en liste med produkt-URL-er med detaljert data uten å skrive nestede løkker.

For en gjennomgang, sjekk ut Thunderbits YouTube-kanal.

Python vs. Thunderbit: kostnadssammenligning over 6 måneder

FaktorPython, egen løsningThunderbit
Oppsettstid8–20 timerUnder 5 minutter
Kostnad over 6 måneder (inkl. arbeid, proxyer)2 720–9 450 USD90–228 USD
Månedlig vedlikehold4–10+ timer (oppdatering av selektorer = 80 %+ overhead)0–1 timer
Anti-bot-håndteringResidential proxyer til 85x normal kredittkostnadNettleserbasert, omgår DataDome nativt
DatakvalitetHøy (med innsats)Høy (AI-drevet)

Jeg sier ikke at Python er feil valg — hvis du trenger full kontroll, egendefinert logikk eller integrasjon i en større pipeline, er kode fortsatt kongen. Men for de fleste forretningsbrukere som bare trenger Etsy-data, taler avkastningsregnestykket for et kodefritt verktøy.

Juridiske og etiske tips for å skrape Etsy

Jeg får spørsmål om lovlighet i hvert eneste innlegg om skraping, så her er kortversjonen:

  • Etsys bruksvilkår forbyr uttrykkelig automatisert tilgang. Når det er sagt, baserer Etsy seg på teknisk håndheving (DataDome) heller enn søksmål — det finnes ingen kjente Etsy-spesifikke rettssaker mot skrapere.
  • Skrap bare offentlig tilgjengelige data. Ikke omgå autentisering eller få tilgang til private dashbord for selgere du ikke eier.
  • Bruk fornuftig forespørselsrate. 2–7 sekunders forsinkelse mellom forespørsler, og ikke overbelast Etsys servere.
  • Respekter robots.txt. Etsy tillater søkesider, men begrenser enkelte stier.
  • Håndter persondata ansvarlig i henhold til personvernlovgivning som GDPR.
  • Rådfør deg med juridisk ekspertise ved skraping i kommersiell skala.

For mer bakgrunn, se innlegget vårt om juridiske konsekvenser av webskraping — inkludert Meta mot Bright Data (2024), der skraping av offentlig data ble opprettholdt.

Oppsummering: viktige poenger

Vi har vært innom mye her. Her er det jeg vil at du skal sitte igjen med:

  • Etsys strukturerte JSON-LD-data gjør uthenting renere enn rå HTML-parsing for de fleste felt.
  • DataDome er en reell hindring — bruk riktige headere, forsinkelser, cookie-håndtering og residential proxyer for Python-skraping i stor skala.
  • Etsy API-et er begrenset. Hvis du trenger anmeldelser, konkurrentbutikker eller analyse på tvers av selgere, er skraping den praktiske veien.
  • Thunderbit tilbyr et kodefritt alternativ som håndterer anti-bot og autentisering nativt — verdt å prøve hvis du vil ha Etsy-data uten å vedlikeholde skript.
  • Skrap alltid ansvarlig og respekter Etsys vilkår.

Hvis du vil komme i gang uten å skrive kode, prøv Thunderbit gratis. Eller bruk Python-koden fra denne guiden til å bygge din egen tilpassede skraper — og måtte selektorene dine aldri ryke en fredag ettermiddag.

For flere skrapeguider, se vår guide til Etsy-scraper og oversikten over de beste AI-webskraperne.

Prøv Thunderbit for å skrape Etsy-data raskere Get Started Free

Vanlige spørsmål

1. Er det lovlig å skrape Etsy med Python?

Å skrape offentlig tilgjengelige data er generelt tillatt under nyere rettspraksis (f.eks. Meta mot Bright Data, hiQ mot LinkedIn). Likevel forbyr Etsys bruksvilkår automatisert tilgang, så vurder alltid vilkårene og robots.txt før du skraper. Ved storstilt eller kommersiell bruk bør du rådføre deg med juridisk ekspertise.

2. Kan jeg skrape Etsy uten å bli blokkert?

Etsy bruker DataDome, et av de tøffeste anti-bot-systemene som finnes. Realistiske headere, forsinkelser mellom forespørsler, vedvarende cookies og rotasjon av residential proxyer bidrar alle til å redusere blokkeringer. Thunderbits nettleser-nære tilnærming unngår det meste av deteksjonen siden den opererer inne i din ekte Chrome-økt.

3. Har Etsy et API jeg kan bruke i stedet for skraping?

Ja — Etsy tilbyr API v3, men det er stort sett begrenset til data fra din egen butikk og mangler robust tilgang til anmeldelser. De fleste brukstilfeller for konkurranseinnsikt og analyse på tvers av butikker krever skraping.

4. Hvilke Python-biblioteker trenger jeg for å skrape Etsy?

Minst: requests, beautifulsoup4, pandas (for eksport) og json (innebygd). For sider med mye JS eller innloggingskrav, legg til selenium. For raskere HTML-parsing, bruk lxml.

5. Hvordan skraper jeg spesifikt Etsy-anmeldelser?

Etsy-anmeldelser lastes via et internt API-endepunkt (/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews). Du må hente ut listing-ID, shop-ID og CSRF-token fra produktsiden, og deretter sende en POST til endepunktet med paginering. Som reserve kan du parse den første bunken med anmeldelser fra produktsidens HTML — begge metodene går vi gjennom steg for steg i denne guiden.

Les mer

Shuai Guan
Shuai Guan
CEO i Thunderbit | Ekspert på AI-drevet dataautomatisering Shuai Guan er CEO i Thunderbit og utdannet ingeniør fra University of Michigan. Med nærmere ti års erfaring innen teknologi og SaaS-arkitektur, spesialiserer han seg på å gjøre avanserte AI-modeller om til praktiske verktøy for datauttrekk uten koding. På denne bloggen deler han ærlige, velprøvde innsikter om webskraping og automatiseringsstrategier som hjelper deg å bygge smartere, datadrevne arbeidsflyter. Når han ikke optimaliserer dataflyt, bruker han det samme skarpe blikket for detaljer i sin lidenskap for fotografi.
Innholdsfortegnelse

Hent en nettside bare ved å spørre

Si hva du trenger på vanlig norsk. Eller enda bedre, si ingenting i det hele tatt.

Prøv Thunderbit gratis
Hent data med AI
Overfør enkelt data til Google Sheets, Airtable eller Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week