Guia de extração de dados da web com VBA

Descubra o potencial do Excel para a extração de dados da web com o VBA: uma maneira poderosa de automatizar a coleta de dados diretamente em suas planilhas.
15 min read
Web Scraping with Excel VBA main blog image

Neste guia de extração de dados com Excel, mostraremos:

  • O que é VBA.
  • Se um módulo VBA personalizado permite recuperar dados da web.
  • Como lidar com a extração de dados da web no Excel após o fim do suporte do Internet Explorer.
  • Como escrever código em VBA para extração de dados usando o Selenium.
  • A abordagem antiga para a recuperação de dados online no Excel.

Vamos lá!

O que é VBA?

VBA, abreviação de Visual Basic for Applications, é uma linguagem de programação desenvolvida pela Microsoft. Seu objetivo é permitir que os usuários automatizem tarefas e escrevam funções personalizadas em diversos aplicativos do Microsoft Office, incluindo Excel, Word e Access.

No Excel, o VBA pode ser usado para definir macros complexas que interajam com os dados nas células da planilha. Com o VBA, é possível aumentar a produtividade, simplificar os fluxos de trabalho e estender os recursos do Excel para além de suas funções integradas.

É possível realizar extração de dados da web no Excel usando o VBA?

Sim, o VBA abre as portas para a extração de dados da web diretamente no Excel. Graças ao VBA, você pode escrever módulos personalizados que:

  1. Conectam-se a uma página da web em um navegador.
  2. Analisam seu conteúdo HTML.
  3. Extraem dados dela.
  4. Escrevem os dados extraídos diretamente nas células do Excel.

É disso que se trata a extração de dados da web. Assim, a extração no VBA não é apenas possível, como também eficiente, pois importa dados diretamente para o Excel. Saiba mais sobre os prós e os contras da extração de dados no Excel na próxima seção!

Prós e contras da extração de dados no Excel

Antes de descobrir como escrever código em VBA para a extração de dados da web, vamos ver algumas vantagens e desvantagens dessa extração no Excel com VBA.

👍 Prós

  • Acesso aos recursos do Excel: os dados extraídos são importados diretamente para o Excel, permitindo que você use os recursos poderosos do programa para manipulação e análise de dados.
  • Pronto para uso: o Microsoft Office já vem com suporte pronto para o VBA. Com apenas o Microsoft Office 365 instalado em seu PC, você tem tudo o que precisa para extrair dados da web.
  • Automação multifuncional: com um script de extração de dados da web do VBA, você pode automatizar uma tarefa completa de extração, desde a recuperação até a representação dos dados no Excel.

👎 Contras

  • Alguns recursos estão disponíveis somente no Windows: pacotes de VBA para controles Active-X e automação COM estão disponíveis somente no Windows e não funcionam no Office para Mac.
  • O VBA parece antigo: o Visual Basic não é a linguagem de programação mais moderna que existe. Se você nunca trabalhou com ela, pode achar difícil usá-la devido à sua sintaxe e abordagem de codificação antigas.
  • O Internet Explorer já está obsoleto: a automação VBA COM para controlar um navegador da web é baseada no Internet Explorer, que já está obsoleto.

Como essa última dificuldade é bastante relevante, merece uma análise mais aprofundada.

Como lidar com a descontinuação do Internet Explorer na extração de dados com o VBA?

A abordagem antiga para escrever código em VBA para a extração de dados da web costumava depender da interface de automação COM que vem com o objeto InternetExplorer. Ela fornecia tudo o que você precisava para visitar um site no Internet Explorer, analisar seu conteúdo HTML e extrair dados dele. O problema é que o Internet Explorer deixou de receber suporte em 15 de junho de 2022.

Em outras palavras, as versões mais recentes do Windows nem vêm com o Internet Explorer. Como resultado, o uso do objeto InternetExplorer em um script do VBA resultará em um erro. Como o Edge é o substituto do Internet Explorer, você pode estar pensando em usar o objeto equivalente no VBA. No entanto, o Edge não vem com a interface de automação COM. Portanto, não é possível controlá-lo programaticamente como se fazia com o Internet Explorer.

Em vez disso, o Edge oferece suporte à automação por meio de um driver da web que pode ser controlado por meio de tecnologias de automação de navegador, como o Selenium. Portanto, a forma atualmente suportada de realizar a extração de dados da web com o VBA no Excel é usando a vinculação do Selenium para VBA. Isso permite controlar um navegador como Chrome, Edge ou Firefox.

Na seção abaixo, você criará um script de extração de dados da web para o Excel usando o Selenium e o Edge. Posteriormente, também verá o trecho de código da abordagem antiga, que não exige nenhuma dependência de terceiros.

Como escrever código em VBA para extração de dados usando o Selenium

Nesta seção do tutorial, você aprenderá como realizar a extração de dados da web com o Excel no VBA usando o SeleniumBasic, a vinculação da API do Selenium para VBA.

O site de destino será o sandbox de países do Scrape This Site, que contém uma lista de todos os países do mundo:

Página do sandbox de países do Scrape This Site

O objetivo do extrator de dados VBA será recuperar automaticamente esses dados e gravá-los em uma planilha do Excel.

Está na hora de escrever o código em VBA!

Pré-requisitos

Verifique se você tem a versão mais recente do Microsoft Office 365 instalada em sua máquina. Esta seção se refere ao Windows 11 e à atualização do Office 2024. Ao mesmo tempo, as etapas abaixo serão as mesmas ou similares para o macOS e outras versões do Office.

Observe que a versão do Office para desktop é necessária para seguir o tutorial. A plataforma web gratuita do Microsoft 365 não oferece suporte a scripts VBA.

Etapa nº 1: instalar e configurar o SeleniumBasic

Baixe o instalador do SeleniumBasic na página de lançamentos do repositório do GitHub:

baixando o selenium basic

Clique duas vezes no instalador .exe e aguarde a conclusão do processo de instalação.

Como acontece com a maioria dos pacotes VBA, o SeleniumBasic não recebe uma atualização há anos. Por isso, ele vem com drivers da web que não funcionam mais com navegadores recentes. Para corrigir isso, você precisa substituir manualmente os arquivos executáveis dos drivers na pasta de instalação do SeleniumBasic.

Aqui, você verá como substituir o driver web do Edge, mas poderá seguir o mesmo procedimento para o Chrome e o Firefox.

Primeiro, baixe a versão estável mais recente do Microsoft Edge WebDriver:

baixando a versão estável mais recente do edge webdriver

A versão “x64” deve ser a que você está procurando.

Agora você deve ter um arquivo edgedriver_win64.zip. Descompacte-o, entre na pasta descompactada e verifique se ela contém um executável denominado msedgedriver.exe. Esse é o executável do Edge WebDriver.

Renomeie-o para “edgedriver.exe” e prepare-se para colocá-lo na pasta correta.

Abra a pasta de instalação do SeleniumBasic que você deverá encontrar em:

C:\Users\\AppData\Local\SeleniumBasic

Coloque edgedriver.exe dentro dessa pasta, substituindo o executável Edge WebDriver existente.

Perfeito! O SeleniumBasic agora poderá controlar a versão mais recente do Edge no Excel.

Etapa nº 2: abrir o Excel

Abra o menu Iniciar do Windows, digite “Excel” e clique no aplicativo “Excel”. Selecione a opção “Pasta de trabalho em branco” para criar uma nova planilha:

Como abrir uma nova planilha no Excel

No fim desta seção, ela conterá os dados extraídos.

Etapa nº 3: ativar a guia de desenvolvedor

Se você olhar a faixa de opções na parte superior, não verá nenhuma opção para criar um script VBA. Isso ocorre porque você deve primeiro habilitá-la nas configurações do Excel.

Para fazer isso, clique em “Arquivo” no canto superior esquerdo:

clicando em arquivo no canto superior

Em seguida, selecione “Opções” conforme mostrado abaixo:

selecionando opções

Na janela pop-up “Opções”, acesse a guia “Personalizar faixa de opções” e marque a opção “Desenvolvedor” na seção “Guias principais”:

marcando a opção de desenvolvedor em personalizar faixa de opções

Pressione “OK”, e uma nova guia “Desenvolvedor” aparecerá:

Etapa nº 4: inicializar um módulo de extração de dados no VBA

Clique na guia “Desenvolvedor” e pressione o botão “Visual Basic”:

na guia desenvolvedor, clicando em visual basic

Isso abrirá a seguinte janela:

a janela recém-aberta com um fundo cinza

Aqui, clique em “Inserir” no menu superior e depois em “Módulo” para inicializar seu módulo de extração de dados no VBA:

clicando no módulo na opção inserir

Você deveria estar vendo isto agora:

o novo módulo se abriu

A janela interna “Livro1 – Módulo1 (Código)” é onde você deve escrever seu código VBA para extração de dados da web.

Etapa nº 5: importar o Seleniumbasic

No menu superior, clique em “Ferramentas” e depois em “Referências…”

clicando em referências, em ferramentas

Na janela pop-up, localize a “Biblioteca tipo Selenium” e verifique-a:

verificando a biblioteca tipo selenium a partir das opções

Clique no botão “OK”, e agora você poderá usar o Selenium no Excel para realizar a extração de dados da web.

Etapa nº 6: automatizar o Edge para abrir o site de destino:

Cole o código abaixo na janela do módulo VBA:

Sub scrape_countries()

' initialize a Selenium WebDriver instance

Dim driver As New WebDriver

' open a new Edge window

driver.Start "Edge"

' navigate to the target page

driver.Get "https://www.scrapethissite.com/pages/simple/"

' wait 10 seconds before shutting down the application

Application.Wait Now + TimeValue("00:00:10")

' close the current driver window

driver.Quit

End Sub

Isso inicializa uma instância do Selenium e a utiliza para instruir o Edge a visitar a página de destino. Clique no botão Executar para testar o código:

clique no botão executar para testar o código

Isso abrirá a seguinte janela do Edge:

a janela do Edge que se abriu

Observe a mensagem “O Microsoft Edge está sendo controlado por um software de testes automatizados”, que informa que o Selenium está atuando no Edge conforme desejado.

Caso não queira que o Edge apareça, você pode ativar o modo headless (invisível) com esta linha:

driver.SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"

Etapa nº 7: inspecionar o código HTML da página

A extração de dados da web envolve a seleção de elementos HTML em uma página e a coleta de dados deles. Os seletores CSS estão entre os métodos mais populares para selecionar nós HTML. Se você é um desenvolvedor web, já deve estar familiarizado com eles. Caso contrário, conheça a documentação oficial.

Para definir seletores CSS eficazes, você deve primeiro se familiarizar com o HTML da página de destino. Então, abra o sandbox de países do Scrape This Site no navegador, clique com o botão direito do mouse em um elemento de país e selecione a opção “Inspecionar”:

usando a opção de inspeção

Aqui, você pode ver que cada elemento HTML de país é

você pode selecionar com o seguinte seletor CSS:

.country

Considerando-se um nó HTML .country, você deve visar:

  • O nome do país no elemento .country-name.
  • O nome da capital no elemento .country-capital.
  • As informações da população no elemento .country-population.
  • A área ocupada pelo país, em km², no elemento .country-area.

Esses são todos os seletores CSS necessários para selecionar os nós HTML desejados e extrair dados deles. Veja como usá-los na próxima etapa!

Etapa nº 8: escrever a lógica de extração de dados da web no VBA

Use o método FindElementsByCss() exposto pelo driver para aplicar o seletor CSS .country e selecionar todos os nós HTML de país na página:

Dim countryHTMLElements As WebElements

Set countryHTMLElements = driver.FindElementsByCss(".country")

Then, define an integer counter to keep track of the current Excel row to write data in:

Dim currentRow As Integer

currentRow = 1

Em seguida, repita os nós HTML de país, extraia os dados desejados deles e registre-os nas células do Excel usando a função Cells():

For Each countryHTMLElement In countryHTMLElements

' where to store the scraped data

Dim name, capital, population, area As String

' data retrieval logic

name = countryHTMLElement.FindElementByCss(".country-name").Text

capital = countryHTMLElement.FindElementByCss(".country-capital").Text

population = countryHTMLElement.FindElementByCss(".country-population").Text

area = countryHTMLElement.FindElementByCss(".country-area").Text

' write the scraped data in Excel cells

Cells(currentRow, 1).Value = name

Cells(currentRow, 2).Value = capital

Cells(currentRow, 3).Value = population

Cells(currentRow, 4).Value = area

' increment the row counter

currentRow = currentRow + 1

Next countryHTMLElement

Perfeito! Você está pronto para dar uma olhada no código final de extração de dados no Excel.

Etapa nº 9: juntar tudo

Seu módulo de extração de dados do VBA agora deverá conter:

Sub scrape_countries()

' initialize a Selenium WebDriver instance

Dim driver As New WebDriver

' enable the "headless" mode

driver.SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"

' open a new Edge window

driver.Start "Edge"

' navigate to the target page

driver.Get "https://www.scrapethissite.com/pages/simple/"

' select all country HTML nodes on the page

Dim countryHTMLElements As WebElements

Set countryHTMLElements = driver.FindElementsByCss(".country")

' counter to the current row

Dim currentRow As Integer

currentRow = 1

' iterate over each country HTML node and

' apply the Excel scraping logic

For Each countryHTMLElement In countryHTMLElements

' where to store the scraped data

Dim name, capital, population, area As String

' data retrieval logic

name = countryHTMLElement.FindElementByCss(".country-name").Text

capital = countryHTMLElement.FindElementByCss(".country-capital").Text

population = countryHTMLElement.FindElementByCss(".country-population").Text

area = countryHTMLElement.FindElementByCss(".country-area").Text

' write the scraped data in Excel cells

Cells(currentRow, 1).Value = name

Cells(currentRow, 2).Value = capital

Cells(currentRow, 3).Value = population

Cells(currentRow, 4).Value = area

' increment the row counter

currentRow = currentRow + 1

Next countryHTMLElement

' close the current driver window

driver.Quit

End Sub

Inicie-o e aguarde a conclusão da execução do módulo. No fim do script VBA, a planilha do Excel conterá:

a planilha do Excel contendo dados

Esse arquivo contém os mesmos dados do site de destino, mas em um formato semiestruturado. A análise e a filtragem desses dados agora serão muito mais fáceis graças aos recursos oferecidos pelo Excel.

E pronto! Em menos de 100 linhas de código VBA, você acaba de executar uma extração de dados da web com o Excel!

Saiba mais em nosso guia sobre como funciona a extração de dados da web no Excel.

Abordagem antiga de extração de dados da web em VBA com o Internet Explorer

Se você estiver usando uma versão mais antiga do Windows, poderá realizar a extração de dados em VBA com o Internet Explorer.

Tudo o que você precisa fazer é habilitar as referências “Biblioteca de Objetos HTML da Microsoft” e “Controles de Internet da Microsoft”:

habilitando a biblioteca de objetos html da Microsoft e os controles de internet da Microsoft

Observe que esses dois pacotes vêm integrados ao Excel, portanto você não precisa instalar bibliotecas adicionais desta vez.

Então, você pode obter o mesmo resultado de antes com o seguinte código VBA para extração de dados da web:

Sub scrape_countries()

' start Internet Explorer

Dim browser As InternetExplorer

Set browser = New InternetExplorer

' enable the "headless" mode

browser.Visible = False

'visit the target page

browser.navigate "https://www.scrapethissite.com/pages/simple/"

' wait for the browser to load the page

Do: DoEvents: Loop Until browser.readyState = 4

' get the current page

Dim page As HTMLDocument

Set page = browser.document

' retrieve all country HTML nodes on the page

Dim countryHTMLNodes As Object

Set countryHTMLElements = page.getElementsByClassName("country")

' counter to the current row

Dim currentRow As Integer

currentRow = 1

' iterate over each country HTML node and

' apply the Excel scraping logic

For Each countryHTMLElement In countryHTMLElements

' where to store the scraped data

Dim name, capital, population, area As String

' data retrieval logic

name = countryHTMLElement.getElementsByClassName("country-name")(0).innerText

capital = countryHTMLElement.getElementsByClassName("country-capital")(0).innerText

population = countryHTMLElement.getElementsByClassName("country-population")(0).innerText

area = countryHTMLElement.getElementsByClassName("country-area")(0).innerText

' write the scraped data in Excel cells

Cells(currentRow, 1).Value = name

Cells(currentRow, 2).Value = capital

Cells(currentRow, 3).Value = population

Cells(currentRow, 4).Value = area

' increment the row counter

currentRow = currentRow + 1

Next countryHTMLElement

' close the current Internext Explorer window

browser.Quit

End Sub

Execute esse módulo VBA, e você obterá o mesmo resultado de antes. Fantástico! Você acaba de realizar uma extração de dados da web no Excel usando o Internet Explorer.

Conclusão

Neste guia, você aprendeu o que é o VBA e por que ele permite extrair dados da web no Excel. O problema é que a biblioteca de automação de navegador VBA depende do Internet Explorer, que não recebe mais suporte. Aqui, você conheceu uma abordagem equivalente para automatizar a recuperação de dados no Excel com o VBA usando o Selenium. Além disso, você viu a abordagem anterior para versões mais antigas do Windows.

Ao mesmo tempo, lembre-se de que há muitos desafios a serem considerados ao extrair dados da internet. Especificamente, a maioria dos sites adota soluções antiscraping e antibot que podem detectar e bloquear seu script de extração de dados do VBA. Evite todas essas situações com a nossa solução Scraping Browser . Esse navegador de última geração integra-se ao Selenium e é capaz de lidar automaticamente com a resolução CAPTCHA, impressões digitais de navegadores, novas tentativas automatizadas e muito mais para você!

Não quer lidar com extração de dados da web, mas tem interesse em dados de Excel? Conheça os nossos conjuntos de dados prontos para usar. Está em dúvida sobre qual solução de dados escolher? Fale conosco hoje!