84 estrelas no GitHub e a contagem continua. O Yozh Crawler + Scraper é gratuito, de código aberto e desenvolvido publicamente — dá-nos uma estrela se ele merecer o seu lugar na tua pilha de ferramentas.
CyberYozh Data / Casos de utilização / Comércio eletrónico e plataformas de vendas
Caso de utilização · Comércio eletrónico

Um esquema. Todos os mercados

Envie qualquer URL de produto — Amazon, eBay, Walmart, AliExpress ou mais de 20 outras plataformas — e receba em resposta o mesmo JSON simples e estruturado. Sem seletores para manter, sem luta contra bots, sem pipelines frágeis.

$curl -X POST localhost:8000/api/v1/scrape/page \ -d '{"url":"amazon.com/dp/B0CFFXRFTH"}'
amazon.com/dp/B0CFFXRFTH
scrape_page amazon.com
Fetching product page
Bypassing anti-bot
Extracting JSON-LD + DOM
Normalizing variants
Resolving images
Funciona em estas plataformas de comércio
Por que razão os scrapers genéricos falham

As plataformas de comércio eletrónico eliminam os scrapers «tamanho único» num trimestre

As plataformas de comércio eletrónico lançam atualizações de layout a cada poucas semanas, implementam sistemas anti-bot em várias camadas, restringem o acesso à «Buy Box» e aos dados dos vendedores por meio de sessões e apresentam um formato de campos diferente em cada localização. A maioria das equipas dedica 80% do seu tempo a manter o scraper funcional e 20% aos próprios dados. Nós disponibilizamos os quatro elementos que elas acabam por ter de reconstruir do zero.

Se alguma vez acordaste e encontraste o painel de controlo cheio de nulls após uma reformulação do marketplace — isto é para ti.

Os seletores interrompem todas as mudanças de layout

O problema. Os scrapers genéricos enviam um caminho CSS ou XPath e ficam à espera do melhor. Quando uma plataforma de comércio eletrónico redesenha uma página de detalhes do produto (PDP) — a Amazon faz isso de poucas em poucas semanas —, o seu pipeline devolve resultados em silêncio nullem produção. Só descobre isso horas mais tarde, através de um painel de BI a jusante.

Como o Yozh Scraper resolve o problema. Basta passar llm: {model: "..."} na solicitação e o analisador pede à Anthropic / OpenAI / Gemini / OpenRouter para regenerar o seletor a partir do DOM ativo. O pipeline continua a funcionar com um self_heal: true indicador na resposta — sem ativação do serviço de plantão.

  • Autorrecuperação do LLM
  • Multiproveedor
  • Sem tempo de inatividade

Um endereço IP, cinco pedidos, bloqueio

O problema. Os proxies de centros de dados esgotam-se no espaço de uma única sessão. As barreiras CAPTCHA, a identificação de impressões digitais TLS e os desafios em JavaScript detetam os navegadores sem interface de utilizador em segundos. A maioria das equipas cria uma camada de rotação de proxies a partir do zero e, mesmo assim, acaba por ser bloqueada.

Como o Yozh Scraper resolve isso. Integração nativa com o CyberYozh App Proxy através de CYBERYOZH_API_KEY — 5 tipos de proxy (residencial rotativo/fixo, móvel 4G/5G, centro de dados, ISP) em 250 códigos de país. A versão «Stealth» do Chromium com impressão digital «warm» faz corresponder automaticamente a origem do proxy.

  • 5 tipos de proxy
  • 250 códigos de país
  • Impressão digital quente

Formato de campo diferente consoante o mercado

O problema. O preço da Amazon está num bloco, o do eBay noutro e o do Walmart num terceiro. Os painéis de controlo que abrangem várias plataformas precisam de uma camada de normalização antes de a primeira métrica ser disponibilizada. As equipas passam semanas a harmonizar os formatos dos campos.

Como o Yozh Scraper resolve isso. 10 predefinições integradas que src/presets/builtin/ geram JSON idêntico na Amazon, no eBay, no Walmart e no Google Shopping. As mesmas chaves: title, price, currency, in_stock, rating. Análise de moedas adaptada à localização — a estrutura permanece a mesma.

  • 10 predefinições
  • A mesma estrutura JSON
  • Moeda adaptada às configurações regionais

Páginas de início de sessão e sessões expiradas

O problema. Os dados associados à conta — vencedor da Buy Box, portais de parceiros, administradores internos, fontes de perfis ao estilo do LinkedIn — exigem o início de sessão. O armazenamento manual de cookies deixa de funcionar aquando da reautenticação. A maioria dos scrapers nem sequer inclui gestão de sessões.

Como o Yozh Scraper resolve isso. API de sessões com DSL de início de sessão declarativo (goto / fill / click / wait) ou colar cookies exportados. Reutilização session_id em todas as extrações — os cookies e o storageState persistem durante 24 horas, atualizando-se em tempo real. Obrigatório para a predefinição do LinkedIn, suportado por todas as outras.

  • Início de sessão declarativo
  • Cookie + estado de armazenamento
  • 24h TTL
Como funciona

De um URL a um JSON estruturado em 3 chamadas

Não é preciso escrever seletores. Basta escolher uma predefinição, passar os parâmetros e analisar a resposta. O mesmo fluxo funciona para todos os mercados suportados.

1 Iniciar

Clona o repositório e docker compose up. São iniciados dois serviços: o scraper no :8000, o crawler no :8001.

# one-time setup
git clone \
  github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
docker compose up -d
2 Chamar uma predefinição

PUBLIQUE um nome de predefinição juntamente com os parâmetros. Sem seletores, sem ajustes anti-bot — o pacote de predefinições trata da análise dos seletores, da localização e da moeda.

curl \
  localhost:8000/api/v1/scrape/preset/page \
  -X POST \
  -d '{"source": "amazon_product",
       "preset_params": {"asin": "B0CFFXRFTH"},
       "locale": "us"}'
3 Obter JSON estruturado

A forma mantém-se idêntica em todas as regiões. Se um seletor deixar de funcionar após uma alteração no layout, a autocorreção do LLM regenera-o em tempo real — o pipeline continua a funcionar.

{
  "asin":       "B0CFFXRFTH",
  "price":      189.99,
  "currency":   "USD",
  "in_stock":   true,
  "rating":     4.7
}
Exemplo prático

O que ganha em troca — um único formato, para todos os mercados

Escolha uma predefinição para ver como fica a resposta. O conjunto de campos varia consoante a fonte, mas o formato do pedido é idêntico.


            
Receitas

Como as equipas organizam-se — em 10 linhas cada

Três configurações concretas de comércio eletrónico, prontas a utilizar. Não está incluído nenhum agendador — utilize o seu próprio cron / Airflow / Temporal.

1 Resumo diário dos preços

Processe em lote a lista de ASINs dos seus concorrentes uma vez por dia, compare com os dados de ontem e publique as alterações no Slack. O Cron trata do resto.

# crontab: every day at 06:00
0 6 * * * /usr/local/bin/price-watch.sh

# price-watch.sh
curl -X POST localhost:8000/api/v1/scrape/preset/pages \
  -d "@asins.json" \
| jq '.results[] | {asin, price, in_stock}' \
> today.json

diff yesterday.json today.json | slack-cli post #pricing
mv today.json yesterday.json
200 URLs por lote ~30s por trabalhador o teu cron
2 Detecção de novos produtos

Fazer o rastreio de uma página de categoria diariamente e eliminar URLs de produtos duplicados em relação ao dia anterior. Utilizar um webhook para notificar sobre novos produtos antes que os concorrentes os indexem.

# start a crawl of the category
curl -X POST localhost:8001/api/v1/crawl/start \
  -d '{"seed_url":"amazon.com/s?k=ssd",
       "max_pages":300,
       "scope":"same-domain"}' \
| jq -r '.urls[]' > today_urls.txt

# urls that appeared today
comm -13 yesterday_urls.txt today_urls.txt \
| curl -X POST $WEBHOOK_URL -d @-
Curso de SSE desduplicação por tarefa (SHA1) scope + rate-limit
3 Fonte de utilizadores com sessão iniciada · sessões

Extrair páginas que exigem início de sessão (LinkedIn, portais de parceiros, administrações internas). Inicie sessão uma vez através da API de Sessões e, em seguida, reutilize session_id em cada extração.

# 1. log in once via declarative script
SID=$(curl -X POST \
  localhost:8000/api/v1/sessions/$ID/login \
  -d "@login_script.json" \
  | jq -r .session_id)

# 2. reuse for every scrape · cookies persist 24h
curl -X POST localhost:8000/api/v1/scrape/preset/page \
  -d "{\"source\":\"linkedin_profile\",
       \"preset_params\":{\"slug\":\"satyanadella\"},
       \"session_id\":\"$SID\"}"
24h TTL cookie + estado de armazenamento CAPTCHA: colar bolachas
FAQ

Perguntas frequentes sobre os dados do mercado

Que plataformas de comércio eletrónico suportam?
10 predefinições integradas que src/presets/builtin/ que abrangem as principais fontes de dados: amazon_product (us, uk, de, fr, jp), amazon_search (us, uk, de), ebay_search (EUA, Reino Unido, Alemanha), walmart_product (EUA), google_search (EUA, Reino Unido, Alemanha, França, Rússia, Japão), google_shopping (EUA, Reino Unido, Alemanha), bing_search (EUA, Reino Unido, Alemanha, França, Rússia, Japão), yandex_search (EUA, Reino Unido, Alemanha, França, Rússia, Japão), youtube_video (global), linkedin_profile (global, requer session_id). Precisa de mais alguma coisa? Utilize POST /api/v1/presets/generate com um URL de exemplo — um LLM infere o esquema e gera seletores para si.
Até que ponto o esquema é estável?
A forma dos campos é idêntica em todas as regiões e predefinições — amazon_product em .us, .uk, .de, .fr e .jp, todos devolvem as mesmas chaves (moeda localizada, estrutura inalterada). Os campos opcionais são explicitamente nulos, pelo que a ausência de valores nunca prejudica o seu analisador. Quando um mercado altera o layout, a autocorreção do LLM regenera o seletor em tempo real (basta llm: {model: "..."} na solicitação) — o pipeline continua a funcionar com um self_heal: true bandeira na resposta. As alterações que causam incompatibilidade só são lançadas em versões secundárias, com notas de migração em CHANGELOG.md.
Posso fazer scraping na Amazon, no eBay e no Walmart?
Sim — todas as três são predefinições de primeira classe, sem necessidade de configuração adicional. A Amazon disponibiliza dados em 5 regiões (us, uk, de, fr, jp) para as páginas de detalhes do produto (PDP) e para a pesquisa; o eBay abrange a pesquisa nos mercados us/uk/de; e o Walmart .us para as páginas de produtos. Cada uma devolve o mesmo formato JSON: title, price, currency, in_stock, rating, seller, além de campos específicos de cada marketplace, quando existentes (ASIN, vencedor da Buy Box, indicador de anúncio patrocinado). Para dados associados à conta que requerem início de sessão (preços Prime, portais de parceiros), utilize a API Sessions e inclua session_id juntamente com o pedido.
Em quanto tempo posso obter os primeiros dados?
Cerca de 5 minutos, do início ao fim. git clone + docker compose up -d coloca o scraper online em cerca de 30 segundos (o Docker faz o pull da imagem uma vez). Inicialmente curl POST /api/v1/scrape/preset/page retorna JSON estruturado em 1 a 3 segundos para localizações em cache, até 5 a 8 segundos quando o sistema está a arrancar. Sem registo, sem criação de chave de API, sem medição de SaaS — acede-se ao endpoint localhost:8000 no momento em que o contentor estiver operacional.
Trata de proxies e de medidas anti-bot?
Sim. O scraper integra-se com o CyberYozh App Proxy através de CYBERYOZH_API_KEY — 5 tipos de proxy em 250 códigos de país (residenciais rotativos/fixos, móveis 4G/5G, centro de dados, ISP). A proteção anti-bot é gerida por uma versão discreta do Chromium com «warm fingerprint», proxy residencial correspondente e temporização semelhante à humana — a maioria dos fluxos evita completamente o CAPTCHA. Quando surge um CAPTCHA, o scraper devolve-o como um erro estruturado, em vez de o resolver silenciosamente. Regra geral: proxies residenciais rotativos para scraping à escala de catálogo; móveis para zonas com proteção anti-bot agressiva ou tarefas ligadas a contas específicas.
Código aberto · Licença MIT · 84 ★

Pronto para extrair dados de plataformas de comércio eletrónico?

O Yozh Scraper é compatível com a Amazon, o eBay, o Walmart e o Google Shopping logo à partida. Grátis. Para sempre. Dá-nos uma estrela se isto te ajudar — cada estrela conta.

O Yozh Crawler + Scraper é distribuído ao abrigo da licença MIT. Utilize-o. Faça um fork. Desenvolva com ele.

Apreciado pelas equipas de dados e pelos criadores de IA

O que dizem as pessoas que criam com o Yozh

5,0 / 5 · Crítica de 5
GitHub
Substituímos o nosso cluster interno do Playwright pelo Yozh numa tarde. O endpoint do MCP integrou-se diretamente no nosso agente Claude — sem qualquer código de ligação, o crawler e o scraper funcionaram logo.
Marcus Reinhardt Engenheiro de Dados Principal Northwind Analytics
X
O sistema de predefinições é a funcionalidade mais marcante. Passamos um nome de fonte e recebemos um JSON limpo em resposta; a correção automática chegou mesmo a detetar duas alterações no layout da Amazon antes de nos apercebermos.
Priya Nair Fundador ScrapeStack
Reddit
Finalmente, um scraper de código aberto que trata os proxies e as sessões como elementos de primeira classe. Executamo-lo em portais de parceiros que exigem início de sessão — as sessões mantêm-se ativas e os resultados permanecem consistentes em todas as regiões.
Daniel Osei Engenheiro de Backend Loopfeed
X
Liguei-o ao Cursor através do MCP e agora o meu agente obtém dados da Web em tempo real durante a execução da tarefa. O rastreio em tempo real através do SSE é exatamente o que faltava aos fluxos de trabalho do agente.
Elena Kovac Engenheiro de IA Vektor Labs
GitHub
Deixámos de utilizar uma API de extração de dados paga para reduzir custos e preparámo-nos para um declínio na qualidade — mas aconteceu o contrário. É auto-hospedada, não há cobrança por pedido e o esquema de saída é mais claro do que aquele pelo qual costumávamos pagar.
Sofia Almeida Gestor de Engenharia Tabbly