Como Monitorar as Recomendações do Amazon Rufus ao Longo do Tempo
Expert Network Defense Engineer
Principais Conclusões:
- As recomendações do Amazon Rufus são dados de produto estruturados, não uma transcrição de chat. Uma chamada ao ator
scraper.amazoncomtype: rufusretorna um array deproducts, onde cada entrada carrega um ASIN, título, preço, classificação e o rótulo da seção sob a qual Rufus agrupou. - A participação nas recomendações é a métrica produzida por esse pipeline. Acompanhar quais ASINs Rufus apresenta para um conjunto fixo de consultas ao longo do tempo transforma uma prateleira conversacional em um sinal de visibilidade mensurável — o equivalente ao compartilhamento de voz do Rufus.
- Rufus divide suas escolhas em seções rotuladas. A resposta agrupa produtos em
content_blockscomo "Principais Seleções – Melhor ANC" e "Ótimas Seleções de Valor", de modo que cada produto tem tanto uma classificação geral quanto o título da seção que o enquadra. related_questionsamplia o conjunto de consultas iniciais por conta própria. Cada captura retorna as perguntas de acompanhamento que Rufus sugere para a consulta, e essas alimentam diretamente a lista de prompts da próxima execução.- Cada campo pode ser nulo e a resposta é gerada por sessão. Uma consulta pode não retornar uma resposta do Rufus para uma dada região, e um slot de produto pode chegar sem uma contagem de
bought— portanto, o pipeline armazena instantâneas por execução e lê a série, nunca uma única chamada. - O pipeline reduz-se a instantâneas apenas para anexação mais um diff. Cada execução escreve um registro JSONL com chave por consulta e horário da captura; o diff das gravações consecutivas relata quais ASINs entraram ou saíram entre as execuções.
- Livre para começar. Novas contas Scrapeless incluem créditos de teste gratuito — inscreva-se em app.scrapeless.com.
Introdução: a prateleira de compras se movia para o assistente
O Amazon Rufus responde a perguntas de compras com uma lista classificada de produtos. Um comprador pergunta quais são os melhores fones de ouvido com cancelamento de ruído, e Rufus retorna escolhas agrupadas — "Principais Seleções", "Melhor para Usuários da Apple", "Ótimas Seleções de Valor" — cada uma com um preço, uma classificação e um link de compra, dentro do assistente e antes que qualquer página de resultados de busca carregue. Para uma marca, a pergunta não é mais onde um produto se classifica na grade de resultados; é se Rufus menciona o produto, em qual seção e em qual classificação.
Essa prateleira é difícil de monitorar ao longo do tempo. Rufus gera sua resposta por sessão, as escolhas mudam por consulta e por região, e os cartões de produto se resolvem dentro de uma superfície conversacional que combate a automação. Ler a olho uma vez não diz nada; o sinal é como o conjunto de recomendações se move semana após semana.
Este guia constrói um pipeline de monitoramento em cima da API de Rastreamento Scrapeless: um conjunto fixo de consultas entra, o ator scraper.amazon retorna as recomendações do Rufus como produtos estruturados, e o pipeline extrai ASIN, classificação e seção, mapeia cada ASIN a uma marca, armazena uma instantânea por execução e diferencia as instantâneas para relatar a participação nas recomendações. Isso se combina naturalmente com visibilidade de marca nas Visões Gerais do Google AI, que rastreia a mesma consulta de recomendação no lado da busca.
Pipeline em um relance
Todo o sistema tem seis etapas, de ponta a ponta:
- Definir um conjunto de consultas — uma lista fixa de perguntas sobre compras, expandida pelas
related_questionsque cada captura retorna. - Capturar por consulta — POST cada consulta ao ator
scraper.amazoncomtype: rufus; uma região não suportada não retorna resposta do Rufus, que o pipeline grava e ignora. - Extrair produtos — percorrer
content_blocks, puxando o ASIN de cada produto, classificação geral e rótulo da seção. - Mapear ASIN → marca — resolver uma marca a partir do título do produto com uma pequena heurística, para que a participação possa ser agregada acima do nível do ASIN.
- Armazenar uma instantânea por execução — anexar um registro JSONL por consulta com chave por consulta e horário da captura; nunca sobrescrever.
- Diferença ao longo do tempo — comparar instantâneas consecutivas para relatar participação nas recomendações e quais ASINs entraram ou saíram.
As Etapas 1 a 4 são executadas em cada consulta em cada ciclo; as Etapas 5 a 6 transformam essas capturas em uma série temporal. As seções abaixo constroem cada etapa em ordem.
Pré-requisitos
- Python 3.10 ou mais recente (o código abaixo usa apenas a biblioteca padrão mais
requests) - Uma conta Scrapeless e chave da API — inscreva-se em app.scrapeless.com
- A chave exportada como
SCRAPELESS_API_KEY - Familiaridade básica com o terminal e JSON
Etapa 1 — Definir o conjunto de consultas
Um programa de monitoramento é tão bom quanto seu conjunto de consultas. Comece com as perguntas sobre compra que importam para a categoria que você acompanha — formule-as da maneira que um comprador pergunta ao Rufus, com uma intenção de compra clara.
python
SEED_QUERIES = [
"melhores fones de ouvido com cancelamento de ruído",
"melhores fones de ouvido sem fio para viagens",
"melhores fones de ouvido over-ear de orçamento",
```python
MARCAS_CONHECIDAS = ("Sony", "Bose", "Apple", "Sennheiser", "Beats", "JBL", "Anker")
def marca_do_titulo(titulo: str) -> str | None:
if not titulo:
return None
titulo_minusculo = titulo.lower()
for marca in MARCAS_CONHECIDAS:
if marca.lower() in titulo_minusculo:
return marca
return titulo.split()[0] # fallback: palavra inicial do título
Mantenha a lista MARCAS_CONHECIDAS restrita à categoria que você monitora; o fallback lida com a cauda longa sem uma tabela de pesquisa.
Obtenha sua chave de API no plano gratuito: app.scrapeless.com
Etapa 4 — Armazenar um instantâneo por execução
O pipeline é apenas de adição: cada captura grava um registro JSONL indexado pela consulta e pelo horário da captura, e nada é sobrescrito. Isso te dá o histórico completo para comparar, e significa que uma execução ruim ou vazia nunca destrói uma boa anterior.
python
import json
import time
def adicionar_instantaneo(caminho: str, consulta: str, linhas: list[dict]) -> dict:
registro = {"consulta": consulta, "capturado_em": int(time.time()), "produtos": linhas}
with open(caminho, "a", encoding="utf-8") as manuseio:
manuseio.write(json.dumps(registro, ensure_ascii=False) + "\n")
return registro
Usar um epoch inteiro para capturado_em mantém cada registro autodescritivo e ordenável sem um índice separado. Para carregar o histórico de uma consulta específica, leia o arquivo linha por linha e filtre pela chave consulta — uma passagem fornece cada instantâneo na ordem de captura.
Etapa 5 — Diferença e relato de participação na recomendação
Duas funções de leitura transformam o histórico do instantâneo em métricas. A participação na recomendação conta com que frequência cada marca aparece em uma execução e normaliza para uma porcentagem; a diferença compara os conjuntos ASIN de duas execuções para mostrar movimentação.
python
from collections import Counter
def participacao_na_recomendacao(linhas: list[dict]) -> dict[str, float]:
contagens = Counter(linha["marca"] for linha in linhas if linha.get("marca"))
total = sum(contagens.values())
if not total:
return {}
return {marca: round(100 * n / total, 1) for marca, n in contagens.most_common()}
def diferenca_execucoes(linhas_prev: list[dict], linhas_atual: list[dict]) -> dict[str, list[str]]:
prev = {linha["asin"] for linha in linhas_prev}
curr = {linha["asin"] for linha in linhas_atual}
return {
"entrada": sorted(curr - prev),
"removida": sorted(prev - curr),
}
Execute participacao_na_recomendacao por consulta para ver quais marcas dominam a prateleira da conversa para aquela pergunta, ou em todo o conjunto de consultas para uma visão ampla da categoria. Execute diferenca_execucoes entre os dois instantâneos mais recentes de uma consulta para captar a semana em que uma marca entrou nas escolhas ou saiu delas — o momento que vale a pena alertar.
Agendamento e escalabilidade
O loop de captura une as etapas: para cada consulta, capture, extraia, crie o instantâneo e registre um resultado vazio como um salto. Execute isso em um cronograma — diário ou semanal — e o arquivo JSONL se torna a série temporal.
python
if __name__ == "__main__":
caminho_instantaneo = "instantaneos_rufus.jsonl"
for consulta in CONSULTAS_SEMENTE:
resultado = capturar_rufus(consulta)
linhas = extrair_produtos(resultado)
if not linhas:
print(f"{consulta}: sem resposta do Rufus para esta consulta/região")
continue
adicionar_instantaneo(caminho_instantaneo, consulta, linhas)
participacao = participacao_na_recomendacao(linhas)
lideres = ", ".join(f"{b} {pct}%" for b, pct in list(participacao.items())[:3])
print(f"{consulta}: {len(linhas)} produtos — {lideres}")
Algumas limitações práticas ao escalar o conjunto de consultas:
- Mantenha a concorrência modesta — um punhado de consultas em andamento ao mesmo tempo é suficiente; uma execução de monitoramento é estável, não um surto.
- Fixe a região por execução para que a série permaneça comparável; uma consulta que não retorna resposta do Rufus em uma região é registrada como um salto, não misturada nos números de outra região.
- Defina o conjunto de consultas ao que você atua. Cada consulta é uma chamada faturável, portanto monitore as perguntas que impulsionam decisões e deixe
perguntas_relacionadassugerir as próximas a adicionar. Planeje a cadência de acordo com os preços da Scrapeless.
O Que Você Recebe
Cada captura gera a lista plana de produtos mais os content_blocks agrupados por seção; o pipeline reduz ambos a linhas de instantâneo e uma tabela de participação. A forma abaixo é o que o ator retorna, reduzido a uma seção.
json
// O esquema é o que scraper.amazon (tipo: rufus) retorna; os valores dos campos são uma amostra ilustrativa de uma execução ao vivo (seções e produtos reduzidos).
{
"metadata": { "type": "rufus", "rawUrl": "https://…" },
"result": {
"user_query": "melhores fones de ouvido com cancelamento de ruído",
"content_blocks": [
{
"type": "product_section",
"category": "Top Picks – Melhor ANC",
json
"produtos": [
{
"asin": "B0GN4CFF6H",
"título": "Fones de Ouvido Sem Fio com Cancelamento de Ruído Sony WH-1000XM6/B",
"preço": "$398,00",
"preço_original": "$428,00",
"classificação": "4.5",
"avaliações": "238",
"entrega": "Entrega GRÁTIS sex, 19 de jun",
"url": "https://…"
}
]
}
],
"produtos": [
{ "asin": "B0GN4CFF6H", "título": "Fones de Ouvido Sem Fio…", "categoria": "Principais Seleções – Melhor ANC" }
],
"perguntas_relacionadas": ["Compare Sony XM6 vs Bose QC Ultra 2", "Algum desses está em promoção?"]
}
}
Após as etapas 3–5, um registro de instantâneo e sua tabela de compartilhamento parecem assim:
json
// Saída do pipeline — amostra indicativa (schema real, valores ASIN/marca/classificação ilustrativos): uma linha de instantâneo somente para adição e contagem de participação na recomendação.
{
"instantâneo": {
"consulta": "melhores fones de ouvido com cancelamento de ruído",
"capturado_em": 1781716376,
"produtos": [
{ "asin": "B0GN4CFF6H", "classificação": 1, "seção": "Principais Seleções – Melhor ANC", "marca": "Sony" },
{ "asin": "B0FDKR293G", "classificação": 2, "seção": "Principais Seleções – Melhor ANC", "marca": "Bose" },
{ "asin": "B0GSS4SGZR", "classificação": 3, "seção": "Melhor para Usuários da Apple", "marca": "Apple" }
]
},
"participação_na_recomendação": { "Sony": 33.3, "Bose": 33.3, "Apple": 33.3 }
}
Algumas observações honestas ao executar:
- A resposta é por sessão. A mesma consulta retorna um conjunto de recomendações diferente e diferentes
perguntas_relacionadasde uma execução para outra. Armazenecapturado_emem cada registro; a série ao longo do tempo é o sinal, não qualquer captura única. - Seções definem a classificação. A
seçãode um produto (content_blocks[].category) explica por que ele classificou onde classificou — "Melhor para Usuários da Apple" é uma prateleira diferente de "Ótimas Seleções de Valor". Leve a seção, não apenas a posição. - Os campos são anuláveis.
comprado,preço_original, eentregaaparecem em alguns produtos e não em outros; um slot meio resolvido pode chegar sem umtítuloouasin. Leia cada um com.get()e pule a linha em vez de armazenar em branco. - A região decide se há uma resposta. Uma loja não suportada retorna uma falha regional em vez de produtos. Prenda a região que você monitora e registre as falhas como pulos.
Tratando isso de forma responsável
Este pipeline lê apenas as recomendações de produtos públicas que Rufus mostra a qualquer comprador — ASINs, títulos, preços, classificações e os rótulos das seções. Mantenha-se nessa superfície pública: não colete dados pessoais e conteúdo restrito a contas, respeite os termos de serviço da Amazon e as diretrizes para robôs, e armazene apenas os campos de produtos que o programa de monitoramento precisa. A participação na recomendação é uma métrica de visibilidade da marca construída a partir de listagens públicas, nada mais.
Conclusão: uma prateleira conversacional como uma série temporal
Monitorar o Amazon Rufus se resume a um loop: capturar cada consulta contra o ator scraper.amazon com type: rufus, extrair ASIN mais classificação e seção de content_blocks, mapear cada ASIN para uma marca, adicionar um instantâneo por execução e comparar os instantâneos para participação na recomendação. Prenda a região, trate cada campo como anulável, registre uma resposta ausente como um salto e permita que perguntas_relacionadas aumentem o conjunto de consultas. A mesma forma de monitoramento se aplica às outras superfícies de resposta — emparelhar Rufus com raspagem das Visões da IA do Google dá um programa em ambos assistentes de compras e pesquisa. O ator, o endpoint e os nomes dos campos aqui são confirmados contra a referência ao vivo da Scrapeless Scraping API.
Pronto para construir seu pipeline de monitoramento de recomendações de IA?
Junte-se à nossa comunidade para reivindicar um plano gratuito e conectar-se com desenvolvedores que estão construindo pipelines de dados de respostas de IA: Discord · Telegram.
Inscreva-se em app.scrapeless.com para créditos de teste gratuito e aponta o conjunto de consultas acima para as categorias e regiões do Rufus que seu programa de visibilidade de marca rastreia.
FAQ
P: Monitorar as recomendações do Amazon Rufus é legal?
Os dados capturados são as recomendações de produtos publicamente visíveis que Rufus mostra a qualquer comprador. Como em qualquer raspagem, a legalidade depende da jurisdição e do uso — revise os termos relevantes e consulte um advogado antes de construir sobre isso, e colete apenas dados de produtos públicos, nunca dados pessoais ou restritos a contas.
P: Por que uma consulta não retorna nenhuma resposta do Rufus?
Duas causas. A consulta pode não ser suficientemente transacional — formule-a como uma pergunta de compra com uma clara intenção de produto. Ou a região que você segmentou não tem superfície Rufus, caso em que o ator reporta uma falha de região para essa loja; fixe uma região suportada e registre a falta como uma omissão.
Q: Preciso de um proxy ou um navegador?
Não. A renderização, o manuseio de região e a análise ocorrem no lado do servidor. Você envia um POST com um cabeçalho x-api-token e recebe um JSON em resposta; o ator retorna o conjunto de recomendações já estruturado.
Q: Como obtenho a classificação e a seção em que um produto apareceu?
Percorra result.content_blocks: cada bloco product_section traz um título category e seu próprio array de products. Contar os produtos à medida que você achata os blocos fornece a classificação geral, e a category do bloco dá a seção — ambas valem a pena serem armazenadas por instantâneo.
Q: O que é quota de recomendação?
É a porcentagem de slots recomendados que uma marca ocupa em uma consulta ou conjunto de consultas, agregado a partir dos produtos capturados. Monitorado ao longo do tempo, mostra se uma marca está ganhando ou perdendo presença na prateleira Rufus — o equivalente de compra-conversacional à quota de voz.
Q: Por que armazenar instantâneas em vez de uma única visão atual?
O Rufus gera sua resposta por sessão, então qualquer captura é um ponto no tempo. Instantâneas apenas para adição, indexadas por consulta e horário de captura, fornecem o histórico para diferenciar, assim você pode relatar quais ASINs entraram ou saíram entre execuções, em vez de adivinhar a partir de uma única resposta.
Q: Quantas consultas posso monitorar de uma só vez?
Mantenha a concorrência modesta — um punhado de consultas em andamento é suficiente para uma execução de monitoramento constante. Limite o conjunto às perguntas nas quais você age e deixe related_questions sugerir as próximas a serem adicionadas, para que cada chamada faturável ganhe seu lugar.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



