Importação de múlti...
 
Notifications
Clear all

Importação de múltiplas páginas Web

5 Posts
2 Usuários
0 Reactions
1,161 Visualizações
(@ruic)
Posts: 26
Eminent Member
Topic starter
 

Boa tarde amigos,

Precisava mais uma vez dos Vossos preciosos conhecimentos :)

Frequentemente costumo a fazer análises estatísticas, obtendo para isso base de dados de determinados sites.
Desta feita a base de dados é relativa a Galgos de corrida na UK, estas corridas realizam-se diariamente em diversos estádios

A base de dados que pretendo obter é diária, estando os dados de determinado dia, disponíveis durante um mês para consulta.
Isto desde logo levanta-me um problema que é a criação de uma base que vá acumulando os dados que sejam importados diariamente, pois estes não poderão ser atualizados sob o risco de os perder pelo motivo mencionado (1 mês).

O segundo problema com que me deparo é a demora para importar os dados, isto pelo seguinte (ver site):

http://thedogs.co.uk/trap6/res_races.php

- Os dados são apresentados e disponibilizados por datas (dia 1, 2, 3,....)
- em cada dia temos acesso ao link de cada estádio (são vários) com os respetivos resultados diários " FUUL MEETING "
- Apesar da listagem por vezes apresentar os estádios repetidos, o link " FUUL MEETING " engloba todos os resultados, ou seja só basta importar uma vez os resultados de determinado estádio.

A questão que queria colocar é se existe através do VB, forma de importar os dados para uma só folha de excel, sendo só necessário selecionar a data pretendida e automaticamente a importação ser efetuada sem ter de selecionar estádio a estádio e seguir os procedimentos padrões de importação de dados web (é demorado);
Outra questão seria se poderia-se gerar uma base de dados para onde essa informação fosse importada sem o risco de existirem atualizações na página web que afetem essas mesmas informações.

Junto o link da folha em excel que criei, contem 2 livro, um para onde importei os dados de 02/03/2013, no outro livro tenho os dados alvo de analise.

https://www.dropbox.com/s/c2dxbz4iw96lh ... algos.xlsx

Peço desculpa pelo abuso, mas se puderem ajudar ficava agradecido.

Um abraço,
Rui

 
Postado : 02/04/2013 5:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!
Desculpa eu não olhei atentamente mas tente a adaptar...

Sub ConsultaNET()
    Dim i As Integer
    Dim firstRow As Integer
    Dim lastRow As Integer
    Dim nextRow As Integer
    Dim URLstart As String
    Dim URLend As String
    Dim shStats As Worksheet
    Dim shQuery As Worksheet
    Dim rgQuery As Range
    Dim found As Range
    Dim TimeOutWebQuery
    Dim TimeOutTime
    Dim objIE As Object
    Application.ScreenUpdating = False
    URLstart = "http://stats.espncricinfo.com/ci/engine/stats/index.html?class=2;filter=advanced;orderby=start;page="
    URLend = ";size=200;spanmax1=12+Jul+2012;spanmin1=13+Jul+2009;spanval1=span;template=results;type=batting;view=innings;wrappertype=print"
    Application.DisplayAlerts = False
    On Error Resume Next
    Sheets("Stats").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Stats"
    Set shStats = Sheets("Stats")
    For i = 1 To 47
        Sheets.Add after:=Sheets(Sheets.Count)
        Set shQuery = ActiveSheet
        Set objIE = CreateObject("InternetExplorer.Application")
        With objIE
            .Visible = False
            .Navigate CStr(URLstart & i & URLend)
        End With
        TimeOutWebQuery = 10
        TimeOutTime = DateAdd("s", TimeOutWebQuery, Now)
        Do Until objIE.ReadyState = 4
            DoEvents
            If Now > TimeOutTime Then
                objIE.stop
                GoTo ErrorTimeOut
            End If
        Loop
        objIE.ExecWB 17, 2
        objIE.ExecWB 12, 2
        shQuery.Range("A1").Select
        shQuery.PasteSpecial NoHTMLFormatting:=True
        objIE.Quit
        Set objIE = Nothing
        Set found = shQuery.Columns(1).Find("Player", , , xlWhole)
        If Not found Is Nothing Then
            firstRow = found.Row
            If i > 1 Then firstRow = firstRow + 1
        Else
            GoTo FormatError
        End If
        Set found = shQuery.Columns(1).Find("Page ", found, , xlPart)
        If Not found Is Nothing Then
            lastRow = found.Row - 1
        Else
            GoTo FormatError
        End If
        Set rgQuery = shQuery.Rows(firstRow & ":" & lastRow)
        nextRow = shStats.Cells(Rows.Count, "A").End(xlUp).Row
        If nextRow > 1 Then nextRow = nextRow + 1
        rgQuery.Copy shStats.Cells(nextRow, 1)
        Application.DisplayAlerts = False
        shQuery.Delete
        Application.DisplayAlerts = True
    Next i
    shStats.Columns.AutoFit
    MsgBox "Consulta completa"
    Exit Sub
FormatError:
    MsgBox "Erro no Formato"
    Exit Sub
ErrorTimeOut:
    objIE.Quit
    Set objIE = Nothing
    MsgBox "Erro no Site"
End Sub

Private Const URL_TEMPLATE As String = "URL;http://www.moneycontrol.com/stocks/hist_stock_result.php?sc_id=RI&pno={0}&hdn=daily&fdt=2000-01-01&todt=2013-03-01"
Private Const NUMBER_OF_PAGES As Byte = 7

Sub test()
    Dim page As Byte
    Dim queryTableObject As QueryTable
    Dim url As String

    For page = 1 To NUMBER_OF_PAGES
        url = VBA.Strings.Replace(URL_TEMPLATE, "{0}", page)
        Set queryTableObject = ActiveSheet.QueryTables.Add(Connection:=url, Destination:=ThisWorkbook.Worksheets.Add.[a1])
        queryTableObject.WebSelectionType = xlSpecifiedTables
        queryTableObject.WebTables = "3"
        queryTableObject.Refresh
    Next page

End Sub

Att

 
Postado : 02/04/2013 5:30 pm
(@ruic)
Posts: 26
Eminent Member
Topic starter
 

Obrigado pela resposta amigo.
Só tenho um problema, não percebo nada de VBA, será que poderia adaptar essas linhas de comando à página Web que eu pretendo ?
Desculpa o abuso.
Abraço,
RUi

 
Postado : 02/04/2013 5:45 pm
(@ruic)
Posts: 26
Eminent Member
Topic starter
 

Bom dia Amigo Alexandre,

Antes demais obrigado pela código VBA que enviou :)

Tentei utilizar os dados, mudando a página Web, mas os meus conhecimentos de VBA são no entanto muito limitados, consegui no máximo a importação de uma pista relativo a um dia.
Estou muito longe de ser um expert com Você.

Sem querer abusar será que poderia dar-me uma mãozinha nesta importação :oops: ?
Se eu o fizer manualmente vai demorar uma eternidade.

Envio em anexo uns JPG nos quais vou tentar explicar o que pretendo isto se me puder ajudar é claro:

a) Página inicial:
A página inicial apresenta os resultados das corridas por dias, no dia de hoje a base de dados do site vai do dia 03/03/2013 até ao dia 03/04/2013, ou seja precisamente um mês.
Na imagem em concreto é apresentada a listagem dos estádios onde aconteceram os eventos.
Como pode verificar os estádios repetem-se na listagem (devido às categorias de corrida), no entanto basta importar uma unica vez em "FULL MEETING", para se obter os dados de todas as corridas desse local;
O meu problema começa logo aqui ir estádio a estádio e efetuar a importação pelos processos tradicionais.

b) Páginas de importação:
Os dados que pretendo obter estão sinalizados a amarelo, onde no caso em concreto deveriam ser apresentados no excel de acordo com a estrutura da folha excel em anexo.

Se puder ajudar ficava extremamente agradecido.

Vou publicar no fórum para enviar os anexos

Um abraço,
Rui

 
Postado : 03/04/2013 4:02 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Rui, eu sinto muito mas mesmo sem tempo, eu não sei como ajuda-lo, aguar de mais um tempo para ver se mais alguém possa ajuda-lo. :(

Att

 
Postado : 04/04/2013 4:33 pm