locked
Macro para extrair dados de um site

    General discussion

  • Pessoal,

    Estou com um problema que esta complicado de resolver. Estou fazendo um trabalho, onde é necessário pesquisar os preços dos combustíveis vendidos no Brasil. A ANP disponibiliza uma pesquisa semanal em seu site. Porém, não é possível extrair esses dados pela opção 'obter dados externos'.

    Acredito que seria preciso criar uma macro que buscasse os valores dos combustíveis que eu desejar, nas cidades que eu desejar. Se alguém puder me ajudar ficarei muito grato, pois essa pesquisa engloba mais de 550 cidades, é impossível fazer isto manualmente.

    Segue site: http://www.anp.gov.br/preco/

    Abraço!

    Thursday, April 22, 2010 4:21 PM

All replies

  • Olá Frido você já tentou no menu Dados->Importar Dados Externos -> Nova Consulta a Web?

     

    Abraços,


    Baldini Fabio
    Sunday, May 23, 2010 4:54 AM
  • Olá Baldini,

    Já sim, porém não é permitido deste modo, quando clico no link pela consulta a web o excel abre a tela do internet explorer, ficando inviável a importação. Por isso acredito que somente por macro seria possível...

    Monday, May 24, 2010 6:13 PM
  • Boa noite!

    Fridooo, vc conseguiu fazer isso? se sim.. me fala como fazer

    Tuesday, December 14, 2010 11:04 PM
  • Uma vez eu fiz uma aplicação vba que acessava a internet usando applicattion internet explorer. Ele usava o explorer para navegar. Funcionou razoavelmente bem. 

     

    Quer dar uma olhada ?? 

    era tudo programado meio que na "unha" ... ou seja, vc programava o vba para acessar a página, clicar os botões, preencher campos ... dá um trabalho danado.



    João Eurico Consultor Manguetown - Brazil
    Thursday, December 16, 2010 1:24 PM
  • A função abaixo cria uma nova Planilha com o nome de um município especificado. Execute o procedimento ObterDados() para ver o resultado.

    Para que o código funcione, você deve adicionar a referência ao Microsoft Forms 2.0 Object Library. Se não entendeu o que isso significa, clique aqui: http://www.ambienteoffice.com.br/officevba/referencias_e_bibliotecas_no_VBA/.

    Com essa função personalizada, você pode, por exemplo, criar uma lista de cidades em uma Planilha e iterar a função sobre essa lista, ao invés de escrever o nome das cidades no VBE:

    Option Explicit

    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Sub ObterDados()
        'NÃO UTILIZE ACENTOS NO NOME DOS MUNICÍPIOS!
       
        ExtraiPreços "Belo Horizonte"
        'ExtraiPreços "Rio de Janeiro"
        'ExtraiPreços "Sao Paulo"
    End Sub

    Function ExtraiPreços(sMunicípio As String)

        'Altere esse valor para um número maior
        'se sua conexão de Internet for lenta
        Const lIntervalo As Long = 2000
       
        Const sElementoInício As String = "<TABLE"
        Const sElementoFim As String = "</TABLE>"
       
        Dim IE As Object
        Dim MyData As DataObject
        Dim ws As Worksheet
       
        Dim sHTMLBody As String
        Dim lInício As Long
        Dim lFim As Long
       
        Set IE = CreateObject("InternetExplorer.Application")
        On Error GoTo Tratamento
        'Se não quiser mostrar a janela do Internet Explorer,
        'ajuste o parâmetro abaixo para False
        IE.Visible = True
        IE.Navigate "http://www.anp.gov.br/preco/prc/Resumo_Por_Municipio_Index.asp"
        
        'READYSTATE_COMPLETE é a mesma coisa que 4.
        While IE.ReadyState <> 4: DoEvents: Wend
        IE.Document.Forms.Item(0).All.Item("txtMunicipio").Value = sMunicípio
        Sleep lIntervalo
        IE.Document.Forms.Item(0).All.Item("image1").Click
        Sleep lIntervalo
        IE.Document.Forms.Item(0).All.Item("image1").Click
        Sleep lIntervalo
        IE.Document.Forms.Item(1).All.Item("image1").Click
        Sleep lIntervalo
       
        sHTMLBody = IE.Document.DocumentElement.OuterHTML
        lInício = InStr(1, sHTMLBody, sElementoInício)
        lFim = InStr(1, sHTMLBody, sElementoFim) + Len(sElementoFim)
       
        Set MyData = New DataObject
        MyData.SetText Mid(sHTMLBody, lInício, lFim - lInício)
        MyData.PutInClipboard
       
        Set ws = Sheets.Add
        ws.Name = sMunicípio
        ws.Paste
       
    Tratamento:
        IE.Quit

    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    Thursday, December 23, 2010 5:40 PM
  • Fridoooo,

    Conseguiu resolver seu problema?

    Estou com os mesmos desafios, o que me levou até este fórum também.

    Impossível extrair de forma mecânica esses dados.

    Abraço!

     

    Friday, May 06, 2011 6:14 PM
  • Felipe,

    Tentei fazer como tu mencionou acima. Mas ou não entendi direito como fazer ou não deu certo. Teria como explicar melhor?

    Obrigado.

    Um abraço!

    Friday, May 06, 2011 6:17 PM
  • Qual o problema está tendo? O que você fez? Onde você parou, ou qual é sua dúvida?
    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    Monday, May 09, 2011 2:02 PM