Ir ao conteúdo
  • Cadastre-se
manoelmr1984

Excel Exportar tabelas da web para excel vba

Recommended Posts

Olá, boa tarde!

Este é o HTML do qual estou tentando extrair as informações no site https://www.academiadasapostasbrasil.com/stats/match/brasil-stats/brasileirao-serie-a/fluminense/santos/2729351/1/live

image.png.d0ff2730758917e1904933fa0ca80eb9.png

 

o que eu preciso é, por exêmplo: trazer pro excel os eventos que aconteceram na partida (no caso abaixo apenas como exêmplo o cartão amarelo aos 17 minutos)...

image.png.7cb2892d1a9e9488f9e8e59f9782fbf1.png

 

...porém, eu preciso que ao trazer essa tabela pro excel ele identifique o evento (cartão amarelo, gol, substituição,...)

 

Tenho esse código que consegui na internet mas não progredi muito na adaptação:

Sub ExtrairEventos()

    Dim ie As Object
    Dim iLin As Long
    Dim link, stats As String
    link = "https://www.academiadasapostasbrasil.com/stats/match/brasil-stats/brasileirao-serie-a/fluminense/santos/2729351/1/live"

    stats = "#stats-quarts-padding"
    
    '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 = 1 To Plan1.UsedRange.Rows.Count
           
       'Carrega a página de acordo com o link
       ie.navigate link & stats
    
       'Aguarda carregamento da página.
       Do While ie.busy: VBA.DoEvents: Loop
       
       'Captura as duas tabelas de resultados
       Sheets("Planilha2").Range("A1").Value = ie.document.getElementsByTagName("tbody")(1).innertext
    Set ie = Nothing

End Sub
 

porém ele extrai assim.

image.png.371caad1332df042731c82b23f47305a.png

 

além dele não identificar o evento (cartão amarelo, gol, substituição,...) ele ainda coloca tudo na mesma célula

 

Em resumo, preciso que ele traga os eventos (cartão amarelo, gol, substituição,...) identificando cada um deles pela "class" ou "title" e organizando eles tabela (linhas e colunas).

 

Alguém por favor me ajudem...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise por power query. 

Dependendo da sua versão do Office você pode precisar baixar o suplemento.

Se nao me engano a partir do 2013 é nativo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 15/06/2018 às 18:02, CasaDoHardware disse:

Pesquise por power query. 

Dependendo da sua versão do Office você pode precisar baixar o suplemento.

Se nao me engano a partir do 2013 é nativo.

Olá, bom dia

até onde pesquesei o power query não faz exatamente o que quero, ele traz a tabela mas não especifica o ítem (no meu caso se é cartão amarelo, vermelho, gol...)

 

 

tem como fazer tipo uma condicional?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@manoelmr1984

 

Bom dia!


Já passei por uma situação semelhante, e resolvi usando a biblioteca do Microsoft Internet Controls.

 

No código exemplificado, você traz a informação integral da tabela da página, e acredito que deve deverá especificar o que você busca no código.

 

Exemplo, para cada linha da tabla captura o valor das células e atribui nas variáveis:

For Each linha In tabela.all.tags("tr")
    var0 = linha.all.tags("td")(0).innertext
    var1 = linha.all.tags("td")(1).innertext
    var2 = linha.all.tags("td")(2).innertext
Next

No caso do cartão, tente algo assim:

For Each i In ie.Document.body.getElementsByTagName("span")
    If i.className = "ico aa-icon-YC" Then
        xCor = i.color
    End If
Next i

Observe que para o cartão, não é aplicado algum texto, apenas pintado o fundo do span pelo CSS, não me lembro exatamente qual o atributo para isso, no código exemplifiquei com  i.color.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
23 horas atrás, R0DR1G0_CWB disse:

@manoelmr1984

 

Bom dia!


Já passei por uma situação semelhante, e resolvi usando a biblioteca do Microsoft Internet Controls.

 

No código exemplificado, você traz a informação integral da tabela da página, e acredito que deve deverá especificar o que você busca no código.

 

Exemplo, para cada linha da tabla captura o valor das células e atribui nas variáveis:


For Each linha In tabela.all.tags("tr")
    var0 = linha.all.tags("td")(0).innertext
    var1 = linha.all.tags("td")(1).innertext
    var2 = linha.all.tags("td")(2).innertext
Next

No caso do cartão, tente algo assim:


For Each i In ie.Document.body.getElementsByTagName("span")
    If i.className = "ico aa-icon-YC" Then
        xCor = i.color
    End If
Next i

Observe que para o cartão, não é aplicado algum texto, apenas pintado o fundo do span pelo CSS, não me lembro exatamente qual o atributo para isso, no código exemplifiquei com  i.color.

 

R0DR1G0_CWB, bom dia.

Obrigado por responder meu post, mas sem querer abusar de sua bondade, poderia montar esse código pra mim, sou meio leigo nesse assunto e estou precisando muito concluir esse trabalho?

 

Desde já agradeço...

23 horas atrás, R0DR1G0_CWB disse:

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, manoelmr1984 disse:

Obrigado por responder meu post, mas sem querer abusar de sua bondade, poderia montar esse código pra mim, sou meio leigo nesse assunto e estou precisando muito concluir esse trabalho?

 

Desde já agradeço...

 

Olá, boa tarde.

 

consegui adaptar o código e agora já tenho os eventos linha por linha, agora falta o evento, alguém pode me ajudar? se não pra trazer a identificação do evento pois que seja pelo menos uma condicional que traga o evento que eu escolher...

image.png.2a53bc36e7fedb689c4e594a5b76c217.png

 

segue o código...

 

Sub BuscaEvento()

Range("A2:C100").ClearContents


Dim element As IHTMLElement
Dim elements As IHTMLElementCollection
Dim ie As InternetExplorer

Dim html As HTMLDocument

'abra o Internet Explorer na memória e acesse o site

Set ie = New InternetExplorer

ie.Visible = False

ie.navigate "https://www.academiadasapostasbrasil.com/stats/match/brasil-stats/brasileirao-serie-a/fluminense/santos/2729351/1/live"
'Aguarde até que o IE tenha carregado a página da web

Do While ie.readyState <> READYSTATE_COMPLETE

DoEvents

Loop

Set html = ie.document

Set elements = html.getElementsByClassName("match-sum-wd-symbol")

Dim count As Long
Dim erow As Long
count = 0
For Each element In elements
    If element.className = "match-sum-wd-symbol" Then
        erow = Worksheets("Planilha2").Cells(Rows.count, 1).End(xlUp).Offset(1, 0).Row
        Cells(erow, 1) = html.getElementsByClassName("match-sum-wd-minute")(count).innerText
        Cells(erow, 2) = html.getElementsByClassName("match-sum-wd-description")(count).innerText
        count = count + 1
    End If
Next element

CloseIE

End Sub
Public Sub CloseIE()
    Dim Shell As Object
    Dim ie As Object
 
    Set Shell = CreateObject("Shell.Application")
 
    For Each ie In Shell.Windows
        If TypeName(ie.document) = "HTMLDocument" Then
            ie.Quit
        End If
    Next
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 11/07/2018 às 16:21, manoelmr1984 disse:

Olá, boa tarde.

 

consegui adaptar o código e agora já tenho os eventos linha por linha, agora falta o evento, alguém pode me ajudar? se não pra trazer a identificação do evento pois que seja pelo menos uma condicional que traga o evento que eu escolher...

image.png.2a53bc36e7fedb689c4e594a5b76c217.png

 

segue o código...

 

Sub BuscaEvento()

Range("A2:C100").ClearContents


Dim element As IHTMLElement
Dim elements As IHTMLElementCollection
Dim ie As InternetExplorer

Dim html As HTMLDocument

'abra o Internet Explorer na memória e acesse o site

Set ie = New InternetExplorer

ie.Visible = False

ie.navigate "https://www.academiadasapostasbrasil.com/stats/match/brasil-stats/brasileirao-serie-a/fluminense/santos/2729351/1/live"
'Aguarde até que o IE tenha carregado a página da web

Do While ie.readyState <> READYSTATE_COMPLETE

DoEvents

Loop

Set html = ie.document

Set elements = html.getElementsByClassName("match-sum-wd-symbol")

Dim count As Long
Dim erow As Long
count = 0
For Each element In elements
    If element.className = "match-sum-wd-symbol" Then
        erow = Worksheets("Planilha2").Cells(Rows.count, 1).End(xlUp).Offset(1, 0).Row
        Cells(erow, 1) = html.getElementsByClassName("match-sum-wd-minute")(count).innerText
        Cells(erow, 2) = html.getElementsByClassName("match-sum-wd-description")(count).innerText
        count = count + 1
    End If
Next element

CloseIE

End Sub
Public Sub CloseIE()
    Dim Shell As Object
    Dim ie As Object
 
    Set Shell = CreateObject("Shell.Application")
 
    For Each ie In Shell.Windows
        If TypeName(ie.document) = "HTMLDocument" Then
            ie.Quit
        End If
    Next
End Sub

 

alguém tem uma novidade sobre o assunto...?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×