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:
- Conectam-se a uma página da web em um navegador.
- Analisam seu conteúdo HTML.
- Extraem dados dela.
- 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:
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:
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:
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\
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:
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:
Em seguida, selecione “Opções” conforme mostrado abaixo:
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”:
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”:
Isso abrirá a seguinte janela:
Aqui, clique em “Inserir” no menu superior e depois em “Módulo” para inicializar seu módulo de extração de dados no VBA:
Você deveria estar vendo isto agora:
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…”
Na janela pop-up, localize a “Biblioteca tipo Selenium” e verifique-a:
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:
Isso abrirá a seguinte janela do Edge:
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”:
Aqui, você pode ver que cada elemento HTML de país é
.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á:
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”:
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!
Não é necessário cartão de crédito