Scrape Etsyä Pythonilla: haku, tuotteet, kaupat ja arvostelut

Viimeksi päivitetty April 28, 2026
Scrape Etsyä Pythonilla: haku, tuotteet, kaupat ja arvostelut

Etsyssä on yli 100 miljoonaa aktiivista ilmoitusta, 5,6 miljoonaa myyjää ja noin 450 miljoonaa kuukausittaista käyntiä. Siellä on valtavasti julkisesti saatavilla olevaa dataa hinnoista, trendeistä, arvosteluista ja kilpailijoista — ja jos olet joskus yrittänyt kerätä sitä käsin, tiedät varmasti, kuinka työlästä se on.

Aloin kerran viettää viikonloppua yrittäen koota kilpailijoiden tuotteita manuaalisesti markkinatutkimusprojektia varten. Tuotteen numero 30 kohdalla kyseenalaistin jokaisen elämäni valinnan, joka oli johtanut minut siihen taulukkoon. Etsy-data on kuitenkin todella arvokasta hinnoitteluanalyysiin, tuotekehitykseen, niche-löydöksiin ja myyjien vertailuun — mutta vain, jos saat sitä oikeasti kerättyä skaalassa. Tämän oppaan tarkoitus on juuri se: yksi kokonaisvaltainen tutoriaali, joka näyttää, miten Etsyä scrapeataan Pythonilla kaikista neljästä tärkeimmästä sivutyypistä (hakutulokset, tuotesivut, kauppasivut ja arvostelut), sekä rehellinen katsaus Etsyn botintorjuntaan ja kooditon vaihtoehto niille, jotka haluavat ohittaa skriptauksen kokonaan.

Mitä tarkoittaa Etsyä scrapeta Pythonilla?

Web scraping tarkoittaa yksinkertaisesti sitä, että kirjoitetaan koodia, joka vierailee verkkosivuilla ja poimii automaattisesti halutun datan — tuotteen nimet, hinnat, kuvaukset, kuvat, arviot, arvostelut, kaupan tiedot — ja järjestää sen taulukon tai tietokannan kaltaiseen rakenteeseen.

Python on tämänkaltaiseen työhön käytännössä oletuskieli. Se on aloittelijaystävällinen, sillä on valtava yhteisö, ja sen ympärille on rakentunut laaja scraping-kirjastoekosysteemi: Requests (sivujen hakemiseen), BeautifulSoup (HTML:n jäsentämiseen), Selenium ja Playwright (selaimen automatisointiin) sekä pandas (datan järjestämiseen ja vientiin). Python sijoittuu jatkuvasti Stack Overflow’n vuotuisessa kehittäjäkyselyssä suosituimpien kielten top 3:een, ja sen scraping-kirjastot kuuluvat PyPI:n ladatuimpien joukkoon.

Kun scrapetat Etsyä, poimit dataa HTML:stä (ja joskus piilotetusta JSON:sta), jonka Etsy toimittaa selaimellesi. Poimittavaa dataa voivat olla esimerkiksi:

  • Tuotteiden nimet, hinnat, kuvaukset, kuvat ja variaatiot
  • Myyjän/kaupan tiedot (nimi, myyntimäärä, sijainti, arvosana)
  • Arviot ja koko arvosteluteksti
  • Hakutulosten listaukset, kategoriat ja trendisignaalit

Miksi scrapeta Etsyä? Käytännön liiketoimintatapaukset, jotka tuovat tuottoa

Etsyn scraping ei ole vain tekninen harjoitus — se on kilpailuetu. Olitpa myyjä, tuotepäällikkö tai data-analyytikko, jäsennelty Etsy-data käden ulottuvilla voi vaikuttaa suoraan tulokseesi.

etsy_stats_4f1f4d51c3.png

KäyttötapausMitä scrapetatKenelle hyötyäLiiketoimintavaikutus
Kilpailijoiden hinnoitteluanalyysiHakutulokset + tuotteiden hinnatVerkkokauppa, myyjätDynaaminen hinnoittelu voi nostaa liikevaihtoa keskimäärin 5–22%
Niche- ja trendien löytäminenHakutulokset, trendaavat listauksetPerustajat, analyytikotTrendaavat markkinaraot havaitaan ajoissa (esim. "preppy pajamas" -haun kasvu oli +1 112%)
Tuotekehitys ja parannuksetArvostelut, tuotetiedotTuotetiimitYksi keittiötarvikebrändi nousi takaisin ykköseksi Best Seller -listalla 60 päivässä hyödyntämällä arvostelujen sentimenttidataa
SEO ja avainsanatutkimusHakutulokset, tuotteen otsikot/tunnisteetMarkkinointitiimitTunnista suuren kysynnän ja pienen kilpailun avainsanat
Myyjien vertailuKauppasivut, myyntimäärätMyyntitiimit, analyytikotRakenna laadukkaita liidilistoja hintaan 0,01–0,10 $/tieto verrattuna ostettuihin listoihin
Varaston ja saatavuuden seurantaTuotteen saatavuusVerkkokauppaReagoi nopeammin kilpailijan varastotilanteen muutoksiin

Jokainen näistä käyttötapauksista edellyttää dataa eri Etsy-sivutyypeistä — siksi tämä opas kattaa ne kaikki neljä.

Ajansäästö: manuaalinen vs. automatisoitu

  • Manuaalinen Etsy-tutkimus: 30–45 minuuttia per tuote (50–75 tuntia 100 tuotteelle)
  • Automatisoitu scraping: 100 listauksen kerääminen 2–5 minuutissa
  • AI-pohjainen scraping on 30–40% nopeampaa ja tarkkuus voi olla jopa 99,5%

Etsy API vs. web scraping: kumpi kannattaa valita?

Ennen kuin kirjoitat riviäkään koodia, kannattaa kysyä: pitäisikö käyttää Etsyn virallista API:a vai scrapeta sivusto suoraan? Tämä on kysymys, johon törmään jatkuvasti foorumeilla, ja vastaus riippuu siitä, mitä dataa tarvitset.

Mitä Etsy API voi ja ei voi tehdä

Etsy tarjoaa API v3:n OAuth 2.0 -autentikoinnilla. Se toimii oman kauppasi datan — listaukset, tilaukset, kuitit — käyttöön. Mutta siinä on todellisia rajoitteita:

  • Kilpailijatieto: API on pääosin rajoitettu omaan kauppaasi. Et voi hakea toisen myyjän hintoja, myyntiä tai listauksia.
  • Arvostelut: Koko arvostelutekstille ei ole kunnollista erärajapintaa.
  • Pyyntörajat: Oletuksena 10 pyyntöä/sekunti ja 10 000 pyyntöä/päivä. Offset-raja on 12 000 tietuetta.
  • AI/ML-käyttö: Hylätään nimenomaisesti sovellusarvioinnissa.
  • Dokumentaatio: Yhteisön valitukset ovat laajasti tunnettuja — heikot esimerkit, vanhentuneet endpointit, hidas tuki.

Milloin web scraping on parempi vaihtoehto

Jos tarvitset kilpailija-analyysiä, arvostelujen sentimenttiä, kauppojen välistä vertailua tai dataa, jota API ei paljasta, scraping on oikea tie. Vaihtokauppana kohtaat Etsyn botintorjunnan (lisää siitä alempana), ja joudut panostamaan käyttöönottoon.

Vertailutaulukko: API vs. scraping vs. kooditon ratkaisu

KriteeriEtsyn virallinen APIPython-web scrapingThunderbit (kooditon)
Pääsy tuotteen hintoihin✅ (rajatut kentät)✅ Täysi HTML/JSON-LD✅ AI poimii kaikki näkyvät kentät
Arvosteludata❌ Ei saatavilla eräajona✅ Arvostelujen endpointin/HTML:n kautta✅ Alasivujen scraping
Kilpailijoiden kauppadata❌ Vain oma kauppa✅ Mikä tahansa julkinen kauppa✅ Mikä tahansa julkinen kauppa
Autentikointi tarvitaan✅ OAuth 2.0⚠️ Evästeet kirjautuneelle datalle⚠️ Selaimen kautta tehtävä scraping kirjautumista varten
Botintorjunnan riskiEi oleKORKEA (DataDome)Hoidetaan (selaimessa natiivisti)
KäyttöönottoaikaKeskitaso (API-avaimet, OAuth)Korkea (koodi + proxyt)~2 minuuttia

Jos tarvitset kilpailijatietoa, arvosteluja tai kauppojen välistä analyysiä, API ei yksinkertaisesti kata sitä. Se on rehellinen tilanne.

Valitse Python-scraping-tapa ennen kuin kirjoitat yhtäkään riviä koodia

Redditissä ja Stack Overflow’ssa toistuu koko ajan yksi kysymys: "Pitäisikö käyttää Requests + BeautifulSoupia, Seleniumia, proxy API:a vai jotain ihan muuta?" Oikea vastaus riippuu osaamistasostasi, budjetistasi ja käyttötapauksestasi.

LähestymistapaParas kohdeOppimiskäyräKäsittelee JS:n?BotintorjuntaKustannus
Requests + BeautifulSoupKehittäjät, jotka haluavat täyden hallinnanKeskitasoManuaalinen (headerit, proxyt)Ilmainen + proxykulut
Selenium / PlaywrightJS-raskaat sivut, kirjautumisetKorkeaOsittain (selaimen fingerprint)Ilmainen + proxykulut
Proxy API -palvelutSkaala + botin kiertoKeskitaso✅ (API:n kautta)✅ SisäänrakennettuAlkaen $49/kk
Thunderbit (kooditon)Ei-kehittäjät, nopea poimintaErittäin matala✅ (selaimessa natiivisti)✅ (selaintoiminto)Ilmainen taso saatavilla

Jos haluat täyden hallinnan ja Python tuntuu luontevalta, valitse Requests + BeautifulSoup. Jos tarvitset JS-renderöintiä tai kirjautumisvirtoja, käytä Selenioua. Jos haluat kiertää botintorjunnan skaalassa, harkitse proxy-palvelua. Ja jos haluat Etsy-dataa ilman koodin kirjoittamista tai ylläpitoa, Thunderbit on ehdottomasti tutustumisen arvoinen — lisää siitä myöhemmin.

Miten Etsy torjuu scrapingin: DataDome-botintorjunnan ymmärtäminen

Useimmat scraping-oppaat sanovat vain "käytä proxya" ja jatkavat eteenpäin. Etsyn kohdalla se ei riitä. Etsy käyttää DataDomea, yhtä aggressiivisimmista botintorjuntajärjestelmistä verkossa. DataDomen oma case study nostaa Etsyn menestystarinaksi ja kertoo, että scraperit vastasivat aiemmin noin 1 %:sta Etsyn laskentakuluista.

etsy_antibot_5431142c9c.png

Mikä on DataDome ja miten se toimii?

DataDome ei tarkista vain IP-osoitettasi. Se käyttää monikerroksista tunnistuspinon:

  • TLS-fingerprinting (JA3): Pythonin requests-kirjastolla on tunnistettava TLS-sormenjälki, jonka DataDome huomaa heti.
  • HTTP-headerien/protokollan tarkistus: Tarkistaa täydelliset ja johdonmukaiset selaimen headerit — puuttuvat tai väärässä järjestyksessä olevat headerit ovat hälytysmerkki.
  • JavaScript-fingerprinting (Picasso-protokolla): Ajaa JS-haasteita selaimessa varmistaakseen, että olet oikea käyttäjä.
  • Käyttäytymiseen perustuva ML: Analysoi yli 35 signaalia per pyyntö, ja sivustokohtaisia malleja on yli 85 000.
  • IP:n maineen arviointi: Datacenter-IP:t liputetaan heti.
  • Evästeiden tarkistus: datadome-evästeen täytyy olla olemassa ja voimassa.

Merkit siitä, että sinut on estetty (ja miten tarkistat sen)

Yksi yleisimmistä kompastuskivistä: saat 200 OK -vastauksen, mutta HTML onkin CAPTCHA-sivu eikä haluamasi data. Muita merkkejä:

  • 403 Forbidden -virheet
  • Uudelleenohjausloopit
  • Vastaus sisältää dd-JavaScript-objektin tai liukusäätimeen perustuvan CAPTCHA:n HTML:n

Tarkista aina vastausrunko, älä pelkkää tilakoodia. Nopea tarkistus:

if "captcha" in resp.text.lower() or "datadome" in resp.text.lower():
    print("Estetty! Sain datan sijaan CAPTCHA-sivun.")

Headerit ja evästeet, jotka vähentävät tunnistusta

Et voi taata, ettet joudu estetyksi, mutta realistiset headerit ja evästeiden hallinta auttavat paljon:

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",
})

Myös tärkeää:

  • Säilytä evästeet pyyntöjen välillä käyttämällä requests.Session()-oliota.
  • Lisää satunnaisia viiveitä (2–7 sekuntia) pyyntöjen väliin.
  • Simuloi referrer-ketjua: käy ensin etusivulla, sitten haussa ja vasta sen jälkeen tuotesivuilla.
  • Skaalassa residential proxy -kierto on välttämätön. Datacenter-IP:t liputetaan lähes heti.

Nämä keinot vähentävät tunnistusta mutta eivät poista sitä. Suurivolyymiseen scrapingiin tarvitset todennäköisesti proxy-palvelun tai selainpohjaisen lähestymistavan.

Python-ympäristön asentaminen Etsyn scrapingia varten

Ennen kuin aloitat:

  • Vaativuustaso: Keskitaso
  • Tarvittava aika: ~30–60 minuuttia (asennus + ensimmäinen scrape)
  • Tarvitset: Python 3.8+, pip, koodieditori, Chrome-selain (DevTools-tarkastelua varten)

Asenna riippuvuudet

Luo projektikansio, määritä virtuaaliympäristö ja asenna tarvitsemasi kirjastot:

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

pip install requests beautifulsoup4 lxml pandas
  • requests — hakee verkkosivuja
  • beautifulsoup4 — jäsentää HTML:n
  • lxml — nopeampi HTML-jäsennin (valinnainen mutta suositeltava)
  • pandas — jäsentää datan ja vie sen CSV/Excel-muotoon

Jos tarvitset myöhemmin selaimen automaatiota (kirjautumiseen tai JS-raskaisiin sivuihin), asenna myös:

pip install selenium

Ymmärrä Etsyn sivurakenne ennen kuin kirjoitat koodia

Tässä on vinkki, joka säästää valtavasti aikaa: Etsy upottaa jäsenneltyä tuotetietoa useimmille sivuille <script type="application/ld+json"> -tageihin. Tämä JSON-LD-data on jo valmiiksi organisoitu — tuotteen nimi, hinta, arvosana, kuvat — joten sinun ei tarvitse taistella hauraiden CSS-selektoreiden kanssa jokaisesta kentästä.

Avaa mikä tahansa Etsy-tuotesivu, napsauta hiiren oikealla, valitse "View Page Source", ja etsi application/ld+json. Löydät lohkon, jossa on @type: Product ja suurin osa tarvitsemastasi datasta. Hakutulossivuilla on @type: ItemList.

CSS-selektoreista on silti hyötyä vararatkaisuna (datalle, joka ei ole JSON-LD:ssä, kuten toimitustiedot tai arvosteluteksti), mutta JSON-LD:n pitäisi olla ensimmäinen pysähdyspaikka.

Vaihe 1: Scrape Etsy-hakutulokset Pythonilla

Hakutulokset ovat useimpien Etsy-scraping-projektien lähtöpiste — olipa tarkoituksena niche-seuranta, kilpailijahintojen tarkkailu tai tuotetietokannan rakentaminen.

Rakenna haku-URL

Etsyn haku-URL:t seuraavat tätä mallia:

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

Usean sanan hauissa välit kannattaa URL-koodata (esim. handmade+jewelry tai handmade%20jewelry). Parametri ref=pagination saa pyynnön näyttämään enemmän oikealta selaimella tehdystä navigoinnilta.

Muita hyödyllisiä parametreja ovat: order (most_relevant, price_asc, price_desc, date_desc), min_price, max_price, ship_to, free_shipping=true. Jokainen sivu palauttaa 48 kohdetta.

Lähetä pyyntö ja jäsennä HTML

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"Estetty sivulla {page}. Yritä lisätä viiveitä tai käyttää proxya.")
            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

Poimi listauksen data JSON-LD:stä

itemListElement-taulukko antaa jokaisesta listauksesta nimen, URL:n, kuvan, hinnan ja valuutan. Jos tarvitset myös tähtiarvostelut tai tulosten määrän (ei aina JSON-LD:ssä), käytä CSS-selektoreita:

  • Listauskortti: .v2-listing-card
  • Otsikko: h3.v2-listing-card__title
  • Hinta: span.currency-value
  • Linkki: a.listing-link (href)

Käsittele sivutus

Silmukoi sivujen läpi ja lisää satunnainen viive jokaisen pyynnön väliin. Etsy palauttaa yleensä jopa 20–250 sivua riippuen hausta.

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

5 sivun scraping vei testissäni noin 20 sekuntia — verrattuna yli 30 minuutin manuaaliseen copy-pasteen.

Vaihe 2: Scrape Etsy-tuotesivut Pythonilla

Kun sinulla on lista tuote-URL:eista hausta, seuraava askel on poimia yksityiskohtaiset tiedot jokaiselta listaus-sivulta.

Hae tuotesivu

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

Käsittele hintavariaatiot

Joissakin tuotteissa on yksi offers.price. Toisissa (esimerkiksi koon tai värin variaatioilla) käytetään offers.lowPrice ja offers.highPrice -kenttiä. Yllä oleva koodi käsittelee molemmat, koska se siirtyy price-kentästä lowPrice:iin.

Jäsennä lisäkentät CSS-selektoreilla

Datalle, jota ei ole JSON-LD:ssä — toimitustiedot, variaatiot, täydelliset myyjän tiedot — tarvitset CSS-selektoreita:

  • Otsikko: h1[data-buy-box-listing-title]
  • Variaatiot: select[data-selector-id] tai div[data-option-set]
  • Toimitus: div.wt-text-caption läheltä toimitusosiota

Vaihtokauppa on selvä: JSON-LD on siistimpi ja vakaampi sivuasettelun muutoksia vastaan. CSS-selektorit ovat hauraampia, mutta kattavat enemmän kenttiä.

Vaihe 3: Scrape Etsy-kauppasivut Pythonilla

Tämä on se osio, jonka useimmat kilpailijaoppaat jättävät kokonaan väliin — ja se on todennäköisesti arvokkain myyntitiimeille ja kilpailija-analyytikoille.

Rakenna kaupan URL ja hae sivu

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")

    # Kaupan metadata HTML:stä (ei JSON-LD:ssä)
    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,
    }

    # Listaukset JSON-LD:stä
    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

Mitä voit poimia kauppasivuilta

Kauppasivujen JSON-LD on @type: ItemList — se kattaa tuotelistaukset, mutta ei kaupan tason metadataa, kuten myyntimäärää, sijaintia tai arvosanaa. Niihin tarvitset CSS-selektoreita:

TietopisteSelektoriHuomiot
Kaupan nimih1 tai meta titleYleensä sivun otsikossa
Kokonaismyyntidiv.shop-sales-reviews aTeksti kuten "12,345 sales"
Tähtiarvosanainput[name="initial-rating"] valueNumeraalinen 1–5
Sijaintidiv.shop-locationKaupunki, maa
Jäsenenä alkaendiv.shop-infoPäivämääräteksti

Kauppadata on erityisen arvokasta liidilistoja rakennettaessa, kilpailijoita vertailtaessa tai niche-markkinoiden huippumyyjiä etsittäessä.

Vaihe 4: Scrape Etsy-arvostelut Pythonilla

Arvostelut ovat Etsyn arvokkaimpia — ja hankalimpia — datapisteitä. Täysi arvosteluteksti, arviot ja päivämäärät eivät ole alkuperäisessä sivu-HTML:ssä; ne latautuvat sisäisen API-endpointin kautta.

Tapa 1: Etsyn sisäisen arvostelu-API:n endpointin löytäminen

Avaa tuotesivu Chromessa, avaa DevTools (F12), siirry Network-välilehdelle ja rullaa alas arvosteluosioon. Näet POST-pyynnön osoitteeseen, joka näyttää esimerkiksi tältä:

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

Tämä endpoint palauttaa HTML-fragmentteja, jotka sisältävät arvostelukortit. Sen käyttämiseen tarvitset:

  • listing_id — tuotteen URL:sta löytyvä numeerinen tunniste
  • shop_id — poimi tuotesivun HTML:stä regexillä
  • csrf_nonce — poimi sivun <meta>-tagista

Poimi ID:t ja 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

Scrapeta arvostelut sivutuksella

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

Tapa 2: jäsennä arvostelut HTML:stä (vararatkaisu)

Jos API-lähestymistapa epäonnistuu (esim. CSRF-token-ongelmien vuoksi), voit jäsentää ensimmäisen arvosteluerän suoraan tuotesivun HTML:stä. Rajoitus on selvä: vain ensimmäinen arvostelujoukko löytyy staattisesta HTML:stä. Enemmän dataa varten tarvitset API:n tai selaimen automatisointityökalun, kuten Seleniumin.

Kirjautumista vaativan datan käsittely: oman Etsy-kaupan scraping

Tämä on aukko, jota yksikään muu opas ei kunnolla käsittele, mutta kyseessä on todellinen tarve — erityisesti Etsy-myyjille, jotka haluavat poimia omat tilauksensa, liikevaihtonsa ja tilastonsa.

Ongelma: pelkkä requests ei pääse Etsy-dashboardillesi, koska se ei kanna kirjautumisen evästesessiota.

Vaihtoehto 1: Selenium, manuaalinen kirjautuminen ja evästeiden talteenotto

Käytä Selenioua avaamaan selain, kirjaudu sisään manuaalisesti (tai automatisoi kirjautuminen), ja jatka sitten scrapingia autentikoituneena:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.etsy.com/signin")
# Kirjaudu sisään manuaalisesti selainikkunassa, ja sitten:
input("Paina Enter, kun olet kirjautunut sisään...")

cookies = driver.get_cookies()
# Nyt voit käyttää driver.get():iä siirtyäksesi dashboard-sivuille ja scrapeta

Voit myös tallentaa Selenium-istunnon evästeet ja käyttää niitä uudelleen requests.Session()-olion kanssa, jolloin scraping on nopeampaa ja kevyempää alkuperäisen kirjautumisen jälkeen.

Vaihtoehto 2: vie selaimen evästeet Requestsia varten

Käytä selainlaajennusta (kuten "EditThisCookie") viedäksesi aktiivisen Etsy-istuntosi evästeet ja lataa ne sitten Requests-istuntoon:

import requests

session = requests.Session()
# Lisää selaimesta viedyt evästeet
session.cookies.set("uaid", "YOUR_UAID_VALUE", domain=".etsy.com")
session.cookies.set("user_prefs", "YOUR_USER_PREFS_VALUE", domain=".etsy.com")
# ... lisää muut istuntoevästeet tarpeen mukaan

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

Helppo tie: Thunderbitin selauspohjainen scraping-tila

Koska Thunderbit toimii suoraan Chrome-selaimessasi, se perii aktiivisen Etsy-istuntosi automaattisesti. Ei autentikointikoodia, ei evästeiden vientiä — avaa vain Etsy-dashboardisi ja scrapea. Tämä on aidosti hyödyllistä tilausten, liikevaihdon, tilastojen ja muun myyjäkohtaisen datan poimimiseen ilman skriptauksen tarvetta.

Scrape Etsy-dashboardisi AI:lla

Scrapeatun Etsy-datan vienti ja käyttö

Tallenna CSV- tai JSON-muotoon

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)

Parhaat käytännöt: lisää aikaleimat tiedostonimiin, käytä UTF-8-merkistökoodausta ja käsittele erikoismerkit tuotteen nimissä oikein (Etsy-myyjät rakastavat emojeita ja aksenttimerkkejä).

Vie Google Sheetsiin, Airtableen tai Notioniin

Python-käyttäjille kirjastot kuten gspread (Google Sheets) tai Airtable API mahdollistavat datan lähettämisen ohjelmallisesti. Mutta jos käytät Thunderbitia, kaikki viennit — Google Sheetsiin, Exceliin, Airtableen ja Notioniin — ovat ilmaisia ja tapahtuvat yhdellä klikkauksella. Ei API-avaimia, ei OAuth-asetuksia.

Ohita koodi: miten scrapeta Etsyä Thunderbitillä (kooditon vaihtoehto)

Kaikki eivät halua kirjoittaa Python-skriptejä, ylläpitää proxy-asetuksia tai debugata CSS-selektoreita kello kahdelta yöllä. Jos tunnet itsesi tästä, tässä on tapa hakea Etsy-dataa Thunderbitilla.

Asenna Thunderbit Chrome -laajennus

Siirry Chrome Web Storeen ja asenna Thunderbit. Luo ilmainen tili — ilmaisella tasolla saat 6 sivua/kk, ja kaikki viennit ovat ilmaisia.

Käytä AI Suggest Fields -toimintoa millä tahansa Etsy-sivulla

Siirry Etsy-hakuun, tuotesivulle tai kauppasivulle. Klikkaa Thunderbitin sivupalkista "AI Suggest Fields". AI skannaa sivun ja ehdottaa sarakkeita — tuotteen nimi, hinta, arvosana, kuvat, kaupan nimi, tagit, toimitustiedot. Säädä tai lisää sarakkeita tarpeen mukaan.

Klikkaa Scrape ja vie data

Klikkaa "Scrape" poimiaksesi datan nykyiseltä sivulta. Monisivuisissa tuloksissa käytä Thunderbitin sivutusscrapingia. Jos haluat rikastaa listaa tuote-URL:eilla lisäämällä kustakin tuotesivusta yksityiskohtia (kuvaukset, arvostelut, toimitustiedot), käytä alasivuscrapingia — Thunderbit käy automaattisesti jokaisessa linkissä ja poimii lisädatan.

Vie Exceliin, Google Sheetsiin, Airtableen tai Notioniin — kaikki ilmaiseksi.

Milloin Thunderbit päihittää Pythonin Etsy-scrapingissa

  • Ei proxyn asennusta eikä botintorjuntakoodia tarvita. Thunderbit toimii oikeassa Chrome-selaimessasi, joten se perii istuntosi ja näyttää DataDomelle normaalilta käyttäjältä.
  • AI mukautuu asettelumuutoksiin automaattisesti. Ei rikkoutuneita selektoreita korjattavaksi, kun Etsy päivittää käyttöliittymäänsä.
  • Loistava kertaluontoiseen tutkimukseen, kilpailija-analyysiin tai ei-teknisille tiimin jäsenille. Jos tarvitset vain nopean datasarjan, et tarvitse Python-ympäristöä.
  • Alasivuscraping mahdollistaa tuote-URL-listan rikastamisen yksityiskohtaisella datalla ilman sisäkkäisiä silmukoita.

Kävelykierrosta varten kannattaa katsoa Thunderbitin YouTube-kanava.

Python vs. Thunderbit: 6 kuukauden kustannusvertailu

TekijäPython DIYThunderbit
Käyttöönottoaika8–20 tuntiaAlle 5 minuuttia
6 kk kustannus (sis. työ, proxyt)$2,720–9,450$90–228
Kuukausittainen ylläpito4–10+ tuntia (selektoripäivitykset = 80%+ lisätyö)0–1 tuntia
Botintorjunnan käsittelyResidential-proxyt 85x normaalilla luottokustannuksellaSelaimessa toimiva, ohittaa DataDomen natiivisti
Datan laatuKorkea (vaatii vaivaa)Korkea (AI-vetoinen)

En sano, että Python olisi väärä valinta — jos tarvitset täyttä hallintaa, mukautettua logiikkaa tai integraation laajempaan putkeen, koodi on kuningas. Mutta useimmille liiketoimintakäyttäjille, jotka tarvitsevat vain Etsy-dataa, ROI-puoli suosii kooditonta työkalua.

Oikeudelliset ja eettiset vinkit Etsyn scrapingiin

Minulta kysytään jokaisessa scraping-julkaisussa laillisuudesta, joten tässä lyhyt versio:

  • Etsyn käyttöehdot kieltävät nimenomaisesti automaattisen käytön. Etsy kuitenkin nojaa tekniseen valvontaan (DataDome) eikä oikeudenkäynteihin — tunnettuja Etsy-kohtaisia oikeusjuttuja scrappaajia vastaan ei ole.
  • Scrapeta vain julkisesti saatavilla olevaa dataa. Älä kierrä autentikointia tai käytä yksityisiä myyjädashboardeja, jotka eivät kuulu sinulle.
  • Käytä kohtuullisia pyyntömääriä. 2–7 sekunnin viiveet pyyntöjen välillä, äläkä kuormita Etsyn palvelimia.
  • Noudata robots.txt:ää. Etsy sallii hakusivut, mutta rajoittaa joitakin polkuja.
  • Käsittele henkilötietoja vastuullisesti esimerkiksi GDPR:n kaltaisten tietosuojalakien mukaisesti.
  • Konsultoi lakiasiantuntijaa kaupallisen mittakaavan scraping-projekteissa.

Lisätietoja löydät postauksestamme web scrapingin oikeudellisista vaikutuksista — mukaan lukien Meta v. Bright Data (2024), jossa julkisen datan scraping hyväksyttiin.

Yhteenveto: keskeiset opit

Kävimme tässä läpi paljon. Tässä tärkeimmät asiat, jotka haluan sinun ottavan mukaan:

  • Etsyn JSON-LD-jäsennelty data tekee poiminnasta useimmissa kentissä siistimpää kuin raaka HTML-jäsentäminen.
  • DataDome on todellinen este — käytä kunnollisia headereita, viiveitä, evästeiden hallintaa ja residential-proxyjä Python-scrapingissa skaalaamalla.
  • Etsy API on rajoitettu. Jos tarvitset arvosteluja, kilpailijoiden kauppoja tai myyjien välistä analyysiä, scraping on käytännöllisin ratkaisu.
  • Thunderbit tarjoaa koodittoman vaihtoehdon, joka hoitaa botintorjunnan ja autentikoinnin natiivisti — kokeilemisen arvoinen, jos haluat Etsy-dataa ilman skriptien ylläpitoa.
  • Scrapeta aina vastuullisesti ja kunnioita Etsyn ehtoja.

Jos haluat aloittaa ilman koodia, kokeile Thunderbitia ilmaiseksi. Tai käytä tämän oppaan Python-koodia rakentaaksesi oman räätälöidyn scrapersi — ja toivottavasti selektorisi eivät koskaan rikkoudu perjantai-iltapäivänä.

Lisää scraping-oppaista löydät Etsy scraper -oppaastamme ja parhaiden AI-web scrapereiden koonnista.

Kokeile Thunderbitia ja scrapeta Etsy-data nopeammin Get Started Free

UKK

1. Onko Etsyn scrapetaminen Pythonilla laillista?

Julkisesti saatavilla olevan datan scrapetaminen on yleensä sallittua viimeaikaisten oikeustapausten perusteella (esim. Meta v. Bright Data, hiQ v. LinkedIn). Etsyn käyttöehdot kuitenkin kieltävät automaattisen käytön, joten tarkista aina heidän ToS:nsä ja robots.txt ennen scrapetusta. Suurissa tai kaupallisissa projekteissa kannattaa konsultoida lakiasiantuntijaa.

2. Voinko scrapeta Etsyä joutumatta estetyksi?

Etsy käyttää DataDomea, yhtä tiukimmista botintorjuntajärjestelmistä. Realistiset headerit, pyyntöviiveet, evästeiden säilyttäminen ja residential-proxyjen kierto auttavat vähentämään estoja. Thunderbitin selaimessa toimiva lähestymistapa välttää suurimman osan tunnistuksesta, koska se toimii oikeassa Chrome-istunnossasi.

3. Onko Etsyllä API, jota voisin käyttää scrapingin sijaan?

Kyllä — Etsy tarjoaa API v3:n, mutta se on pääosin rajoitettu oman kauppasi dataan, eikä siinä ole kunnollista pääsyä arvosteluihin. Useimmat kilpailija-analyysin ja kauppojen välisen vertailun käyttötapaukset vaativat scrapingia.

4. Mitä Python-kirjastoja tarvitsen Etsyä scrapeatakseni?

Vähintään: requests, beautifulsoup4, pandas (vientiä varten) ja json (sisäänrakennettu). JS-raskaita tai kirjautumista vaativia sivuja varten lisää selenium. Nopeampaan HTML-jäsentämiseen käytä lxml.

5. Miten scrapetan nimenomaan Etsy-arvostelut?

Etsy-arvostelut latautuvat sisäisen API-endpointin kautta (/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews). Sinun täytyy poimia tuotesivulta listing ID, shop ID ja CSRF-token, ja sitten tehdä POST-pyyntö endpointiin sivutuksella. Vaihtoehtoisesti voit jäsentää ensimmäisen arvosteluerän suoraan tuotesivun HTML:stä — molemmat tavat käydään tässä oppaassa läpi vaihe vaiheelta.

Lue lisää

Shuai Guan
Shuai Guan
Thunderbitin toimitusjohtaja | AI:n ja tiedon automaation asiantuntija Shuai Guan on Thunderbitin toimitusjohtaja ja Michiganin yliopiston insinööritieteiden alumni. Lähes kymmenen vuoden kokemuksella teknologian ja SaaS-arkkitehtuurin parissa hän on erikoistunut muuttamaan monimutkaiset tekoälymallit käytännöllisiksi, koodittomiksi tiedon poimintatyökaluiksi. Tässä blogissa hän jakaa suodattamattomia, kentällä koeteltuja näkemyksiä verkkosivujen datan keruusta ja automaatiostrategioista, jotta voit rakentaa älykkäämpiä, dataohjautuvia työnkulkuja. Kun hän ei optimoi tietotyönkulkuja, hän hyödyntää samaa tarkkuutta myös valokuvauksen parissa.
Sisällysluettelo

Poimi verkkosivu pelkällä pyynnöllä

Kerro mitä tarvitset selkeällä englannilla. Tai vielä parempaa, älä kerro mitään.

Kokeile Thunderbitiä ilmaista
Poimi dataa AI:n avulla
Siirrä data helposti Google Sheetiin, Airtableen tai Notioniin
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week