Etsy 상점 및 제품 데이터 스크래핑 방법 (태그, 가격, 평점)

Etsy는 모든 제품 페이지에서 이름, 가격, 평점, 태그와 같은 깨끗하고 구조화된 데이터를 JSON 블롭에 숨깁니다. HTML과 싸우는 대신 이를 파싱하고, 경쟁업체가 비용을 지불하는 키워드 연구를 위해 이러한 태그를 채굴하세요.

Etsy는 제품 및 키워드 연구를 위한 금광입니다 - 수백만 개의 활성 목록이 있으며, 각각 실제 구매자가 태그하고 평가합니다. 문제는 공식 Open API v3가 하루에 약 10,000개의 요청과 초당 10개의 요청으로 제한되며, 흥미로운 엔드포인트는 OAuth 뒤에 숨겨져 있다는 것입니다. 실제 규모의 경쟁업체 및 시장 조사를 위해서는 공개 페이지를 스크래핑해야 합니다. 좋은 소식은: 어디를 봐야 할지 알면 Etsy는 깨끗하고 구조화된 데이터를 제공합니다. 이 가이드는 HTML과 싸우지 않고 가격, 평점 및 태그와 같은 Etsy 상점 및 제품 데이터를 스크래핑하는 신뢰할 수 있는 방법을 보여줍니다.

신뢰할 수 있는 트릭: HTML이 아닌 ld+json을 파싱하세요

모든 Etsy 제품 페이지는 <script type="application/ld+json"> 블록을 포함합니다: 제목, SKU, 가격, 통화 및 별점과 리뷰 수를 포함하는 aggregateRating을 가진 schema.org Product 데이터입니다. 이 JSON을 파싱하는 것이 Etsy가 회전시키는 CSS 클래스를 쫓는 것보다 훨씬 안정적입니다. 프록시를 통해 페이지를 로드하고 블롭을 가져오면 몇 줄 안에 깨끗한 기록을 얻을 수 있습니다.

import json, requests
from bs4 import BeautifulSoup

proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}

def scrape_listing(url):
    r = requests.get(url, proxies=proxies, timeout=20)
    soup = BeautifulSoup(r.text, "html.parser")
    blob = soup.find("script", {"type": "application/ld+json"})
    data = json.loads(blob.string)
    return {
        "title":  data.get("name"),
        "price":  data.get("offers", {}).get("price"),
        "curr":   data.get("offers", {}).get("priceCurrency"),
        "rating": data.get("aggregateRating", {}).get("ratingValue"),
        "reviews": data.get("aggregateRating", {}).get("reviewCount"),
    }

print(scrape_listing("https://www.etsy.com/listing/1234567890/example"))
검색 페이지에서 목록 ID로, ld+json 제품 파싱으로 이어지는 Etsy 스크래핑 파이프라인의 다이어그램
검색 페이지는 ID를 표면화합니다; 각 제품 페이지의 ld+json 블롭은 구조화된 기록을 담고 있습니다.

가져올 가치가 있는 필드 - 특히 태그

가격과 평점 외에도 가장 가치 있는 신호는 태그입니다. 모든 Etsy 목록은 최대 13개의 태그를 가질 수 있으며, 이는 판매자가 구매자가 검색한다고 믿는 정확한 구문입니다. 카테고리 내에서 가장 많이 팔리는 목록의 태그를 수집하면 키워드 맵을 역설계할 수 있습니다 - 이는 전문 SEO 도구가 재판매하는 동일한 데이터입니다. 리뷰 수를 수요의 프록시로 사용하여 카테고리를 실제로 팔리는 것으로 순위를 매길 수 있습니다. 목록의 즐겨찾기 수와 가능한 경우 등록 날짜를 추가하면, 목표로 삼을 가치가 있는 키워드와 단지 바쁘게 보이는 키워드의 차이를 구분할 수 있습니다. 이때 스크래핑은 유료 데이터 세트보다 더 빠르게 비용을 절감할 수 있습니다. 우리의 제품 리뷰 스크래핑 가이드는 그 리뷰 텍스트를 감정 신호로 변환하는 방법을 다룹니다.

검색 및 상점 페이지 스크래핑

검색 및 상점 페이지는 다르게 작동합니다. 그들의 ld+json은 페이지가 수십 개를 렌더링할 때도 처음 8개 항목만 나열하므로 목록 발견을 위해서는 JSON이 아닌 HTML 카드를 파싱해야 합니다. 목록 링크를 가져오고, 숫자 ID를 중복 제거한 다음 각 제품 페이지를 가져와 전체 기록을 얻으세요. Etsy의 검색 URL은 페이지 매개변수를 허용하므로 결과를 루프에서 걸을 수 있습니다.

import re

def find_listing_ids(query, pages=3):
    ids = set()
    for page in range(1, pages + 1):
        url = f"https://www.etsy.com/search?q={query}&page={page}"
        r = requests.get(url, proxies=proxies, timeout=20)
        # listing links look like /listing/<id>/<slug>
        for m in re.findall(r"/listing/(\d+)/", r.text):
            ids.add(m)
    return ids

ids = find_listing_ids("ceramic+mug", pages=3)
print(len(ids), "unique listings")

제품 이미지는 i.etsystatic.com CDN에 있으며, 썸네일이 필요할 경우 마크업에 직접 링크되어 있습니다. 상점 수준의 연구를 위해 상점 페이지는 판매자의 평점, 판매 수 및 정책을 포함하고 있어 경쟁업체를 볼륨으로 순위 매기는 데 유용합니다.

마켓플레이스 스크래핑을 위해 설계된 주거용 IP 얻기

변형, 페이지 매김 및 대역폭 절약

두 가지 세부 사항이 장난감 스크래퍼와 규모로 실행되는 스크래퍼를 구분합니다. 첫째, 변형: 많은 Etsy 목록은 여러 옵션 - 크기, 색상, 개인화 -을 판매하며 각각 고유한 가격을 가지고 있습니다. ld+json offers 필드는 단일 객체일 수도 있고 배열일 수도 있으므로 둘 다 처리하지 않으면 첫 번째 가격만 조용히 기록하고 전체 카테고리를 잘못 읽게 됩니다. 둘째, 페이지 매김: 검색 결과는 페이지로 나뉘며, Etsy는 단일 쿼리에서 얼마나 깊이 걸을 수 있는지를 제한합니다. 넓은 용어의 끝까지 페이지를 넘기려고 하기보다는 카테고리를 더 좁은 쿼리(재료, 스타일 또는 가격대별)로 나누어 각 검색이 얕고 완전한 세트를 반환하도록 하세요. 이렇게 하면 더 나은 커버리지를 얻고 하나의 스크래퍼가 "선물"의 40페이지를 넘기는 것보다 더 적은 안티봇 검사를 유발합니다.

대역폭은 마켓플레이스 스크래핑에서 예상치 못한 비용입니다. 전체 Etsy 제품 페이지는 ld+json만 원할 경우 필요 없는 많은 이미지와 스크립트를 가져옵니다. 일반 HTTP로 가져올 때 이미 이미지 다운로드를 건너뛰고 있습니다 - 마크업은 텍스트입니다. JavaScript 렌더링은 실제로 필요한 몇 페이지에만 예약하세요, 왜냐하면 렌더링된 페이지는 원시 가져오기보다 많은 바이트를 소모할 수 있기 때문입니다. 적극적으로 캐시하세요: 목록의 태그와 제목은 시간마다 거의 변하지 않으므로 조건부 새로 고침이 모든 것을 다시 다운로드하는 것보다 낫습니다. 우리의 프록시 대역폭 비용 절감 가이드는 GB당 청구서를 합리적으로 유지하는 HEAD-체크 및 자산 차단 전술을 다룹니다.

CAPTCHA 벽을 넘는 방법

Etsy는 안티봇 검사를 실행하며, 검색 페이지를 치는 헤드리스 브라우저나 데이터센터 IP는 CAPTCHA를 빠르게 유발합니다. 이를 통과하는 세 가지 방법이 있습니다. 첫째, 주거용 프록시를 사용하세요 - 실제 ISP 할당 IP는 서버가 아닌 쇼핑객으로 읽힙니다. 둘째, 연구 중인 마켓플레이스에 지리적 위치를 맞추세요; 가격과 배송 예상은 국가별로 다릅니다. 셋째, 자신을 조절하세요 - 꾸준하고 인간 같은 간격이 폭발보다 낫습니다. 렌더링과 재시도를 전혀 관리하고 싶지 않다면, Scraper API가 지문, 회전 및 JavaScript를 처리하고 파싱된 페이지를 반환합니다, 이는 헤드리스 플릿을 유지하는 것보다 보통 코드가 적습니다. 더 넓은 패턴을 보려면, 우리의 Amazon, eBay 및 Etsy의 마켓플레이스 자동화 가이드를 참조하세요.

윤리에 대한 한 줄: 공개 목록 데이터를 스크래핑하고, Etsy의 약관과 로봇 지침을 존중하며, 판매자의 개인 연락처 정보를 수집하지 마세요 - 이는 시장 조사에서 데이터 보호 문제로 넘어갑니다. 이는 지침이지 법률 자문이 아닙니다; 자신의 사용 사례를 확인하세요.

Etsy는 ld+json에 8개의 목록을 노출하고, 목록당 13개의 태그를 제공하며, 하루 10,000개의 API 제한을 보여주는 통계 패널
공개 페이지는 API가 반환하는 것보다 더 많은 것을 포함합니다 - IP가 차단 없이 도달할 수 있다면.

자주 묻는 질문

Etsy에서 데이터를 어떻게 스크래핑하나요?

각 제품 페이지를 주거용 프록시를 통해 로드하고, 제목, 가격, 통화 및 평점을 깨끗한 schema.org 데이터로 보유한 내장된 ld+json 블록을 파싱하세요. 발견을 위해 검색 페이지 HTML 카드를 파싱하여 목록 ID를 수집한 다음 각 제품 페이지를 가져오세요. 이는 회전하는 CSS 클래스를 스크래핑하는 것보다 더 안정적입니다.

Etsy에 스크래핑을 위한 API가 있나요?

Etsy의 공식 Open API v3는 존재하지만 하루 약 10,000개의 요청과 초당 10개의 요청으로 제한되며, 많은 엔드포인트는 OAuth 뒤에 숨겨져 있습니다. 규모의 경쟁업체 연구를 위해 대부분의 사람들은 공개 페이지를 스크래핑하며, 이는 종종 API가 반환하는 것보다 더 많은 것을 노출합니다 - 각 목록의 전체 태그 목록을 포함하여.

키워드 연구를 위해 Etsy 태그를 어떻게 얻나요?

각 목록은 페이지 마크업에 최대 13개의 태그를 가질 수 있습니다. 카테고리 내에서 가장 많이 팔리는 목록을 스크래핑하고, 그들의 태그를 수집하여 빈도에 따라 순위를 매겨 키워드 맵을 구축하세요. 리뷰 수로 가중치를 두면 수요를 근사화하여 무엇이 팔리고 구매자가 무엇을 검색하는지 데이터 기반의 그림을 제공합니다.

Etsy가 스크래핑할 때 CAPTCHA를 표시하는 이유는 무엇인가요?

데이터센터 IP나 공격적인 헤드리스 브라우저는 봇으로 읽힙니다. 주거용 프록시를 사용하여 요청이 실제 쇼핑객처럼 보이도록 하고, 지리를 마켓플레이스에 맞추며, 요청을 인간 같은 간격으로 조절하세요. 렌더링과 회전을 처리하는 Scraper API는 추가 코드 없이 대부분의 CAPTCHA 트리거를 제거합니다.

Etsy를 잘 스크래핑하는 것은 주로 이미 제공된 JSON을 읽고 차단 없이 페이지에 도달하는 것입니다. ld+json을 파싱하고, 태그를 채굴하며, 깨끗한 주거용 IP에 요청을 분산시키면 가격, 평점 및 검색 의도의 실시간 피드를 얻을 수 있습니다 - 실제 제품 연구를 위한 원재료입니다.

Scraper API로 Etsy를 규모로 스크래핑하세요