Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Consultar e copiar dados [RESOLVIDO]

A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Consultar e copiar dados [RESOLVIDO]

Mensagem por Wagner.cwb »

Boa tarde, agradeço pelo espaço e conhecimentos compartilhados pelos membros.
Estou buscando aprender sobre o selenium e VBA, no momento estou realizando uma pesquisa que consiste em
saber a nacionalidade de uma lista de periódicos científicos.

por exemplo:
ISNN
1065-9129[ISSN]

Pesquiso no link:
http://www.ncbi.nlm.nih.gov/nlmcatalog/ ... -9129[ISSN]
Objetivo é copiar
Country of Publication: United States

ISNN
1062-9769
http://www.ncbi.nlm.nih.gov/nlmcatalog/ ... -9769[ISSN]
Objetivo é copiar
Country of Publication: United States

Por favor, podem ajudar-me, tenho conhecimento mediano em excel, obrigado novamente!
Arquivo Base: https://drive.google.com/open?id=0B88ev ... ERsdE05bXc
Editado pela última vez por Wagner.cwb em Dom Out 02, 2016 2:11 am, em um total de 3 vezes.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


EvertonJunio
Colaborador
Colaborador
Mensagens: 13
Registrado em: Sex Set 23, 2016 1:13 pm

Re: Consultar e copiar dados

Mensagem por EvertonJunio »

Meu caro,

Tentei construir a planilha solicitada, mas tive algumas dificuldades.

1. Tenho que construir um código para conseguir inserir o input (NLM) para cada linha que tiver a informação.
2. A tabela que gera as informações no site não tem um nome específico no HTML para definir onde está a informação do país. Ou seja, ela é variável e não conseguir encontrar um jeito que capturar essa variável.

Não conseguir mandar a planilha por aqui, segue o código abaixo.
Baste inserir o NLM na célula A2 para ele buscar as informações.

Código: Selecionar todos

Sub TESTE()

Dim ie As Object
Dim iLin As Long
Dim NLM As String
Dim Country As String

iLin = 2

'instancia de objeto do IE e o torna visível
Set ie = CreateObject("internetexplorer.application")
ie.Visible = False

'vai para pagina que vocer quer capturar
NLM = Replace(Range("A2").Text, " ", "-")
ie.navigate "http://www.ncbi.nlm.nih.gov/nlmcatalog/?term=" & NLM


Do While ie.busy
Loop



'Copiar somente a linha "Country of Publication"

Country = ie.document.getElementsByTagName("dd")(7).innertext
Cells(iLin, "B").Value = Country


' Copiar a tabela inteira para a planilha

        'For i = 0 To tabela.Length - 1
        '
        '    NLM = tabela.Item(i).innertext
        '    Cells(iLin, "B").Value = NLM
        '    iLin = iLin + 1
        
        'Next




Set ie = Nothing

End Sub



Espero que ajude de alguma forma.


Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Consultar e copiar dados

Mensagem por Wagner.cwb »

Obrigado colega!

Toda tentativa é uma ajuda, agradeço pelo seu tempo e dedicação.
Eu sou leigo, tentei reproduzir a macro e apareceu uma mensagem
"erro tempo de execução 91 - a varialvel do bloco with nao foi definida"

Eu suspeitei da falta do End With resolveria a questao, mas persistiu.

Eu troquei o site base para http://www.dondelopublico.com/ficha/

exemplo http://miar.ub.edu/issn/0736-5853

pois, aparentemente, tem tabelas mais fáceis de serem manuseadas.


Por favor, você pode me ajudar?

abraço!


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Consultar e copiar dados

Mensagem por Mikel Silveira Fraga »

Wagner, bom dia.

Bem, com base no código que o Everton tentou construir, fiz uma adaptação para coleta do País (Country) de cada NLM.

Código: Selecionar todos

Sub CaptureCountry()

Dim ie As Object
Dim iLin As Long

'instancia de objeto do IE e o torna visível
Set ie = CreateObject("internetexplorer.application")
ie.Visible = False

'Inicia o processo de varredura da lista.
for ilin = 2 to plan1.usedrange.rows.count
	
	'Verifica se existe algum NLM informado
	'na linha atual da coluna A da planilha.
	'Caso encontre, a rotina irá interromper o laço.
	if Plan1.cells(ilin,1).value = "" then Exit for
	
	'Carrega a página atual, utilizando o endereço da coluna C.
	ie.navigate "http://www.ncbi.nlm.nih.gov/nlmcatalog/?term=" & plan1.cells(ilin,3).value

	'Aguarda carregamento da página.
	Do While ie.busy: vba.doevents: Loop
	
	'Captura o país da NLM e envia para  a planilha.
	plan1.cells(ilin, 2).value = ie.document.getElementsByTagName("dd")(7).innertext
	
next ilin

'Limpa o objeto ie
Set ie = Nothing
Não consegui testar, pois estou com umas rotinas sendo geradas e estou impossibilitado de utilizar o Excel no momento.

Favor testar a rotina e ver se irá funcionar. Qualquer coisa, nos retorne.

Abraços e excelente semana.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Consultar e copiar dados

Mensagem por Wagner.cwb »

Boa tarde Nobres!

tentei executar o código, mas ocorreu um erro na linha:

'Captura o país da NLM e envia para a planilha.
Plan1.Cells(iLin, 2).Value = ie.document.getElementsByTagName("dd")(7).innertext

Mensagem: Erro tempo execução 91 - A Variável do objeto ou variável do bloco with não foi definida.

Obrigado pela ajuda! Abraços


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Consultar e copiar dados

Mensagem por Mikel Silveira Fraga »

Wagner, bom noite.

Vi o erro que você enviou e detectei o mesmo. O que estava ocorrendo é que, dos NLM informados, nem todos possuem resultados encontrados na pesquisa da página. Quando o comando getElementsByTagName ia procurar pelo 8º elemento do tipo "dd", não encontrava, devido não ter tido retorno da pesquisa. Neste caso, tive que colocar um comando para validar se o resultado foi positivo ou não.

Outro ponto que percebi, que no comando utilizando pelo Everton, ele mencionava o 8º elemento. O problema que, de acordo com cada NLM, essa posição pode varia. Exemplo disso, o segundo NLM da lista de seu anexo, o país estava no 5º elemento. Para sanar isso, tive que realizar outro teste, onde valido o elemento "dt" e faço um teste lógico, para localizar um destes elementos com o texto começando com "Country".

Segue código corrigido.

Código: Selecionar todos

Sub CaptureCountry()

Dim ie As Object
Dim iLin, iCount As Long

'instancia de objeto do IE e o torna visível
Set ie = CreateObject("internetexplorer.application")
ie.Visible = True

'Inicia o processo de varredura da lista.
For iLin = 2 To Plan1.UsedRange.Rows.Count
   
   'Verifica se existe algum NLM informado
   'na linha atual da coluna A da planilha.
   'Caso encontre, a rotina irá interromper o laço.
   If Plan1.Cells(iLin, 1).Value = "" Then Exit For
   
   'Carrega a página atual, utilizando o endereço da coluna C.
   ie.navigate "http://www.ncbi.nlm.nih.gov/nlmcatalog/?term=" & Plan1.Cells(iLin, 3).Value

   'Aguarda carregamento da página.
   Do While ie.busy: VBA.DoEvents: Loop
      
   'Verifica se houve algum resultado da pesquisa.
   'Caso não haja, irá para a próxima linha.
   If ie.document.getelementsbytagname("dt").Length <= 0 Then GoTo nextLinha
   
   For iCount = 0 To ie.document.getelementsbytagname("dt").Length - 1
    If ie.document.getelementsbytagname("dt")(iCount).innertext Like "Country*" Then GoTo Continue
   Next iCount
   
   'Caso não encontre nada no teste acima,
   'redireciona a rotina para a próxima linha.
   GoTo nextLinha

Continue: 'Referência de continuação da captura do país.
   
   'Captura o país da NLM e envia para  a planilha.
   Plan1.Cells(iLin, 2).Value = ie.document.getelementsbytagname("dd")(iCount).innertext

nextLinha: 'Referência pra próxima linha.
   
Next iLin

'Limpa o objeto ie
Set ie = Nothing

End Sub
Espero ter ajudado.

Abraços e excelente semana.


Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Consultar e copiar dados

Mensagem por Wagner.cwb »

Obrigado Everton e Mikel, está sendo de grande ajuda.
Sou grato a Deus por vir aqui e obter o auxílio de vocês, pois sabemos o quanto é difícil encontrar tempo para ajudar e obtive a atenção de vocês, obrigado mesmo!

Há alguns detalhes "técnicos" por problemas do site base, irei tentar modificar para o http://www.dondelopublico.com/ficha/
que, aparentemente, possui elementos mais fixos.

Desculpe-me Mikel, mas não compreendi esta parte:
Outro ponto que percebi, que no comando utilizando pelo Everton, ele mencionava o 8º elemento. O problema que, de acordo com cada NLM, essa posição pode varia. Exemplo disso, o segundo NLM da lista de seu anexo, o país estava no 5º elemento. Para sanar isso, tive que realizar outro teste, onde valido o elemento "dt" e faço um teste lógico, para localizar um destes elementos com o texto começando com "Country".
Eu tentei modificar de coutry para país (termo do novo site base) e não surtiu efeito, não entendi o "dt".
Tô capenga ainda rs


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Consultar e copiar dados

Mensagem por Mikel Silveira Fraga »

Wagner, bom dia.

O que você precisa entender é que a situação da rotina é totalmente baseada na Estrutura Html da Página.

Quando mencionei "dt", estou referenciado uma Tag Html existente na estrutura da página. Se observarmos bem, as tags "dt" sempre fazem par com a estrutura "dd", sendo que a estrutura "dt" vem com o rótulo da informação (por exemplo, Country of Pulication) e, seu par, a estrutura "dd", vem com a informação relacionada ao rótulo (seguindo o mesmo exemplo, Nome do País).
Eu tentei modificar de coutry para país (termo do novo site base) e não surtiu efeito, não entendi o "dt".
Sobre essa parte mencionada por você, não é simplesmente alterar o nome Country por País. Tem que se analisar a estrutura da página em questão. Cada elemento de uma página é estruturado de forma única, o que faz com que cada página também tenha uma estrutura única.

Espero que tenha entendi e consiga concluir o trabalho.

Abraços e excelente semana.


Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Consultar e copiar dados

Mensagem por Wagner.cwb »

Obrigado Milkel, entendi melhor!

Passei a visualizar o código fonte das páginas, nesse novo site de base tem um diferença.
Ele não utiliza < dt >, esta estruturado assim:

para o exemplo: view-source:http://www.dondelopublico.com/ficha/0004-0592

< li class="list-group-item "><strong><em class="">País: </em></strong>España< / li>

tentei usar a tag "em" e "li" e não fechou.

Código: Selecionar todos

Sub CaptureCountry()

Dim ie As Object
Dim iLin, iCount As Long

'instancia de objeto do IE e o torna visível
Set ie = CreateObject("internetexplorer.application")
ie.Visible = True

'Inicia o processo de varredura da lista.
For iLin = 2 To Plan1.UsedRange.Rows.Count
   
   'Verifica se existe algum NLM informado
   'na linha atual da coluna A da planilha.
   'Caso encontre, a rotina irá interromper o laço.
   If Plan1.Cells(iLin, 1).Value = "" Then Exit For
   
   'Carrega a página atual, utilizando o endereço da coluna C.
   ie.navigate "" & Plan1.Cells(iLin, 3).Value

   'Aguarda carregamento da página.
   Do While ie.busy: VBA.DoEvents: Loop
     
   'Verifica se houve algum resultado da pesquisa.
   'Caso não haja, irá para a próxima linha.
   If ie.document.getelementsbytagname("em").Length <= 0 Then GoTo nextLinha
   
   For iCount = 0 To ie.document.getelementsbytagname("em").Length - 1
    If ie.document.getelementsbytagname("em")(iCount).innertext Like "País" Then GoTo Continue
   Next iCount
   
   'Caso não encontre nada no teste acima,
   'redireciona a rotina para a próxima linha.
   GoTo nextLinha

Continue: 'Referência de continuação da captura do país.
   
   'Captura o país da NLM e envia para  a planilha.
   Plan1.Cells(iLin, 2).Value = ie.document.getelementsbytagname("li")(iCount).innertext

nextLinha: 'Referência pra próxima linha.
   
Next iLin

'Limpa o objeto ie
Set ie = Nothing

End Sub


Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Consultar e copiar dados

Mensagem por Wagner.cwb »

Boa noite amigos!

quase chegando lá ahahahah

Esta retornando o "rótulo" - País:

código da página

Código: Selecionar todos

<li class="list-group-item  "><strong><em class="">Link:  </em></strong><a href="" target="_blank"></a> </li>
        <li class="list-group-item  "><strong><em class="">País:  </em></strong>Estados Unidos de América
</li>
        </ul>
	</div>
Mais uma ajudinha, vcs se livrarão de mim kk

Código: Selecionar todos

Sub CaptureCountry()

Dim ie As Object
Dim iLin, iCount As Long

'instancia de objeto do IE e o torna visível
Set ie = CreateObject("internetexplorer.application")
ie.Visible = True

'Inicia o processo de varredura da lista.
For iLin = 2 To Plan1.UsedRange.Rows.Count
   
   'Verifica se existe algum NLM informado
   'na linha atual da coluna A da planilha.
   'Caso encontre, a rotina irá interromper o laço.
   If Plan1.Cells(iLin, 1).Value = "" Then Exit For
   
   'Carrega a página atual, utilizando o endereço da coluna C.
   ie.navigate Plan1.Cells(iLin, 3).Value

   'Aguarda carregamento da página.
   Do While ie.busy: VBA.DoEvents: Loop
     
   'Verifica se houve algum resultado da pesquisa.
   'Caso não haja, irá para a próxima linha.
   If ie.document.getelementsbytagname("strong").Length <= 0 Then GoTo nextLinha
   
   For iCount = 0 To ie.document.getelementsbytagname("strong").Length - 1
    If ie.document.getelementsbytagname("strong")(iCount).innertext Like "País:*" Then GoTo Continue
   Next iCount
   
   'Caso não encontre nada no teste acima,
   'redireciona a rotina para a próxima linha.
   GoTo nextLinha

Continue: 'Referência de continuação da captura do país.
   
   'Captura o país da NLM e envia para  a planilha.
   Plan1.Cells(iLin, 2).Value = ie.document.getelementsbytagname("em")(iCount).innertext

nextLinha: 'Referência pra próxima linha.
   
Next iLin

'Limpa o objeto ie
Set ie = Nothing

End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder