Ir para conteúdo
Fórum Script Brasil
  • 0

Captura de dados web para GoogleSheets quando não funciona IMPORThtml, nem IMPORTxml, nem GoogleFINANCE


paulo.rogerio.sr

Pergunta

Será que vocês conseguiriam me ajudar?

Estive há meses buscando um código que substituísse a função IMPORThtml.

Seguinte: Faço uma captura de dados de ativos financeiros de alguns sites. O mais trivial seria usar a função GOOGLE FINANCE, certo?

Errado! O tipo de ativos que monitoro não tem cobertura do Google Finance (opções de ações: call e put)

A segunda opção seria usar o IMPORThtml ou IMPORT XML, mas depois de muito pesquisar em blogs, fóruns, ect, etc,  descobri que o google "meio que sabota" essas duas funções e bloqueiam, de modo que sempre retornam erro.

Então cheguei até um forum, o Stack Overflow, onde encontrei um especialista que me ajudou com esse código onde finalmente consegui para fazer o google sheets buscar o valor.

function ultimoValorAdvfn()
const url = 'https://br.advfn.com/bolsa-de-valores/bovespa/vvarq170-ex-17-VVARQ170/cotacao';
const html = UrlFetchApp.fetch(url).getContentText();
return html.match(/class="PriceTextUp">(.*?)</)[1].trim();
 

Só que percebi um porém:

O código funcionou mas eu queria rodá-lo com outro site, no qual a URL da página de cada ativo é muito menor e mais fácil de montar.
 
Para eu montar uma função replicável para várias células ou vários ativos diferentes, ao mesmo tempo, tem um pedaço da URL
que ferra tudo.
Ex: Para o ativo VVARQ170 seria o pedaço mais importante da URL seria "... /vvarf130-ex-13-VVARf130/..",
só que esse pedaço " ex-13" não é constante para o ativoVVARF130
Hoje pode ser "ex-17", amanhã pode ser "ex-131" ou "ex-132"
Então se eu montasse a URL a partir do códigos dos ativos que estão em uma coluna, eu teria que ter em outra célula qual o "ex" daquela ativo.
 
Se fosse só um ou 2 ativos, beleza, eu faria na unha, o problema é que são pelo menos 20 em média, e vão sendo substituídos
conforme vão sendo vendidos e comprados ao longo do mês.
 
Tem um outro site que consulto que é o opcoes.net. onde a construção do link muito mais fácil
Por exemplo: Para consultar o mesmo ativo,o link é simplesmente opcoes.net/ VVARF130
 
A maior dificuldade é encontrar o endereçamento do código HTML do objeto que preciso (último valor de cotação).
 
Segue uma tentativa de representação da parte da  página que preciso capturar.
  VVARF130 - Cotação não ajustada               ____VVARF130 - Volatilidade implícita ____VVAR3 - Cotação não ajustada
Min Pri Med Ult Max Negócios Vol. Fin. ____Min Pri Med Ult Max ____Min Abe Med Ult Max
21/05/2021   4,94 5,05 5,12 5,25 5,25 8 62.029,00 ____         ____11,73 11,92 11,90 11,87 12,14
20/05/2021 4,95 4,97 5,03 5,05 5,12 98 1.219.794,00 ____208,00 293,00 271,93 312,00 349,25 ____11,91 12,05 11,97 11,91 12,13
 
Então ficaria assim:
function ultimoValorAdvfn()
const url = 'https://opcoes.net.br/VVARF130';
const html = UrlFetchApp.fetch(url).getContentText();
return html.match(
/?????="??????????" > ???????.trim();
 
Esse endereçamento dos objetos referentes aos valores em vermelho  que não consigo buscar.
Mesmo copiando o Xpaht, não consigo.
 
Anexei os prints das páginas

Desde já muito obrigado pela atenção!

tela opções.net.jpg

tela advfn.jpg

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

@Jhonas esse é o post inicial dessa pesquisa sobre como capturar o valor no html. Como você solicitou, vou continuar por aqui:

Eu entendi a estratégia do "view-source" para o MEMO !!!

É como se eu convertesse o HTML da página em um *.TXT e daí fizesse um "CTRL+F (tipo um localizar)" e depois de localizar, trazer o resultado de volta e finalmente colar na célula do googlesheet.

Pelo que pesquisei, a ferramenta COMPONENTE MEMO é algo utilizada em DELPHI, certo? Só que eu não entendo nada dessa linguagem.

Pesquisei muito sobre como inserir o comando MEMO no código HTML, mas sem sucesso.

Pode me ajudar mais uma vez por favor?

 

Link para o comentário
Compartilhar em outros sites

  • 0

Oi ..  desculpe a demora em responder

Não  precisa ser necessariamente um componente Memo ( Delphi )

No delphi voce consegue ler o HTML e fazer outras coisas

Se voce consegue ler o HTML, veja se consegue tambem recuperar o texto da tag

Veja se esses links ajudam ....

https://www.google.com.br/search?q=comandos+html+texto&ei=c2_cYLWXAuDD5OUP9pGq4AQ&o que=comandos++html&gs_lcp=Cgdnd3Mtd2l6EAEYCDICCAAyAggAMgYIABAHEB4yAggAMgYIABAHEB4yBggAEAcQHjICCAAyBggAEAcQHjICCAAyBggAEAcQHjoHCAAQRxCwAzoECAAQDUoECEEYAFDndVi-gQFg-qwBaAJwAngAgAG4AYgBsguSAQQwLjEwmAEAoAEBqgEHZ3dzLXdpesgBCMABAQ&sclient=gws-wiz

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...