Skip to main content

Rastreio de mudanças

Detecte e monitore mudanças em conteúdo da web entre scrapes
6 min read

Rastreio de mudanças

O rastreio de mudanças compara o conteúdo atual de uma página com o da última vez em que você fez o scrape. Adicione changeTracking ao seu array de formats para detectar se uma página é nova, inalterada ou modificada e, opcionalmente, obter um diff estruturado do que mudou.

  • Funciona com /scrape, /crawl e /batch/scrape
  • Dois modos de diff: git-diff para mudanças em nível de linha e json para comparação em nível de campo
  • Restrito à sua equipe e, opcionalmente, a uma tag que você especificar

Como funciona#

Cada scrape com changeTracking habilitado armazena um snapshot e o compara com o snapshot anterior para essa URL. Snapshots são armazenados de forma persistente e não expiram, por isso as comparações permanecem precisas, independentemente de quanto tempo se passou entre os scrapes.

ScrapeResultado
Primeiro scrapechangeStatus: "new" (nenhuma versão anterior existe)
Conteúdo inalteradochangeStatus: "same"
Conteúdo modificadochangeStatus: "changed" (dados de diff disponíveis)
Página removidachangeStatus: "removed"

A resposta inclui estes campos no objeto changeTracking:

CampoTipoDescrição
previousScrapeAtstring | nullCarimbo de data e hora do scrape anterior (null no primeiro scrape)
changeStatusstring"new", "same", "changed" ou "removed"
visibilitystring"visible" (localizável via links/sitemap) ou "hidden" (a URL funciona, mas não está mais linkada)
diffobject | undefinedDiff em nível de linha (presente apenas no modo git-diff quando o status é "changed")
jsonobject | undefinedComparação em nível de campo (presente apenas no modo json quando o status é "changed")

Uso básico#

Inclua tanto markdown quanto changeTracking no array formats. O formato markdown é obrigatório porque o rastreio de mudanças compara as páginas com base no conteúdo em markdown.

Resposta#

No primeiro scrape, changeStatus é "new" e previousScrapeAt é null:

Em raspagens posteriores, changeStatus indica se o conteúdo foi alterado:

Modo git-diff#

O modo git-diff retorna alterações linha a linha em um formato semelhante ao git diff. Passe um objeto no array formats com modes: ["git-diff"]:

Resposta#

O objeto diff contém um diff em texto simples e uma representação JSON estruturada:

O objeto estruturado diff.json contém:

  • files: array de arquivos modificados (geralmente um por página da web)
  • chunks: seções de alterações dentro de um arquivo
  • changes: alterações individuais de linha com type ("add", "del" ou "normal"), número da linha (ln) e content

Modo JSON#

O modo json extrai campos específicos tanto da versão atual quanto da versão anterior da página usando um schema que você define. Isso é útil para acompanhar mudanças em dados estruturados, como preços, níveis de estoque ou metadados, sem precisar analisar um diff completo.

Passe modes: ["json"] com um schema definindo os campos a serem extraídos:

Resposta#

Cada campo do schema é retornado com os valores previous e current:

Você também pode fornecer um prompt opcional para orientar a extração do LLM em conjunto com o schema.

Info

O modo JSON usa extração com LLM e custa 5 créditos por página. O rastreamento básico de alterações e o modo git-diff não têm custo adicional.

Usando tags#

Por padrão, o rastreamento de mudanças compara com a raspagem mais recente da mesma URL feita pela sua equipe. Tags permitem que você mantenha históricos de rastreamento separados para a mesma URL, o que é útil quando você monitora a mesma página em intervalos diferentes ou em contextos distintos.

Crawl com rastreio de mudanças#

Adicione rastreio de mudanças às operações de crawl para monitorar um site inteiro em busca de alterações. Passe o formato changeTracking dentro de scrapeOptions:

Raspagem em lote com rastreamento de mudanças#

Use a raspagem em lote para monitorar um conjunto específico de URLs:

Agendando o rastreamento de alterações#

O rastreamento de alterações é mais útil quando você faz scraping em uma agenda regular. Você pode automatizar isso com cron, agendadores em nuvem ou ferramentas de workflow.

Cron job#

Crie um script que extraia dados de uma URL e envie alertas quando houver alterações:

check-pricing.sh

Agende isso com crontab -e:

AgendamentoExpressão
A cada hora0 * * * *
A cada 6 horas0 */6 * * *
Diariamente às 9h0 9 * * *
Toda segunda-feira às 8h0 8 * * 1

Agendadores em ambientes cloud e serverless#

  • AWS: regra do EventBridge acionando uma função Lambda
  • GCP: Cloud Scheduler acionando uma Cloud Function
  • Vercel / Netlify: funções serverless acionadas por cron
  • GitHub Actions: workflows agendados com gatilhos schedule e cron

Automação de fluxos de trabalho#

Plataformas no-code como n8n, Zapier e Make podem chamar a API do Firecrawl em intervalos programados e enviar os resultados para o Slack, e-mail ou bancos de dados. Veja os guias de automação de fluxos de trabalho.

Webhooks#

Para operações assíncronas como crawl e batch scrape, use webhooks para receber resultados de rastreio de mudanças assim que chegarem, em vez de fazer polling.

O payload do evento crawl.page inclui o objeto changeTracking para cada página:

Para obter detalhes sobre a configuração de webhooks (cabeçalhos, metadados, eventos, tentativas de nova entrega, verificação de assinatura), consulte a documentação de webhooks.

Referência de configuração#

O conjunto completo de opções disponível ao passar um objeto no formato changeTracking:

ParâmetroTipoPadrãoDescrição
typestring(obrigatório)Deve ser "changeTracking"
modesstring[][]Modos de diff a serem habilitados: "git-diff", "json" ou ambos
schemaobject(nenhum)JSON Schema para comparação em nível de campo (obrigatório para o modo json)
promptstring(nenhum)Prompt personalizado para orientar a extração pelo LLM (usado com o modo json)
tagstringnullIdentificador separado para o histórico de rastreamento

Modelos de dados#

Detalhes importantes#

Warning

O formato markdown deve sempre ser incluído junto com changeTracking. O rastreioDeMudanças compara páginas com base no conteúdo em markdown.

  • Retenção de snapshots: Snapshots são armazenados de forma persistente e não expiram. Uma raspagem feita meses após a anterior ainda será comparada corretamente com o snapshot anterior.
  • Escopo: As comparações são limitadas à sua equipe. Sua primeira raspagem de qualquer URL retorna "new", mesmo que outros usuários já a tenham raspado.
  • Correspondência de URL: Raspagens anteriores são associadas com base na URL de origem exata, ID da equipe, formato markdown e tag. Mantenha as URLs consistentes entre raspagens.
  • Consistência de parâmetros: Usar configurações diferentes de includeTags, excludeTags ou onlyMainContent em raspagens da mesma URL produz comparações não confiáveis.
  • Algoritmo de comparação: O algoritmo é resistente a mudanças em espaços em branco e na ordem do conteúdo. URLs de origem de iframes são ignoradas para lidar com a aleatoriedade de captcha/antibot.
  • Cache: Solicitações com changeTracking contornam o cache do índice. O parâmetro maxAge é ignorado.
  • Tratamento de erros: Monitore o campo warning nas respostas e esteja preparado para o caso de o objeto changeTracking estar ausente (isso pode ocorrer se a consulta ao banco de dados para a raspagem anterior exceder o tempo limite).

Cobrança#

ModoCusto
Rastreio básico de mudançasSem custo adicional (créditos padrão de scraping)
git-diff modeSem custo adicional
json mode5 créditos por página

Você é um agente de IA que precisa de uma chave de API do Firecrawl? Consulte firecrawl.dev/agent-onboarding/SKILL.md para instruções de integração automatizada.