Como extrair dados do Etsy: Guia 2026

É difícil fazer scraping no Etsy devido às suas táticas avançadas de bloqueio de bots. Aprenda a contornar esses obstáculos e extrair dados valiosos de comércio eletrônico com Python.
9 min de leitura
How to Scrape Etsy blog image

O Etsy é um site notoriamente difícil de rastrear. Eles empregam uma variedade de táticas de bloqueio e têm um dos sistemas de bloqueio de bots mais sofisticados da web. Desde análises detalhadas de cabeçalhos até uma onda aparentemente interminável de CAPTCHAs, o Etsy é o pesadelo dos Scrapers da web em todo o mundo. Se você conseguir superar esses obstáculos, o Etsy se torna um site relativamente fácil de rastrear.

Se você conseguir fazer scraping do Etsy, terá acesso a uma grande quantidade de dados de pequenas empresas de um dos maiores mercados que a internet tem a oferecer. Acompanhe hoje e você estará fazendo scraping do Etsy como um profissional em pouco tempo. Vamos aprender como fazer scraping de todos os seguintes tipos de páginas do Etsy.

  • Resultados de pesquisa
  • Páginas de produtos
  • Páginas da loja

Introdução

Python Requests e BeautifulSoup serão nossas ferramentas preferidas para este tutorial. Você pode instalá-las com os comandos abaixo. O Requests nos permite fazer solicitações HTTP e nos comunicar com os servidores do Etsy. O BeautifulSoup nos dá o poder de analisar as páginas da web usando Python. Sugerimos que você leia primeiro nosso guia sobre como usar o BeautifulSoup para Scraping de dados na web.

Instalar Requests

pip install requests

Instale o BeautifulSoup

pip install beautifulsoup4

O que extrair do Etsy

Se você inspecionar uma página do Etsy, poderá se deparar com uma rede complexa de elementos aninhados. Se você souber onde procurar, isso será fácil de resolver. As páginas do Etsy usam dados JSON para renderizar a página no navegador. Se você conseguir encontrar o JSON, poderá encontrar todos os dados usados para construir a página… sem precisar se aprofundar muito no HTML do documento.

Resultados da pesquisa

As páginas de pesquisa do Etsy contêm uma matriz de objetos JSON. Se você observar a imagem abaixo, todos esses dados vêm dentro de um elemento de script com type="application/ld+json". Se você olhar com atenção, esses dados JSON contêm uma matriz chamada itemListElement. Se conseguirmos extrair essa matriz, obteremos todos os dados usados para construir a página.

Inspecting Etsy's search results

Informações do produto

As páginas de produtos não são muito diferentes. Observe a imagem abaixo: mais uma vez, temos uma tag de script com type="application/ld+json". Essa tag contém todas as informações usadas para criar a página do produto.

Schema example of a product on Etsy

Lojas

Você provavelmente adivinhou, nossas páginas de lojas também são criadas da mesma maneira. Encontre o primeiro objeto script na página com type="application/ld+json" e você terá seus dados.

Inspecting a shop on Etsy

Como extrair dados do Etsy com Python

Agora, vamos examinar todos os componentes necessários que precisamos construir. Como mencionado anteriormente, o Etsy emprega uma variedade de táticas para nos impedir de acessar o site. Usamos o Web Unlocker como um canivete suíço para esses bloqueios. Ele não apenas gerencia conexões Proxy para nós, mas também realiza a resolução de CAPTCHA para todos os CAPTCHAs que aparecem em nosso caminho. Você pode tentar sem um Proxy, mas em nossos testes iniciais, não conseguimos passar pelos sistemas de bloqueio do Etsy sem o Web Unlocker.

Depois de obter uma instância do Web Unlocker, você pode configurar sua conexão Proxy criando um dicionário simples. Usamos o certificado SSL da Bright Data para garantir que nossos dados permaneçam criptografados durante o trânsito. No código abaixo, especificamos o caminho para o nosso certificado SSL e, em seguida, usamos nosso nome de usuário, nome da zona e senha para criar a URL do Proxy. Nossos proxies são criados através da construção de uma URL personalizada que encaminha todas as nossas solicitações através de um dos serviços de Proxy da Bright Data.

path_to_cert = "bright-data-cert.crt"

proxies = {
    'http': 'http://brd-customer-<SEU-NOME-DE-USUÁRIO>-zone-<SEU-NOME-DE-ZONA>:<SUA-SENHA>@brd.superproxy.io:33335',
    'https': 'http://brd-customer-<SEU-NOME-DE-USUÁRIO>-zone-<NOME-DA-SUA-ZONA>:<SUA-SENHA>@brd.superproxy.io:33335'
}

Resultados da pesquisa

Para extrair nossos resultados de pesquisa, fazemos uma solicitação usando nossos Proxies. Em seguida, usamos o BeautifulSoup para analisar o documento HTML recebido. Encontramos os dados dentro da tag de script e os carregamos como um objeto JSON. Em seguida, retornamos o campo itemListElement do JSON.

def etsy_search(palavra-chave):
    palavra-chave-codificada = urlencode({"q": palavra-chave})
    url = f"https://www.etsy.com/search?{palavra-chave-codificada}"
    
    resposta = requests.get(url, proxies=proxies, verify=path_to_cert)
    soup = BeautifulSoup(response.text, "html.parser")
    script = soup.find("script", attrs={"type": "application/ld+json"})
    full_json = json.loads(script.text)
    return full_json["itemListElement"]

Informações do produto

Nossas informações sobre o produto são extraídas basicamente da mesma maneira. A única diferença real é a ausência do itemListElement. Desta vez, usamos nosso listing_id para criar nossa url e extraímos todo o objeto JSON.

def etsy_product(listing_id):
    url = f"https://www.etsy.com/listing/{listing_id}/"

    response = requests.get(url, proxies=proxies, verify=path_to_cert)
    soup = BeautifulSoup(response.text, "html.parser")
    script = soup.find("script", attrs={"type": "application/ld+json"})
    return json.loads(script.text)

Lojas

Ao extrair lojas, seguimos o mesmo modelo que usamos com produtos. Usamos o nome da loja para construir a URL. Depois de obtermos a resposta, encontramos o JSON, carregamos como JSON e retornamos os dados extraídos da página.

def etsy_shop(shop_name):
    url = f"https://www.etsy.com/shop/{shop_name}"

    response = requests.get(url, proxies=proxies, verify=path_to_cert)
    soup = BeautifulSoup(response.text, "html.parser")
    script = soup.find("script", attrs={"type": "application/ld+json"})
    return json.loads(script.text)

Armazenando os dados

Nossos dados são estruturados em JSON assim que os extraímos. Podemos gravar nossa saída em um arquivo usando o manuseio básico de arquivos do Python e json.dumps(). Nós o gravamos com indent=4 para que fique limpo e legível quando as pessoas olharem para o arquivo.

com open("products.json", "w") como arquivo:
    json.dump(produtos, arquivo, indent=4)

Juntando tudo

Agora que sabemos como construir nossas peças, vamos juntar tudo. O código abaixo usa as funções que acabamos de escrever e retorna nossos dados desejados no formato JSON. Em seguida, gravamos cada um desses objetos em seus próprios arquivos JSON individuais.

import requests
import json
from bs4 import BeautifulSoup
from urllib.parse import urlencode

# Configuração de Proxy e certificado (CREDENCIAS CODIFICADAS)
path_to_cert = "bright-data-cert.crt"
proxies = {
    'http': 'http://brd-customer-<SEU-NOME-DE-USUÁRIO>-zone-<SEU-NOME-DE-ZONA>:<SUA-SENHA>@brd.superproxy.io:22225',
    'https': 'http://brd-customer-<SEU-NOME-DE-USUÁRIO>-zone-<NOME-DA-SUA-ZONA>:<SUA-SENHA>@brd.superproxy.io:22225'
}

def fetch_etsy_data(url):
    """Busca e analisa dados JSON-LD de uma página do Etsy."""
    tente:
        resposta = solicitações.get(url, proxies=proxies, verificar=path_to_cert)
        resposta.raise_for_status()
    exceto solicitações.exceptions.RequestException como e:
        imprimir(f"Falha na solicitação: {e}")
        retornar Nenhum

    soup = BeautifulSoup(response.text, "html.parser")
    script = soup.find("script", attrs={"type": "application/ld+json"})
    
    if not script:
        print("Script JSON-LD não encontrado na página.")
        return None

    tente:
        retorne json.loads(script.text)
    exceto json.JSONDecodeError como e:
        imprima(f"Erro de Parsing JSON: {e}")
        retorne None

def etsy_search(palavra-chave):
    """Pesquise no Etsy por uma determinada palavra-chave e retorne os resultados."""
    encoded_keyword = urlencode({"q": palavra-chave})
    url = f"https://www.etsy.com/search?{encoded_keyword}"
    data = fetch_etsy_data(url)
    retorne data.get("itemListElement", []) se data, caso contrário, None

def etsy_product(listing_id):
    """Buscar detalhes do produto em uma lista do Etsy."""
    url = f"https://www.etsy.com/listing/{listing_id}/"
    return fetch_etsy_data(url)

def etsy_shop(shop_name):
    """Busca detalhes da loja a partir de uma página da loja Etsy."""
    url = f"https://www.etsy.com/shop/{shop_name}"
    return fetch_etsy_data(url)

def save_to_json(data, filename):
    """Salvar dados em um arquivo JSON com tratamento de erros."""
    tente:
        com open(nome_do_arquivo, "w", codificação="utf-8") como arquivo:
            json.dump(dados, arquivo, indent=4, ensure_ascii=False, default=str)
        imprima(f"Dados salvos com sucesso em {nome_do_arquivo}")
    exceto (IOError, TypeError) como e:
        imprimir(f"Erro ao salvar dados em {nome_do_arquivo}: {e}")

se __name__ == "__main__":
    # Pesquisa de produto
    produtos = etsy_search("caneca de café")
    se produtos:
        salvar_em_json(produtos, "produtos.json")

    # Item específico
    item_info = etsy_product(1156396477)
    if item_info:
        save_to_json(item_info, "item.json")

    # Loja Etsy
    shop = etsy_shop("QuiverCreekCeramic")
    if shop:
        save_to_json(shop, "shop.json")

Abaixo estão alguns dados de exemplo do products.json.

   {
        "@context": "https://schema.org",
        "@type": "Product",
        "image": "https://i.etsystatic.com/34923795/r/il/8f3bba/5855230678/il_fullxfull.5855230678_n9el.jpg",
        "name": "Caneca de café personalizada com foto, xícara de café com imagem personalizada, caneca de aniversário para presente para ele/ela, caneca personalizável com logotipo e texto para homens e mulheres",
        "url": "https://www.etsy.com/listing/1193808036/custom-coffee-mug-with-photo",
        "brand": {
            "@type": "Brand",
            "name": "TheGiftBucks"
        },
        "offers": {
            "@type": "Offer",
            "price": "14,99",
            "priceCurrency": "USD"
        },
        "position": 1
    },

Considere usar Conjuntos de datos

Nossos conjuntos de dados oferecem uma ótima alternativa ao Scraping de dados. Você pode comprar conjuntos de dados prontos para uso do Etsy ou um de nossos outros conjuntos de dados de comércio eletrônico e eliminar totalmente o processo de Scraping de dados! Depois de criar uma conta, acesse nosso mercado de conjuntos de dados.

Bright Data's dataset marketplace

Digite “Etsy” e clique no conjunto de dados Etsy.

Choosing the Etsy dataset

Isso lhe dará acesso a milhões de registros de dados do Etsy… ao alcance dos seus dedos. Você pode até baixar dados de amostra para ver como é trabalhar com eles.

A sample of Etsy's dataset records

Conclusão

Neste tutorial, exploramos a extração de dados do Etsy em detalhes. Você recebeu um curso intensivo sobre integração de Proxy. Você sabe como usar o Web Unlocker para contornar até mesmo os bloqueadores de bots mais rigorosos. Você sabe como extrair os dados e também como armazená-los. Você também teve uma amostra de nossos Conjuntos de dados pré-criados que eliminam completamente suas tarefas de extração de dados. Independentemente de como você obtém seus dados, nós temos a solução para você.

Inscreva-se agora e comece seu teste grátis.