Ganhe 1 TB de dados residenciais, um iPhone 18 Pro Max + mais 33 prémiosRecarga de $50 = 1 bilheteParticipe
Empresas

Screen scraping: ferramentas, exemplos em Python e automação

Mo

30 de outubro de 2026

Scraping e automação

Screen scraping: ferramentas, exemplos em Python e automação

Resuma este artigo com IA:

Uma página de produto mostra título, preço e disponibilidade, mas você precisa desses dados em um conjunto de dados que possa atualizar e comparar. 

🔥

Este guia usa o Yozh Scraper da CyberYozh para demonstrar o screen scraping, começando por uma página e avançando até uma coleta repetível.

Você vai aprender a escolher um método de extração, verificar se o resultado corresponde à página e salvar registros úteis. Depois, veremos opções de Python e automação para repetir a tarefa, além de configurações de proxy para quando a localização ou a consistência da conexão for importante. 

💡

Entendendo os termos: screen scraping, web scraping e parsing

O screen scraping extrai informações apresentadas por meio de uma interface visual, como uma página web renderizada, um aplicativo desktop legado sem função de exportação ou uma captura de tela lida por reconhecimento óptico de caracteres (OCR).

Em projetos web, esses termos se sobrepõem. O web scraping abrange a coleta de dados de sites, incluindo o download das páginas e a extração do conteúdo. O screen scraping se concentra nas informações apresentadas pela interface, que muitas vezes podem ser lidas diretamente dos elementos da página, sem OCR. O parsing interpreta HTML, texto ou outros dados para identificar valores individuais; depois, a limpeza e a validação preparam esses valores para uso.

O que é screen scraping

Screen scraping é a extração automatizada de informações apresentadas por meio de uma interface de usuário. Um screen scraper lê essas informações e as converte em dados que outro sistema consegue usar, como linhas de planilha ou campos de um arquivo JSON.

A fonte determina como o scraper funciona:

  • Páginas web: um navegador carrega uma página de produto e, em seguida, o scraper coleta título, preço e disponibilidade do conteúdo renderizado.

  • Aplicativos legados: a automação lê dados de estoque ou de clientes em um sistema empresarial antigo que não tem uma opção útil de exportação.

  • Imagens: o reconhecimento óptico de caracteres (OCR) converte o texto de uma captura de tela ou de uma imagem digitalizada em caracteres legíveis por máquina.

Como funciona o screen scraping?

Em uma página de produto, por exemplo da Amazon, o navegador carrega a interface, as regras de extração identificam os valores e a validação verifica se os resultados são utilizáveis. O processo segue cinco etapas:

  1. Abra a página. Acesse a URL do produto com as configurações de localização e sessão necessárias para a sua tarefa.

  2. Aguarde o conteúdo necessário. Confirme que o preço e a disponibilidade foram carregados antes de coletá-los.

  3. Localize e extraia os campos. Use regras de seleção para capturar o título do produto, o preço, a moeda e o status do estoque.

  4. Valide os valores. Procure campos ausentes, moedas inesperadas e mensagens de erro capturadas por engano como dados do produto.

  5. Salve o resultado. Armazene os registros com as URLs de origem e os horários de coleta para poder comparar os resultados depois.

O seu scraper da Amazon pode retornar os campos extraídos junto com uma captura de tela. Manter os dois ajuda a investigar discrepâncias: você compara um valor ausente ou incorreto com o que o navegador exibiu e identifica onde a extração falhou.

Screen scraping vs. web scraping e APIs

Escolha o método que fornece os campos necessários com o mínimo de processamento desnecessário. Comece pelo método mais simples que entregue os dados de que você precisa. Verifique se existe uma API oficial ou uma exportação de catálogo integrada, como um arquivo CSV, uma lista de preços em Excel ou um feed XML.

Se nenhuma das opções servir, inspecione o HTML retornado pelo servidor para ver se ele contém os campos necessários ou se eles são carregados via JavaScript. Isso ajuda a determinar se é preciso renderizar a página ou interagir com ela no navegador.

Método

O que lê

Quando é adequado

Principal requisito de manutenção

API ou exportação

Respostas estruturadas ou arquivos para download

A fonte fornece os campos de que você precisa

Acompanhar mudanças de esquema, requisitos de acesso e cotas

Extração direta de HTML

HTML retornado pelo servidor

Os valores estão presentes sem executar JavaScript

Atualizar as regras de extração quando a marcação mudar

Extração via navegador

Elementos da página após a renderização ou a interação

O conteúdo depende de JavaScript, filtros ou do estado da sessão

Manter seletores, condições de carregamento e sessões

OCR ou automação de desktop

Pixels de imagem, texto de terminal ou controles do aplicativo

Uma interface fornece os dados sem uma exportação útil

Verificar mudanças de layout, identificadores de controles e precisão do reconhecimento

Screen scraping e web scraping se sobrepõem. Renderizar um site e ler os elementos da página continua sendo web scraping; usar um navegador não significa automaticamente interpretar pixels.

💡

O Yozh Scraper oferece suporte a scraping baseado em navegador: renderiza páginas dependentes de JavaScript, reutiliza o estado de login armazenado em cookies e localStorage entre requisições dentro de uma sessão configurada e salva presets de seletores para tarefas de extração recorrentes.

Ferramentas de screen scraping: escolha de acordo com a fonte de dados

As ferramentas de screen scraping para web adequadas dependem de onde os dados aparecem e de como você acessa essa fonte. As ferramentas de screen scraping de código aberto cobrem automação de navegador e OCR, enquanto plataformas mais amplas também oferecem suporte a processos de desktop.

Yozh Scraper: um serviço pronto de extração via navegador

O Yozh Scraper é uma API REST gratuita e auto-hospedada, criada com Playwright. Ele renderiza páginas web em um navegador real e retorna campos selecionados com CSS ou XPath, Markdown limpo para modelos de linguagem de grande porte (LLMs), HTML bruto e capturas de tela da página inteira. Presets integrados e personalizados permitem reutilizar regras de extração, enquanto uma fila de tarefas assíncrona processa requisições de uma página ou em lote.

Depois da configuração inicial do repositório e do ambiente, docker compose up --build inicia o scraper e o crawler que o acompanha. O Scraper Tester opcional exige Node.js e é iniciado separadamente, oferecendo uma interface web para testar seletores e inspecionar resultados.

O projeto usa a licença MIT, então você pode executá-lo localmente sem taxas de licença de software nem integrações pagas. Você fornece os recursos computacionais; hospedagem, proxies pagos e o uso opcional de APIs de LLM têm custos separados quando utilizados, inclusive durante os testes. A próxima seção mostra como configurar uma extração e verificar os resultados.

Playwright: controle direto do navegador a partir do Python

Escolha o Playwright quando quiser programar cliques, filtros e navegação em Python. Ele oferece automação de navegador, enquanto o seu código define a extração, a validação e o armazenamento. Você mantém os seletores e as condições de carregamento.

Tesseract: reconhecimento de texto em imagens

O Tesseract é um mecanismo de OCR gratuito e de código aberto que converte texto em imagens em saída legível por máquina. Use-o para documentos digitalizados ou informações disponíveis apenas como pixels, como preços, números de telefone ou SKUs incorporados em imagens ou desenhados em um canvas. Capture primeiro a imagem relevante e depois verifique se o texto reconhecido tem erros antes de salvá-lo.

UiPath: automação entre interfaces de aplicativos

O UiPath é uma plataforma de automação robótica de processos (RPA) para aplicativos desktop e web. Ele é adequado para fluxos de trabalho com sistemas legados de estoque ou contabilidade em Windows, sem recursos úteis de exportação. A automação pode alternar entre janelas de aplicativos, ler controles de interface acessíveis e usar OCR quando o texto só está disponível na tela. Os valores de tabelas extraídos ainda precisam ser verificados quanto a erros de reconhecimento e ao alinhamento correto de linhas e colunas.

Como fazer screen scraping com o Yozh Scraper

Comece com o Books to Scrape, uma livraria de teste criada para praticar scraping. A página de produto de A Light in the Attic tem campos previsíveis e conteúdo estático, o que a torna útil para aprender os controles antes de passar a sites dinâmicos.

1. Defina o resultado

Crie um registro com o título do produto, o preço, a disponibilidade, a URL de origem e o horário da coleta. Extraia os três primeiros campos da página; adicione a URL e um timestamp em UTC ao salvar o registro.

2. Inicie o scraper

Com Git e Docker instalados, siga o guia de instalação do Yozh Scraper:

git clone https://github.com/CyberYozh-data/yozh-scraper

bash
git clone https://github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
cp .env.example .env
docker compose up --build

O último comando inicia o scraper na porta 8000 e o crawler que o acompanha na porta 8001. Mantenha o Docker em execução. Abra a documentação da API do scraper em http://localhost:8000/docs; a documentação do crawler está disponível em http://localhost:8001/docs.

3. Abra o tester visual

O tester é iniciado separadamente e exige Node.js 18+. Em outro terminal, acesse a pasta do repositório yozh-scraper e execute:

bash
cd scraper-tester
npm install
node server.js

Abra http://localhost:7000. No cabeçalho, confirme que Scraper URL é http://localhost:8000 e clique em Check ao lado. Um indicador verde de status confirma que o scraper está acessível.

4. Configure a extração

Em Scrape Page, informe a URL de prática, selecione uma conexão direta (none) e configure a extração por CSS com estas regras:

Campo

Seletor CSS

Título

.product_main h1

Preço

.product_main .price_color

Disponibilidade

.product_main .availability

Leia o texto de cada elemento e marque os campos como obrigatórios. Defina wait_for_selector como .product_main .price_color. Ative a saída de captura de tela e mantenha o bloqueio de imagens desativado.

5. Execute uma amostra pequena

Abra Presets e use o Preset Builder. Cole a mesma URL do produto, clique em Fetch sample, escolha Manual e insira as regras CSS verificadas. Clique em Verify e inspecione os valores extraídos antes de salvar.

Escolha um nome descritivo; o tester adiciona automaticamente o prefixo user_. Selecione o preset salvo em Scrape Page e teste outra página de livro antes de ampliar a coleta. A seleção de campos assistida por IA também está disponível quando configurada.

Para tarefas futuras que exijam acesso regional, defina CYBERYOZH_API_KEY em .env, aplique a configuração atualizada do Docker e selecione a conexão de proxy que você comprou. Use res_rotating com proxy_geo.country_code para direcionar a um país. O Yozh Scraper alinha automaticamente o idioma, o fuso horário e o cabeçalho Accept-Language do navegador com esse país. Verifique a localização do IP de saída e o conteúdo exibido antes de coletar um conjunto de dados maior.

6. Salve um preset reutilizável

Abra Presets, busque a mesma amostra, escolha Manual e insira as regras verificadas. Use Verify e salve o preset com um nome descritivo. Selecione-o em Scrape Page e teste outra página de livro antes de ampliar a coleta. A seleção de campos assistida por IA também está disponível quando configurada.

Quando um alvo futuro exigir acesso regional, configure a sua chave de API da CyberYozh e a conexão de proxy que você comprou. Os proxies residenciais rotativos oferecem suporte a localização e a geotargeting; verifique a região retornada antes de coletar um conjunto de dados maior.

Screen scraping com Python: extraia e salve dados da página

O screen scraping com Python dá controle sobre a navegação, a extração e o armazenamento. Este exemplo usa a mesma página de produto do Books to Scrape e os mesmos seletores do passo a passo visual, e depois salva um registro validado como JSON.

Instale o Playwright com python -m pip install playwright, seguido de python -m playwright install chromium. Salve o script como scrape_product.py e execute python scrape_product.py.

Para uma conexão opcional da CyberYozh, defina estas variáveis de ambiente no shell que executa o script:

  • CYBERYOZH_PROXY_SERVER: o endereço do seu proxy HTTP, no formato http://HOST:PORT.

  • CYBERYOZH_PROXY_USERNAME: o nome de usuário do seu proxy.

  • CYBERYOZH_PROXY_PASSWORD: a senha do seu proxy.

Sem a variável do servidor, o script se conecta diretamente. O Playwright permite configurar proxy para o navegador ou para um contexto individual do navegador.

python
import json
import os
from datetime import datetime, timezone
from playwright.sync_api import sync_playwright, TimeoutError

URL = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"

FIELDS = {
    "title": ".product_main h1",
    "price": ".product_main .price_color",
    "availability": ".product_main .availability",
}

options = {}
if server := os.getenv("CYBERYOZH_PROXY_SERVER"):
    options["proxy"] = {
        "server": server,
        "username": os.getenv("CYBERYOZH_PROXY_USERNAME", ""),
        "password": os.getenv("CYBERYOZH_PROXY_PASSWORD", ""),
    }

with sync_playwright() as p:
    browser = p.chromium.launch(**options)
    try:
        page = browser.new_page()
        response = page.goto(URL, wait_until="domcontentloaded")

        if response is None or not response.ok:
            raise SystemExit("Page request failed; check the URL and connection.")

        record = {}
        for field, selector in FIELDS.items():
            element = page.locator(selector)
            try:
                element.wait_for(state="visible", timeout=10000)
                value = " ".join(element.inner_text().split())
            except TimeoutError:
                raise SystemExit(f"Required field missing or not ready: {field}")

            if not value:
                raise SystemExit(f"Required field is empty: {field}")

            record[field] = value

        record.update(
            source_url=page.url,
            collected_at=datetime.now(timezone.utc).isoformat(),
        )

        with open("product.json", "w", encoding="utf-8") as output:
            json.dump(record, output, ensure_ascii=False, indent=2)

        print("Saved product.json")
    finally:
        browser.close()

O script aguarda cada elemento obrigatório, remove espaços em excesso e preserva a moeda exibida. Campos ausentes ou vazios interrompem a execução com uma mensagem clara antes de um novo registro ser gravado. Uma execução bem-sucedida inclui a URL de origem e o horário da coleta em UTC; ao executar de novo, product.json é substituído.

💡

Dica profissional: para saber mais sobre como selecionar campos e organizar os valores extraídos, consulte o guia de parsing de dados.

Se você já configurou o Yozh Scraper, o Python pode reutilizar o preset salvo por meio da API REST:

  1. Envie a requisição para POST /api/v1/scrape/preset/page e guarde o job_id retornado.

  2. Consulte GET /api/v1/scrape/{job_id} até a conclusão, com um timeout geral e tratamento para tarefas com falha ou canceladas.

  3. Obtenha GET /api/v1/scrape/{job_id}/results, valide os campos e salve-os.

Automatize o screen scraping com crawlers, agendamentos e ferramentas de IA

Quando a extração da primeira página de produto funcionar, o próximo desafio é coletar dados atualizados em todo o catálogo. Monte a automação a partir dessa configuração já testada, com limites para a descoberta de páginas, execuções agendadas e verificações antes de salvar os resultados.

Descubra páginas adicionais com o Yozh Crawler

O Yozh Crawler, o serviço complementar na porta 8001, descobre links e busca páginas por meio do Yozh Scraper. Informe uma página de categoria como seed_url e defina scope.mode como same-domain ou use regex com padrões de inclusão e exclusão para restringir a descoberta. Defina scope.max_pages e scope.max_depth para limitar o número de páginas e a profundidade dos links. Ative enable_scraping e forneça regras de extração para manter os campos extraídos junto com as URLs descobertas.

Em sites de e-commerce, a mesma URL de produto pode aparecer com uma barra final ou com os mesmos parâmetros de consulta em outra ordem. A canonicalização de URLs normaliza essas variações em um fingerprint comum para reduzir visitas duplicadas. No modo same-domain, o crawler também trata o hostname com e sem www como equivalentes. Mudar o valor de um parâmetro, como uma opção de ordenação ou uma variante do produto, é diferente de reordenar parâmetros e não torna as URLs automaticamente equivalentes.

Controle a frequência de requisições com scope.per_domain_rps e as requisições simultâneas com scope.per_domain_concurrency. Comece com um limite de 10 a 20 páginas, inspecione as URLs descobertas e exclua seções irrelevantes, como posts de blog ou páginas de contato, antes de ampliar a coleta.

Agende a coleta com o n8n

Conecte o n8n a um endpoint acessível da API REST do Yozh e monte esta sequência:

Gatilho agendado → envio da tarefa de scraping → verificação de conclusão → validação dos resultados → gravação dos dados.

Use o Schedule Trigger do n8n para definir o intervalo e um nó HTTP Request para enviar a tarefa. Guarde o ID da tarefa e use um ciclo de espera e verificação para acompanhar a conclusão. Adicione um timeout geral e um ramo de falha para que tarefas malsucedidas recebam atenção.

Antes de salvar, verifique os campos obrigatórios e anexe o horário da coleta. Essa integração usa a API do Yozh e os nós padrão do n8n, com o agendamento gerenciado no n8n.

💡

Dica profissional: para conhecer outras formas de agendar coletas recorrentes, consulte o guia de automação de web scraping.

Conecte um assistente de IA por meio do MCP

O Model Context Protocol (MCP) permite que assistentes de IA, como o Claude, chamem ferramentas externas. Em uma configuração local, conecte o Claude Code a [http://localhost:8000/mcp](http://localhost:8000/mcp) usando Streamable HTTP. Depois, você pode pedir: “Faça scraping desta página de produto e resuma os preços em uma tabela.” O assistente pode enviar a tarefa de scraping, acompanhar o progresso, obter os resultados e organizar os valores extraídos. :chatgpt-content-reference{index="0"}

O Yozh Scraper também oferece suporte a presets gerados por IA. Use from_prompt para descrever em linguagem natural os campos de que você precisa, ou from_schema para informar nomes de campos e tipos de dados. Junto com uma página de exemplo, essas entradas permitem que o modelo gere seletores que você pode verificar antes de salvar. :chatgpt-content-reference{index="1"}

Para o reparo automático de seletores, configure self_heal e forneça uma configuração de LLM para a execução do preset. Se um campo obrigatório retornar vazio, o scraper tenta regenerar o seletor a partir da marcação atual da página. Os seletores reparados podem ser salvos de volta nos presets do usuário; os presets integrados continuam somente leitura. Compare os valores reparados com a captura de tela da página, pois um campo preenchido ainda pode conter o preço ou o detalhe de produto errado. :chatgpt-content-reference{index="2"}

Para ativar os recursos de geração e reparo por IA do Yozh, configure em .env uma chave de API da OpenAI, Anthropic, Google Gemini ou OpenRouter e selecione um modelo compatível. O uso da API é cobrado separadamente, conforme os preços do provedor escolhido. :chatgpt-content-reference{index="3"}

Escolha as configurações de conexão e sessão para a sua tarefa

Ao fazer screen scraping em sites, escolha as configurações de conexão de acordo com a localização de que você precisa, a duração da sessão e a frequência com que revisita uma página. As opções de proxy da CyberYozh atendem a diferentes requisitos:

  • Residenciais rotativos (US$ 4/GB, pagamento conforme o uso): use IPs regionais para coletar páginas de produto independentes, com sticky sessions de até 24 horas quando etapas conectadas precisam de continuidade. O tráfego não utilizado é acumulado, e pacotes maiores têm tarifas menores por GB.

🦔

Acesse 100 milhões de IPs residenciais reais.

  • ISP estático (a partir de US$ 5,29/mês): escolha um IP fixo com tráfego ilimitado para visitas repetidas, coleta autenticada e tarefas que exigem um endereço de rede consistente.

🦔

Alugue o seu proxy ISP estático e use o mesmo endereço durante todo o período de aluguel. 

  • Móveis LTE/4G/5G (a partir de US$ 1,70/dia em planos compartilhados): considere conexões de operadoras para scraping de buscas do Google e outros alvos com filtros de tráfego rígidos. O NAT de nível de operadora (CGNAT) permite que muitos assinantes móveis comuns compartilhem um IP público, de modo que bloquear o endereço inteiro também pode afetar visitantes legítimos. Isso torna as conexões de operadoras dignas de teste, embora IPs compartilhados ainda possam receber CAPTCHAs ou limites de requisições. O tráfego ilimitado mantém os custos de banda previsíveis quando a renderização no navegador baixa repetidamente scripts, estilos e imagens. Para coleta em paralelo, alugue vários canais móveis e distribua os workers do navegador entre eles, ajustando a concorrência à capacidade da conexão e aos limites do alvo.

🦔

Obtenha o seu proxy móvel com IPs limpos e sem remendos. 

  • Datacenter: considere-os para fontes públicas adequadas, em que um teste pequeno confirme que o acesso e a extração funcionam.

🦔

Obtenha proxies de datacenter dedicados IPv4/IPv6 de alta velocidade com 99,99% de uptime. 

Em páginas que exigem login ou um CEP de entrega consistente, a continuidade da sessão depende tanto do estado salvo do navegador quanto da persistência do IP do proxy. Cookies e localStorage podem reter informações de autenticação e preferências regionais, dependendo de como o site as armazena.

O Yozh Scraper permite criar uma sessão por meio de POST /api/v1/sessions, autenticar por meio de POST /api/v1/sessions/{id}/login e passar o session_id retornado nas requisições de scraping seguintes. Isso reutiliza o estado salvo do navegador e mantém consistente a configuração de proxy da sessão. Combine essa opção com um IP estático ou com uma conexão sticky configurada de forma adequada quando o endereço externo precisar permanecer estável. Um IP fixo não consegue renovar um token de login expirado, e cookies salvos não garantem que um site aceite uma mudança repentina de IP.

💡

Antes de uma tarefa, o IP Checker da CyberYozh pode ajudar a inspecionar sinais de reputação e localização. A API dele permite enviar verificações de reputação de IP e obter relatórios. Use esses resultados junto com pequenas requisições de teste: cada alvo aplica as próprias regras de acesso, então um relatório favorável não garante como ele responderá.

Problemas comuns de screen scraping e como corrigi-los

Quando uma execução produz registros incompletos ou inconsistentes, compare a captura de tela salva com a amostra de saída da mesma tarefa. Isso ajuda a distinguir um problema de carregamento da página de um erro de extração ou de formatação.

Problema

O que verificar e corrigir

Campos ausentes

Aguarde o conteúdo necessário, verifique os seletores na página atual e sinalize campos obrigatórios vazios antes de salvar.

Preços incorretos

Confirme a moeda, o local de entrega e a variante selecionada. Verifique os separadores decimais antes de converter os preços em números.

Conteúdo inesperado na página

Inspecione o estado de login, as telas de consentimento e os redirecionamentos. Confirme que as configurações de idioma e de região correspondem à visualização pretendida.

Registros duplicados

Normalize URLs equivalentes e use identificadores de produto estáveis. Preserve as diferenças relevantes entre variantes, regiões e horários de coleta.

Limites de requisições recorrentes

Identifique o serviço que retorna 429. Reduza a frequência de requisições e a concorrência, respeite o Retry-After e limite as novas tentativas com intervalos crescentes.

Mudanças de layout

Atualize as regras de extração ou use o reparo de preset configurado e, em seguida, verifique manualmente o resultado revisado na página.

Depois de alterar um preset do Yozh, execute de novo uma amostra pequena antes de reiniciar a coleta completa. Para o tratamento detalhado de novas tentativas, consulte 429 too many requests.

O screen scraping é legal?

O screen scraping pode ser legal, mas a legalidade depende da fonte, do método de acesso, do tipo de dado, da jurisdição e do uso pretendido. Poder ver uma página não autoriza automaticamente todas as formas de coleta ou reutilização.

Antes de executar uma tarefa, revise os termos contratuais do site, as restrições de acesso e quaisquer permissões ou licenças necessárias. Respeite as diretivas do robots.txt, mas lembre-se de que uma regra Allow não concede, por si só, permissão legal para coletar ou reutilizar conteúdo. Verifique os direitos autorais e os direitos sobre bases de dados aplicáveis antes de republicar ou vender o material extraído.

Se você coletar informações pessoais, cumpra as normas de proteção de dados aplicáveis, incluindo o GDPR quando ele se aplicar. Informações visíveis publicamente ainda podem ser protegidas, como destacaram reguladores internacionais de privacidade. Estabeleça uma base legal válida para o tratamento e colete apenas os dados pessoais necessários para a finalidade declarada.

As obrigações de privacidade também continuam relevantes. Reguladores internacionais de privacidade destacaram que informações pessoais acessíveis publicamente ainda podem ser protegidas por leis de proteção de dados.

Neste exemplo, mantenha o Yozh Scraper limitado às páginas de prática selecionadas e aos campos de produto. Em trabalhos de produção, documente o escopo permitido, colete apenas os dados necessários, restrinja o acesso aos registros armazenados e defina regras de retenção e exclusão. Inclua nesses controles o HTML e as capturas de tela salvos, pois eles podem registrar informações adicionais.

Útil?

Compartilhar artigo

Perguntas frequentes sobre screen scraping