Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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?

Editado por manoelmr1984

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

Crie uma conta ou entre para comentar

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






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

×