como importar dados de um site para o Excel?
é bem sabido que a World Wide Web contém enormes dados úteis. No entanto, temos que importar os dados para o Microsoft Excel antes de fazer qualquer tipo de análise. Existem dois métodos que você pode usar para concluir esse tipo de tarefa.
obtenha dados externos da Web manualmente
suponha que você deseja baixar receitas sobre os principais filmes de ganhar dinheiro nesta página da web, aqui mostra como fazê-lo facilmente.
abra o Microsoft Excel e clique na guia Dados, no grupo Obter Dados Externos, clique em Web. Depois que a nova caixa de diálogo de consulta da Web aparecer, Copie o endereço da web (http://www.the-numbers.com/movie/records/All-Time-Worldwide-Box-Office) no campo Endereço e clique no botão Ir. O Excel começará a baixar a página da web, conforme mostrado na figura 1.1. Basta clicar em não se você receberá uma caixa de aviso de erro de Script que é semelhante à da figura abaixo. A caixa desaparecerá e não terá impacto no seu processo de importação.
Figura 1.1
há uma seta na caixa amarela no canto superior direito da nova caixa de diálogo de consulta da Web. Ao clicar nele, você pode determinar se deseja mostrar ícones semelhantes antes das tabelas ou não. Por exemplo, não há ícone de seta ao lado da tabela no painel esquerdo da figura 1.2. E haverá um ícone (no painel direito) depois de clicar no botão de seta para mostrar ícones.
figura 1.2
clique no ícone de seta ao lado das tabelas que deseja selecionar. Os ícones e tabelas serão alterados e semelhantes aos mostrados no painel esquerdo da figura 1.3. Depois de clicar em Importar; uma caixa de diálogo Importar Dados será solicitada. Preencha o intervalo (da coluna a até a coluna H no nosso caso) onde deseja colocar os dados e clique em OK.
figura 1.3
os dados serão importados para o Excel depois de clicar em Ok. Se você clicar com o botão direito em qualquer célula da tabela e selecionar Atualizar, o Excel sairá e retirará os dados mais recentes de uma página da web.
figura 1.4
e você pode até definir seus dados de consulta para serem atualizados da maneira que quiser. Basta clicar com o botão direito em qualquer célula da tabela e selecionar Propriedades do intervalo de dados. Na caixa de diálogo Propriedades do intervalo de dados externos solicitado, você pode alterar as configurações de controle de atualização para alterar o estilo. Por exemplo, você pode especificar a consulta a ser atualizada a cada 60 minutos ou quando o arquivo é aberto.
Raspe dados usando a programação VBA
a programação VBA pode ser usada para raspar dados de uma página da web. É muito mais útil, embora difícil ao comparar com a primeira abordagem. Além disso, você precisa entender o que é HTML antes de aprender a raspar dados usando a programação VBA. Eu recomendo que você aprenda conhecimentos básicos de HTML a partir deste site se você não sabe nada ou pouco sobre HTML. E a partir daqui, você pode aprender quase tudo relacionado à raspagem da web usando o VBA. Este artigo mostrará apenas dois exemplos.
Raspe dados de uma página da web
suponha que queremos extrair o nome da empresa, o endereço de E-mail e o nome do contato desta página da web. Se você abrir esta página da web, descobrirá que há um bloco de contato na parte inferior. A Figura 2.1 mostra o bloco de contato e o código-fonte correspondente. Informações em caixas vermelhas é o que queremos precisar. E aqueles com um sublinhado verde são exatamente o que precisamos extrair.
Figura 2.1
o código a seguir pode ajudá-lo a extrair as informações solicitadas acima e colocá-las na primeira planilha.
código-Fonte |
Sub Retrieve_Click() 'Criar InternetExplorerSet IE = CreateObject("InternetExplorer.Aplicação") ' não vamos ver o windowIE navegador.Visível = falso ' abra a página da web.Navegue" http://www.austrade.gov.au/SupplierDetails.aspx?ORGID=ORG8160044431&folderid=1736 " 'espere enquanto o IE está carregando enquanto o IE.readyState <> 4 ou IE.Busy = True DoEvents Loop ' recuperar nome da empresa, endereço de E-mail & informações de contatoset contactobj = IE.documento.getElementsByClassName ("bloco de detalhes de contato escuro") htext = contactobj (0).innerHTML MsgBox htext se InStr (htext, " <p > nome da empresa:") então ThisWorkbook.Planilhas (1).Células(1, 1) = Split(Split(htext, "<p>Nome da Empresa: ")(1), "<br")(0) End If If InStr(htext, "mailto:"), em Seguida, Estelivro.Planilhas (1).Células(2, 1) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) fim se se InStr (htext, " <P > nome:") então ThisWorkbook.Planilhas (1).Células(3, 1) = Divisão (Divisão (htext, " <p > Nome: ")(1), "<br") (0) terminar se Esteworkbook.Planilhas (1).Células(4, 1) = IE.LocationURL ThisWorkbook.Salvar conjunto IE = nada definido contactobj = nada Final Sub
“ou seja.documento.getElementsByClassName (“contact-details block dark”) ” pode permitir que você obtenha todos os elementos com a classe name – contact-details block dark. Esta página da web lista quase todas as propriedades e métodos que podem ser usados em elementos HTML. Você pode escolher o apropriado para o seu próprio problema.
a propriedade innerHTML pode permitir que você defina ou retorne o conteúdo de um elemento HTML. No nosso caso, ele retornou o conteúdo do elemento com o nome da classe “contact-details block dark” e o definiu como uma variável htext. O conteúdo (figura 2.2) pode ser solicitado por ‘MsgBox htext’.
figura 2.2
você pode ver que o texto está bem estruturado. É por isso que podemos usar a função SPLIT para extrair o que precisa. Por exemplo, se tomarmos ” <p >nome da empresa:”como delimitador e fórmula” Split (htext, ” < p > nome da Empresa:”) (1) “pode retornar todo o texto após”<p>nome da empresa:”. Para este texto recém-retornado, podemos pegar “< br ” como um delimitador e obter o texto antes do primeiro “<br” e esse é o nome da empresa. Em resumo, SPLIT function é uma ferramenta flexível que você pode usar para extrair quase tudo. Outras funções úteis incluem Len, INSTR, esquerda, direita, meados e substituir. Não vou discutir em detalhes aqui.
depois de clicar em OK na Figura 2.2, os dados solicitados podem ser importados da web para uma planilha do Excel. Por exemplo, a célula A1 contém o nome da Empresa, enquanto a célula A4 contém o endereço da página da Web da empresa.
figura 2.3
ao adicionar o código abaixo antes de salvar a pasta de trabalho, você pode adicionar um hiperlink à célula A4.
código-Fonte |
'Adicionar hyperlinkThisWorkbook.Planilhas (1).Hiperlinks.Adicionar ThisWorkbook.Planilhas (1).Células (4, 1), Esteworkbook.Planilhas (1).Células(4, 1)
se você clicar na célula A4, poderá revisitar a página da web. Isso é útil especialmente quando você precisa recuperar dados para muitas empresas. Como você pode clicar em qualquer hiperlink para revisitar a página da Web correspondente e adicionar ou atualizar qualquer informação manualmente durante a revisão posteriormente.
Figura 2.4
Interagir com páginas web
O exemplo acima ilustra apenas sobre como recuperar dados de uma página da web estática. Mas, na maioria das vezes, somos obrigados a extrair interagiram com páginas da web, a fim de recuperar uma grande quantidade de dados. Veja a Figura 3.1. Ele mostra como chegar à página da web do exemplo acima. Você pode ver que existem muitos setores e, para cada setor, existem muitas empresas. Por exemplo, existem 651 empresas na indústria do agronegócio. O que devemos fazer se quisermos extrair as informações de contato de todas as empresas de todos os setores?
Figura 3.1
bem, o ponto-chave é que como fazer o VBA interagir com páginas da web como o que fazemos manualmente. Vamos aproveitar a vantagem da S. W. I. S como exemplo. Geralmente, esperamos que o Excel possa clicar no Agronegócio (Painel superior da Figura 3.1) e, assim, acionar o IE para nos direcionar para a segunda página da web. Na segunda página da web (painel inferior da Figura 3.1), o Excel pode clicar em S. W. I. S Vantagem e, em seguida, IE nos orienta para a página, como mostrado na Figura 2.1, para que possamos recuperar informações de contato de S. W. I. S de Vantagem.
depois de inserir o seguinte código no editor do Visual Basic e enviar o código, você verá que seu IE está aberto. A primeira página da web aparece seguida pela segunda página da web. Aqui você aprenderá como obter o elemento de lista suspensa, Selecionar uma opção e acionar um evento depois de selecionar a opção. “m = IE.documento.getElementsByTagName (“opção”).Comprimento-1 ” lhe dará um número total de opções. Isso pode ser usado para o próximo loop.
código-Fonte |
Sub recuperar() 'Criar InternetExplorerSet IE = CreateObject("InternetExplorer.Aplicação") ' vamos ver o windowIE navegador.Visível = verdadeiro ' abra a página da web.Navegue" http://www.austrade.gov.au/international/buy# " 'espere enquanto o IE está loadingDo enquanto o IE.Aplicação Ocupada.Aguarde DateAdd ("s", 1, Agora) aplicação Loop.Espere (agora + TimeValue("00:00:10")) 'Parte 1-Selecione a lista suspensa e acione o evento depois de selecionar um optionset selectobj = IE.documento.getElementsByTagName ("selecionar") m = IE.documento.getElementsByTagName ("opção").Comprimento-1 selectobj(0).selectedIndex = 1 selectobj(0).FireEvent ("onchange") 'espere enquanto o IE está carregando enquanto o IE.readyState <> 4 ou IE.Ocupado = Aplicação Verdadeira.Aguarde DateAdd ("s", 1, Agora) aplicação Loop.Espere (agora + TimeValue("00:00:10")) End Sub
esta parte do código pode direcioná-lo para a página da web mostrada na Figura 2.1 após o Excel clicar no primeiro nome. Todos os nomes das empresas estão incluídos no elemento com o nome da classe de “nome”. Searchobj é uma coleção e searchobj (I)pode retornar o (i+1) th objeto. Por exemplo, searchobj(1).Clique pode permitir que você visite a página da web para RIDLEY CORPORATION (Melbourne).
código-Fonte |
'Parte 2 - Selecionar a empresa NameSet searchobj = IE.documento.getElementsByClassName ("nome") searchobj (0).Clique em ' aguarde enquanto o IE está carregandofaça enquanto o IE.readyState <> 4 ou IE.Ocupado = verdadeiro Loop DoEvents
por fim, aqui está todo o código que pode mostrar o processo de abertura do IE, navegação em páginas da web e extração de dados. Os dados extraídos serão os mesmos da figura 2.4.
código-Fonte |
Sub Recuperar() 'Criar InternetExplorerSet IE = CreateObject("InternetExplorer.Aplicação") ' vamos ver o windowIE navegador.Visível = verdadeiro ' abra a página da web.Navegue" http://www.austrade.gov.au/international/buy# " 'espere enquanto o IE está loadingDo enquanto o IE.Aplicação Ocupada.Aguarde DateAdd ("s", 1, Agora) aplicação Loop.Espere (agora + TimeValue("00:00:10")) 'Parte 1-Selecione a lista suspensa e acione o evento depois de selecionar um optionset selectobj = IE.documento.getElementsByTagName ("selecionar") m = IE.documento.getElementsByTagName ("opção").Comprimento-1 selectobj(0).selectedIndex = 1 selectobj(0).FireEvent ("onchange") 'espere enquanto o IE está carregando enquanto o IE.readyState <> 4 ou IE.Ocupado = Aplicação Verdadeira.Aguarde DateAdd ("s", 1, Agora) aplicação Loop.Espere (agora + TimeValue("00:00:10")) 'Parte 2-Selecione o nome da empresaset searchobj = IE.documento.getElementsByClassName ("nome") searchobj (0).Clique em ' aguarde enquanto o IE está carregandofaça enquanto o IE.readyState <> 4 ou IE.Busy = True DoEvents Loop 'Parte 3-recupere o nome da empresa, endereço de E-mail & informações de contatoset contactobj = IE.documento.getElementsByClassName ("bloco de detalhes de contato escuro") htext = contactobj (0).innerHTML se InStr (htext, " <p > nome da empresa:") então ThisWorkbook.Planilhas (1).Células(1, 1) = Split(Split(htext, "<p>Nome da Empresa: ")(1), "<br")(0) End If If InStr(htext, "mailto:"), em Seguida, Estelivro.Planilhas (1).Células(2, 1) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) fim se se InStr (htext, " <P > nome:") então ThisWorkbook.Planilhas (1).Células(3, 1) = Divisão (Divisão (htext, " <p > Nome: ")(1), "<br") (0) terminar se Esteworkbook.Planilhas (1).Células(4, 1) = IE.LocationURL ' adicionar hyperlinkThisWorkbook.Planilhas (1).Hiperlinks.Adicionar ThisWorkbook.Planilhas (1).Células (4, 1), Esteworkbook.Planilhas (1).Células(4, 1) End Sub
Na verdade, o que precisamos fazer é extrair informações de contato para todas as empresas de todos os setores, portanto, precisamos fazer uso para a instrução de ciclo para concluir esta tarefa. A seguir está o código completo. E você também pode encontrar o código em Recuperar informações de contato para todas as empresas.xlsm que você pode baixar no final deste artigo.
código-Fonte |
Sub Recuperar() Para idex = 2 A 18 " Criar InternetExplorerSet IE = CreateObject("InternetExplorer.Aplicação") ' vamos ver o windowIE navegador.Visível = falso ' abra a página da web.Navegue" http://www.austrade.gov.au/international/buy# " 'espere enquanto o IE está loadingDo enquanto o IE.Aplicação Ocupada.Aguarde DateAdd ("s", 1, Agora) aplicação Loop.Espere (agora + TimeValue("00:00:10")) idexn = idex-1 ' Parte 1-Selecione dropdownSet selectobj = IE.documento.getElementsByTagName ("selecionar") m = IE.documento.getElementsByTagName ("opção").Comprimento-1 selectobj(0).selectedIndex = idexn selectobj(0).FireEvent ("onchange") 'espere enquanto o IE está carregando enquanto o IE.readyState <> 4 ou IE.Ocupado = Aplicação Verdadeira.Aguarde DateAdd ("s", 1, Agora) aplicação Loop.Espere (agora + TimeValue("00:00:10")) wurl = IE.LocationURL tot = IE . documento.getElementsByClassName ("SearchTotal") (0).innerHTML pg = Int ( tot / 25) + 1 Max = (tot Mod 25) - 1 'Parte 2 - Selecione Classe = "nome"a = 2 para j = 1 para pg se j = 1 então IE.Navegue (wurl) ou seja.Navegue (wurl& "&pg=" & j) Termine Se fizer enquanto IE.Aplicação Ocupada.Aguarde DateAdd ("s", 1, agora) Loop se j <> pg então para i = 1 A 24 set searchobj = IE.documento.getElementsByClassName ("nome") searchobj (i).Clique em ' aguarde enquanto o IE está carregandofaça enquanto o IE.readyState <> 4 ou IE.Busy = True DoEvents Loop 'Parte 3-recupere o nome da empresa, endereço de E-mail & informações de contatoset contactobj = IE.documento.getElementsByClassName ("bloco de detalhes de contato escuro") htext = contactobj (0).innerHTML ThisWorkbook.Planilhas (idex).Células(a, 1) = J ThisWorkbook.Planilhas (idex).Células(a, 2) = a - 1 Se InStr(htext, "<p>nome da empresa: ") então ThisWorkbook.Planilhas (idex).Células(a, 3) = Split(Split(htext, "<p>Nome da Empresa: ")(1), "<br")(0) End If If InStr(htext, "mailto:"), em Seguida, Estelivro.Planilhas (idex).Células (a, 4) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) fim se se InStr (htext, " <P > nome:") então ThisWorkbook.Planilhas (idex).Células(a, 5) = Divisão (Divisão (htext, " <p > Nome: ")(1), "<br") (0) terminar se Esteworkbook.Planilhas (idex).Células (a, 6) = IE.LocationURL IE.GoBack fazer enquanto IE.Aplicação Ocupada.Aguarde DateAdd ("s", 1, agora) Loop a = a + 1 Próximo i Mais para i = 0 para Max set searchobj = IE.documento.getElementsByClassName ("nome") searchobj (i).Clique em ' aguarde enquanto o IE está carregandofaça enquanto o IE.readyState <> 4 ou IE.Busy = True DoEvents Loop 'Parte 3-recupere o nome da empresa, endereço de E-mail & informações de contatoset contactobj = IE.documento.getElementsByClassName ("bloco de detalhes de contato escuro") htext = contactobj (0).innerHTML ThisWorkbook.Planilhas (idex).Células(a, 1) = J ThisWorkbook.Planilhas (idex).Células(a, 2) = a - 1 Se InStr(htext, "<p>nome da empresa: ") então ThisWorkbook.Planilhas (idex).Células(a, 3) = Split(Split(htext, "<p>Nome da Empresa: ")(1), "<br")(0) End If If InStr(htext, "mailto:"), em Seguida, Estelivro.Planilhas (idex).Células (a, 4) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) fim se se InStr (htext, " <P > nome:") então ThisWorkbook.Planilhas (idex).Células(a, 5) = Divisão (Divisão (htext, " <p > Nome: ")(1), "<br") (0) terminar se Esteworkbook.Planilhas (idex).Células (a, 6) = IE.LocationURL ThisWorkbook.Planilhas (idex).Hiperlinks.Adicionar ThisWorkbook.Planilhas (idex).Células (a, 6), Esteworkbook.Planilhas (idex).Células (a, 6) IE.GoBack fazer enquanto IE.Aplicação Ocupada.Aguarde DateAdd ("s", 1, agora) Loop a = a + 1 Próximo eu termino se Esteworkbook.Salvar próximo J Set IE = nada set contactobj = nada próximo IDEX End Sub
o único ponto que preciso explicar é ilustrado na Figura 3.2. Uma web pode listar apenas até 25 empresas. Quando o número total de empresas for superior a 25, haverá mais de uma página. A Figura 3.2 mostra que existe uma regra para obter o endereço das páginas após a primeira página. É o resultado do endereço concatenante da primeira página, “&pg=” e o número real da página. E para todas as páginas antes da última página, o número total do objeto é 25. “Ou seja.documento.getElementsByClassName (“SearchTotal”) (0).innerHTML ” pode retornar o número total de empresas dentro de um setor. No nosso caso, será 651. “Int (tot / 25) + 1” pode obter o número total de páginas. E “Max = (tot Mod 25) – 1” pode retornar o número máximo de empresas na última página. Vou parar por aqui e deixar você descobrir como aplicar essa ideia ao código. É uma abordagem muito melhor para você entender o código. Você pode deixar um comentário se tiver dúvidas.
Figura 3.2
aqui mostra parte do excel final. As informações de contato para todas as empresas de um setor são reunidas em uma planilha.
figura 3.3
- como extrair dados do site para o Excel automaticamente?
- Importação de Dados (Frase, Parágrafos, Tabelas, Comentários) do Word para o Excel
- 6 Melhores Excel VBA Livros de Programação (Para Iniciantes & Usuários Avançados)
- Aprender Excel VBA Programação & Macros (Gratuito Tutorial – Passo-a-Passo)
- Excel VBA Dicas de Codificação
- o Que Você Pode Fazer com o VBA
- Introdução a Macros VBA
Importar arquivo de trabalho
faça o Download do arquivo de trabalho a partir do link abaixo.
Pull-Data-from-Web-to-Excel.rar