Gå til innhold

[Løst] Hente data fra internett til Excel med VBA


trn100

Anbefalte innlegg

Hei.

 

Jeg holder på med et prosjekt for en hundeklubb, og i den forbindelse trenger jeg en VBA rutine som henter ned noe informasjon fra nettet.

Jeg har foreløpig funnet en rutine som åpner IE og finner frem til riktig side, men der stopper det for meg.

Rutinen ligger under en knapp i en userform som henter hundens reg.nummer fra en tekstboks ("txtRegnr" i koden). Et aktuelt reg.nr. for testformål er NO36788/12

 

Sub WebOppslag()
 
    Dim appIE As Object
    Set appIE = CreateObject("InternetExplorer.Application")
    
    With appIE
        .Navigate "https://www.dogweb.no/dogweb/dw/openPage/hundIndex.html?HUID=" & Me.txtRegnr
        .Visible = True
    End With
    
    Do While appIE.Busy
        DoEvents
    Loop
    
End Sub

Link til eksempelside: https://www.dogweb.no/dogweb/dw/openPage/hundIndex.html?HUID=NO36788/12

 

Det jeg trenger å hente ut er Fødselsdato, Kjønn og Land oppe til høyre.

Er det mulig å hente ut denne informasjonen uten å åpne nettsiden?

Hvis ikke, er det mulig å åpne nettsiden maksimert? Slik koden koden er nå åpnes nettsiden i et vindu. Finnes det kanskje et parameter jeg kan sette inn under .Visible = True?

Er er det mulig å hente ut disse 3 informasjonen automatisk og plassere de i celler i Excelarket og kan man eventuelt i VBA lukke websiden etterpå?

 

Veldig takknemlig for tips som kan bringe meg videre  :) 

Bruker norsk Excel 2016 hvis det har noe å si, men koden må kunne kjøres på 2010 også.

Lenke til kommentar
Videoannonse
Annonse

Hei

 

Jeg får ikke noe fornuftig treff på eksempelet ditt, men her er kode for å lese fra web uten å fjernstyre en nettleserinstans:


Sub MainSub()
Dim MyString As String
MyString = GetFromWebpage("https://www.dogweb.no/dogweb/dw/openPage/hundIndex.html?HUID=NO36788/12")
MsgBox MyString
' blah blah parsing string code
End Sub

Function GetFromWebpage(URL As String) As String
On Error GoTo Err_GetFromWebpage
Dim objWeb As Object
Dim strXML As String
' Instantiate an instance of the web object
Set objWeb = CreateObject("Microsoft.XMLHTTP")
' Pass the URL to the web object, and send the request
objWeb.Open "GET", URL, False
objWeb.send
' Look at the HTML string returned
strXML = objWeb.responsetext
GetFromWebpage = strXML
End_GetFromWebpage:
' Clean up after ourselves!
Set objWeb = Nothing
Exit Function
Err_GetFromWebpage:
' Just in case there's an error!
MsgBox Err.Description & " (" & Err.Number & ")"
Resume End_GetFromWebpage
End Function

Beste hilsen Harald

Lenke til kommentar

Hei igjen.

 

Beklager sen tilbakemelding!

 

@Hårek: Takk for link! Jeg har vært innom der og tittet, men jeg klarer dessverre ikke å finne ut hvordan jeg får ut de dataene jeg trenger?

 

@Harald: Takk for kode! Det er helt klart det beste om jeg slipper å gå veien via en nettleser! Jeg har testet koden din og den henter ut data fra siden, men av en eller annen grunn finner jeg ikke de dataene jeg trenger i nedlastingen?

 

Jeg kan dessverre minimalt om HTML og klarer ikke å lese den informasjonen jeg får ut, men legger ved 3 bilder her. Bilde 1 er utseende på siden, bilde 2 er kilden hentet fra i IE og bilde 3 er kilden hentet i Chrome som er min standardleser i fall det er forskjell på disse og at det påvirker hva som hentes? Det ser ut til at koden din henter det samme som jeg får opp når jeg viser sidekilden i Chrome.
 

post-4119-0-05113600-1548743698_thumb.png

post-4119-0-84619600-1548743718_thumb.png

post-4119-0-67348100-1548743734_thumb.png

Endret av trn100
Lenke til kommentar

@Hårek: Takk for link! Jeg har vært innom der og tittet, men jeg klarer dessverre ikke å finne ut hvordan jeg får ut de dataene jeg trenger?

Kan dessverre ikke hjelpe, har ikke så mye erfaring med scraping. Det jeg kan si er at det er en god del jobb med prøving og feiling, og man må forstå en del HTML. Man kan f.eks få navigert fram til de relevante seksjonene ved å søke på tekst i "id="

Lenke til kommentar

Har du vurdert Excel sin motor for innhenting av data fra eksterne kilder? Kalt 'Power Query' i Office 2010/2013, i Excel 2016/2019 kalt 'Hent og Transformer' (engelsk: 'Get & Transform')? Da slipper du å programmere for å hente ut rådataene dataene.

 

'Hent og transformer' er innebygget i Excel 2016+ men må hentes ned til Office 2010/13.

 

Litt info fra Microsoft om Hent og transformer.

 

Sidenote: Enkelte webeiere liker ikke at man driver med 'Web scraping' fra deres nettisder. Har du vurdert å høre med NKK om de har en mer offisiell metode (API?) for å få tak i dataene du trenger?

 


 

Lenke til kommentar

Takk for tips og linker NoBo!

 

Joda, jeg ar forsøkt den innebygde metoden, men den stopper med en feilmelding uten å hente data. Muligens fordi siden ligger bak et passordbeskyttet område? Dette kan også være årsaken til at Haralds kode ikke virker og at jeg allikevel må gå via en webleser for å få hentet ut data.

 

Den jeg lager applikasjonen til sitter i hovedstyret i NRK og har selvsagt anledning til å bruke disse dataene. Jeg ønsker bare å gjøre det enklere for vedkommende og sjekke/oppdatere informasjon slik at vedkommende slipper å logge seg på nett og søke frem informasjonen manuelt. Databanken drives så vidt jeg har forstått av en 3-part, slik at eventuelle andre måter å få data på som involverer de med sikkerhet vil medføre kostnader.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...