Web Scraping no Excel: Power Query, VBA e Métodos de API
Advanced Data Extraction Specialist
TL;DR:
- Use Power Query quando uma página expuser uma tabela HTML estável ou um endpoint JSON; isso dá ao Excel uma transformação atualizável e documentada.
- Use VBA quando os usuários da pasta de trabalho precisarem de uma importação acionada por botão ou uma transferência controlada de CSV. Evite que o VBA analise a marcação da página em mudança.
- Para páginas renderizadas em JavaScript ou validadas por tráfego, adquira o conteúdo primeiro com uma API e depois permita que o Excel transforme os dados retornados.
- O design mais mantível separa a aquisição da análise: o serviço fonte retorna um esquema estável, e o Excel é responsável por filtragens, junções, pivôs e gráficos.
A raspagem de dados na Excel pode significar quatro trabalhos muito diferentes: copiar uma tabela uma vez, atualizar uma tabela pública, chamar uma API JSON ou alimentar uma pasta de trabalho a partir de uma página que requer renderização de navegador. Escolher a ferramenta com base no comportamento da página é mais confiável do que escolhê-la pela familiaridade.
Este guia abrange Power Query, VBA e um caminho baseado em API. Os exemplos estão limitados a dados públicos que o projeto tem permissão para coletar. Não os use para acessar informações pessoais, autenticadas, privadas ou restritas sem autorização explícita.
Escolha o método antes de construir a pasta de trabalho
| Comportamento da fonte | Melhor caminho no Excel | Atualizável | Nível de codificação | Principal limitação |
|---|---|---|---|---|
| Tabela visível pequena, única | Copiar e colar | Não | Nenhum | Manual e difícil de reproduzir |
| Tabela HTML estável | Power Query: Da Web | Sim | Baixo | Pode não ver conteúdo renderizado pelo cliente |
| Endpoint JSON ou CSV público | Power Query ou VBA | Sim | Médio | Requer um contrato de resposta estável |
| Página pública renderizada em JavaScript | API de aquisição, depois Power Query | Sim | Médio | Necessita de um serviço externo |
| Fluxo de trabalho acionado por botão na pasta de trabalho | VBA chamando um endpoint CSV ou JSON | Sim | Médio | Segurança e manutenção de macro |
A regra prática é simples: mantenha o Excel responsável pela transformação tabular, não pela emulação do navegador. Quando uma página da web é a camada de apresentação em vez da fonte de dados, procure um endpoint documentado ou coloque um serviço de aquisição à frente da pasta de trabalho.
Método 1: Importar uma tabela visível com Power Query
O fluxo suportado pela Microsoft é Dados > Da Web, seguido da seleção de uma tabela detectada no Navegador e carregando-a na pasta de trabalho. A sequência completa aparece no guia de importação da web da Microsoft.
Passo a passo
- Abra uma pasta de trabalho e selecione Dados.
- Escolha Da Web no grupo Obter e Transformar Dados.
- Cole a URL pública permitida.
- Selecione a tabela no Navegador.
- Escolha Transformar Dados se as colunas precisarem ser limpas, ou Carregar para escrevê-la diretamente em uma planilha.
- Renomeie a consulta e a tabela para que seu propósito fique claro.
- Selecione Atualizar quando a fonte precisar ser buscada novamente.
O Power Query armazena os passos de transformação. Isso é importante porque uma consulta reprodutível pode remover colunas, definir tipos, dividir texto e juntar dados de referência da mesma forma em cada atualização. A Microsoft também documenta que uma tabela da web carregada pode ser atualizada com Atualização de Consulta no mesmo fluxo de atualização do Excel.
Quando Da Web não retorna uma tabela útil
A página pode renderizar seus dados com JavaScript após a chegada do HTML inicial. Também pode expor os valores por meio de um pedido XHR ou fetch em vez de uma tabela HTML. Nesses casos, o resultado do Navegador pode estar vazio, embora o navegador mostre linhas.
Abra as ferramentas de desenvolvimento do navegador apenas para identificar um endpoint de dados documentado e permitido—não para contornar controles de acesso. Se um endpoint JSON estável existir, o Power Query pode chamá-lo diretamente. Se for necessária validação de tráfego ou renderização pelo navegador, use o método baseado em API mais adiante neste guia.
Método 2: Chamar JSON com Power Query M
A função Web.Contents do Power Query realiza solicitações HTTP e retorna uma resposta binária que pode ser passada para Json.Document. A Microsoft documenta suas opções de solicitação, incluindo Headers, Content, RelativePath, Query e ApiKeyName, no referência do Web.Contents.
Pré-requisitos
- Excel com Power Query
- Um token da API Scrapeless inserido por meio do diálogo de credenciais da Web da pasta de trabalho
- Uma URL pública permitida
- Um envelope de resposta JSON conhecido
O seguinte bloco de Power Query M é um exemplo de lacuna em pré-requisitos porque precisa do token e do alvo do leitor. Ele chama a API Universal Scraping, lê o HTML retornado de data e produz uma tabela de uma linha que pode alimentar um analisador posterior ou planilha de auditoria.
powerquery
let
Endpoint = "https://api.scrapeless.com",
TargetUrl = Excel.CurrentWorkbook(){[Name="AuthorizedTargetUrl"]}[Content]{0}[Column1],
Payload = Json.FromValue([
actor = "unlocker.webunlocker",
proxy = [country = "ANY"],
input = [
url = TargetUrl,
jsRender = [
enabled = true,
response = [type = "html", options = []]
]
]
]),
Raw = Web.Contents(
Endpoint,
[
RelativePath = "api/v2/unlocker/request",
Headers = [
#"Content-Type" = "application/json"
],
Content = Payload,
ApiKeyName = "x-api-token"
]
),
Envelope = Json.Document(Raw),
Checked = if Envelope[code] = 200 and Envelope[data] <> null
then Envelope[data]
else error "The acquisition response did not contain page data",
Output = #table(
{"source_url", "html"},
{{TargetUrl, Checked}}
)
in
Output
Após criar a consulta, escolha Web API quando o Excel pedir credenciais e cole o token lá. ApiKeyName especifica o nome do parâmetro mantendo o segredo fora da fonte M. A operação de credenciais está ilustrada no exemplo seguro de API-key da Microsoft.
A forma atual da solicitação da API e as opções do JavaScript também estão disponíveis na documentação do Scrapeless JS Render.
Transformar HTML retornado em colunas estáveis do Excel
Carregar um documento HTML completo em uma célula é uma ponte de diagnóstico, não o conjunto de dados final. As planilhas de produção devem receber um esquema compacto.
Por exemplo:
| Coluna | Tipo | Significado |
|---|---|---|
source_url |
Texto | Página canônica coletada |
collected_at |
Data/Hora | Hora da aquisição |
name |
Texto | Nome da entidade normalizada |
price |
Decimal | Preço numérico sem símbolos de moeda |
currency |
Texto | Código de moeda ISO |
availability |
Texto | Estado de disponibilidade normalizado |
Há duas maneiras limpas de alcançar esse contrato:
- Pedir à camada de aquisição que retorne campos estruturados.
- Analisar o HTML retornado fora do Excel, e então expor JSON ou CSV para o Power Query.
Ambas reduzem a dependência da planilha em relação ao markup da página. Uma planilha que espera seis campos nomeados é mais fácil de testar do que uma que contém dezenas de seletores e etapas de limpeza de texto.
Se a página precisar de renderização em JavaScript antes que esses campos existam, teste a Universal Scraping API com uma URL autorizada antes de redesenhar a planilha.
Método 3: Usar VBA para uma transferência controlada de CSV
O VBA é útil quando um analista precisa de um botão que importa um arquivo em uma planilha conhecida. Mantenha a aquisição da web fora da macro e permita que a macro consuma uma URL CSV estável. Isso evita acoplar uma planilha a HTML em mudança.
Pré-requisitos
- Excel para Desktop com macros habilitadas sob a política da organização
- Um endpoint HTTPS permitido que retorna CSV em UTF-8
- Uma planilha chamada
ImportedData - Uma faixa nomeada
CsvEndpointcontendo a URL do endpoint
O bloco é uma lacuna de pré-requisitos porque o endpoint e a política da planilha são específicos para o ambiente do leitor.
vb
Option Explicit
Public Sub ImportCsv()
Dim endpoint As String
Dim target As Worksheet
Dim query As QueryTable
endpoint = ThisWorkbook.Names("CsvEndpoint").RefersToRange.Value
Set target = ThisWorkbook.Worksheets("ImportedData")
target.Cells.ClearContents
Set query = target.QueryTables.Add( _
Connection:="TEXT;" & endpoint, _
Destination:=target.Range("A1"))
With query
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFilePlatform = 65001
.RefreshStyle = xlOverwriteCells
.Refresh BackgroundQuery:=False
End With
End Sub
Esta macro é deliberadamente estreita: ela importa um contrato CSV e deixa a lógica de aquisição, renderização e acesso para o serviço que os possui. Se o endpoint precisar de autenticação personalizada, o armazenamento de credenciais do Power Query geralmente é uma opção melhor do que incorporar um token no VBA.
A Microsoft documenta que Workbook.RefreshAll atualiza áreas de dados externas e relatórios de Tabela Dinâmica na referência Excel VBA RefreshAll. Isso pode suportar um botão de atualização a nível de planilha após cada consulta ter sido configurada e testada.
Web scraping com foco em API no Excel
Um design com foco em API tem duas etapas:
- Adquirir e validar a página: renderizar JavaScript onde necessário, lidar com validação de tráfego e confirmar que o conteúdo esperado foi retornado.
2. **Transformar e analisar no Excel:** molde a resposta em colunas, junte tabelas de consulta, construa pivôs e publique gráficos.
A [Universal Scraping API](https://www.scrapeless.com/pt/product/universal-scraping-api?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel) foi criada para a primeira etapa. O Power Query continua sendo o conector voltado para a planilha. Este limite permite que as equipes mudem o método de aquisição sem reconstruir cada fórmula e gráfico.
Use a [página de preços da Scrapeless](https://www.scrapeless.com/pt/pricing?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel) para comparar o custo do serviço com o tempo de engenharia necessário para operar a infraestrutura do navegador. Para ter uma visão mais ampla dos formatos de resposta que se adequam aos pipelines do Excel, consulte a [atualização do formato de resposta da Universal Scraping API](https://www.scrapeless.com/pt/blog/response-formats-update?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel).
## Problemas comuns e soluções
### O Navegador não mostra tabelas
É provável que a página não esteja expondo uma tabela HTML estável na resposta inicial. Procure uma fonte JSON ou CSV permitida. Se os valores aparecerem apenas após o JavaScript, use uma camada de aquisição que retorne o conteúdo completo.
### A atualização retorna um erro de nível de privacidade
O Power Query isola fontes de dados de acordo com as configurações de privacidade. Revise a configuração de fonte da planilha e evite combinar dados organizacionais privados com uma fonte pública, a menos que a política permita.
### Uma consulta funciona em um computador, mas não em outro
Verifique a edição do Excel, configurações de autenticação, intervalos nomeados, política de macros e requisitos de gateway. As credenciais são específicas do ambiente e não devem ser transportadas dentro do arquivo da planilha.
### A planilha carrega uma página de desafio
Adicione uma validação em nível de conteúdo antes da transformação. Exija o campo JSON esperado, cabeçalho CSV ou marcador da página. Rejeite qualquer resposta que não satisfaça esse contrato.
### Os tipos de coluna mudam após a atualização
Aplique tipos de dados explícitos no Power Query após a etapa de fonte. Mantenha símbolos de moeda, separadores específicos de local e valores ausentes fora das colunas numéricas.
### A atualização demora muito
Reduza os dados antes que cheguem ao Excel. Filtre por data ou identificador na fonte, solicite apenas os campos necessários e carregue consultas intermediárias como conexão apenas quando as planilhas não precisarem delas.
## De um protótipo de planilha a um feed de produção
Uma progressão útil é:
1. Provar uma URL e uma linha manualmente.
2. Criar um Power Query com nomes e tipos de coluna explícitos.
3. Adicionar validação de conteúdo e uma aba de erros.
4. Mover renderização e análise HTML para o serviço de aquisição.
5. Publicar JSON ou CSV com um esquema versionado.
6. Agendar a coleta fora do Excel e manter a atualização da planilha focada na análise.
Isso mantém a planilha útil sem transformá-la em um navegador web não monitorado. A planilha se torna um consumidor de dados limpos, o que é um papel que o Excel desempenha bem.
## Conclusão: deixe o Excel analisar, não emular um navegador
O Power Query é a escolha padrão para tabelas HTML atualizáveis e APIs JSON. O VBA é valioso para importações controladas acionadas pelo usuário. Quando uma fonte permitida depende de JavaScript ou validação de tráfego, use uma API de aquisição e forneça ao Excel um contrato de dados estável.
Para construir esse limite, [crie uma conta na Scrapeless](https://app.scrapeless.com/passport/login?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel), teste a Universal Scraping API com uma URL pública, defina os campos que a planilha precisa e faça desses campos o contrato de atualização.
## Perguntas Frequentes
### O Excel pode extrair dados de um site sem código?
Sim. O conector From Web do Power Query pode importar muitas tabelas HTML visíveis através de um fluxo de trabalho gráfico. É mais adequado para páginas públicas estáveis que expõem a tabela em seu HTML inicial.
### Por que o Power Query mostra uma página em branco?
Os valores podem ser renderizados pelo JavaScript após a resposta inicial, carregados de um endpoint separado ou substituídos por uma página de validação de tráfego. Inspecione o comportamento da fonte e escolha o método de aquisição de acordo.
### O Power Query é melhor que o VBA para web scraping?
O Power Query geralmente é melhor para transformação de dados atualizáveis e gerenciamento de credenciais. O VBA é útil para botões de planilha e importações de arquivos controladas, mas é um lugar frágil para manter a análise HTML.
### O Power Query pode chamar uma API JSON?
Sim. `Web.Contents` pode buscar uma resposta, e `Json.Document` pode analisá-la em registros, listas e tabelas. Use a caixa de diálogo de credencial em vez de armazenar segredos da API no código M.
### Como uma planilha pode lidar com páginas renderizadas em JavaScript?
Use um serviço de aquisição capaz de renderizar para retornar HTML, JSON ou CSV e conecte o Power Query a essa saída. Isso mantém o comportamento do navegador fora da planilha.
### Com que frequência o Excel deve atualizar os dados extraídos?
Ajuste a frequência de atualização ao necessário para o negócio, à permissão de origem e à capacidade do serviço. Para coletas agendadas ou de alto volume, execute a aquisição fora do Excel e deixe a pasta de trabalho atualizar a partir de um conjunto de dados preparado.
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.



