Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Consultar e copiar dados [RESOLVIDO]
-
- Manda bem
- Mensagens: 168
- Registrado em: Sáb Set 24, 2016 4:48 pm
Consultar e copiar dados [RESOLVIDO]
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
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.
-
- Colaborador
- Mensagens: 13
- Registrado em: Sex Set 23, 2016 1:13 pm
Re: Consultar e copiar dados
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.
Espero que ajude de alguma forma.
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
-
- Manda bem
- Mensagens: 168
- Registrado em: Sáb Set 24, 2016 4:48 pm
Re: Consultar e copiar dados
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!
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!
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Consultar e copiar dados
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.
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.
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
Favor testar a rotina e ver se irá funcionar. Qualquer coisa, nos retorne.
Abraços e excelente semana.
-
- Manda bem
- Mensagens: 168
- Registrado em: Sáb Set 24, 2016 4:48 pm
Re: Consultar e copiar dados
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
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
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Consultar e copiar dados
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.
Espero ter ajudado.
Abraços e excelente semana.
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
Abraços e excelente semana.
-
- Manda bem
- Mensagens: 168
- Registrado em: Sáb Set 24, 2016 4:48 pm
Re: Consultar e copiar dados
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:
Tô capenga ainda rs
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:
Eu tentei modificar de coutry para país (termo do novo site base) e não surtiu efeito, não entendi o "dt".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".
Tô capenga ainda rs
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Consultar e copiar dados
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).
Espero que tenha entendi e consiga concluir o trabalho.
Abraços e excelente semana.
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).
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.Eu tentei modificar de coutry para país (termo do novo site base) e não surtiu efeito, não entendi o "dt".
Espero que tenha entendi e consiga concluir o trabalho.
Abraços e excelente semana.
-
- Manda bem
- Mensagens: 168
- Registrado em: Sáb Set 24, 2016 4:48 pm
Re: Consultar e copiar dados
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.
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
-
- Manda bem
- Mensagens: 168
- Registrado em: Sáb Set 24, 2016 4:48 pm
Re: Consultar e copiar dados
Boa noite amigos!
quase chegando lá ahahahah
Esta retornando o "rótulo" - País:
código da página
Mais uma ajudinha, vcs se livrarão de mim kk
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>
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