Info uit website halen

Status
Niet open voor verdere reacties.

Oude leerling

Gebruiker
Lid geworden
30 aug 2010
Berichten
554
Geacht forum,
Ik zou graag uit de website "http://www.hetweeractueel.nl/weer/alkmaar2/actueel/" ,
de temperatuur willen halen en deze dan met "End(xlUp)" in kolom B plaatsen.
Dus iedere keer als ik de macro activeer moet de actuele temperatuur onder elkaar in kolom B komen.
Kunt u mij daar mee helpen.
Vriendelijke groet Jaap
 

Bijlagen

  • info uit website halen.xlsm
    20,5 KB · Weergaven: 37
Het klinkt wel leuk en aardig (voor persoonlijk gebruik (want: "copyright"), maar houd in je achterhoofd dat als de site de layout omgooit, dat je script niet meer werkt.
Of je moet aan de maker vragen of die de data in een bepaalde format kan leveren, zoals XML of JSON.
 
komt dit in de buurt?

Kijk even of je hier iets mee kan.
 

Bijlagen

  • info uit website halen.xlsm
    22,4 KB · Weergaven: 45
Met onderstaande code kan je de temperatuur van de website halen, deze staat dan in strText.
Het gedeelte van de code met "End(xlUp)" kan jij zelf wel maken, er staan legio voorbeelden hier op de site.
Code:
Sub test()
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate "http://www.hetweeractueel.nl/weer/alkmaar2/actueel/"
        Do
            DoEvents
        Loop While .Busy Or .readyState <> 4
        Application.Wait DateAdd("s", 1, Now)
        Set objTable = .Document.getElementsByTagName("table")[COLOR="#FF0000"](2)[/COLOR]
        Set objRow = objTable.getElementsByTagName("tr")[COLOR="#FF0000"](0)[/COLOR]
        Set objColumn = objRow.getElementsByTagName("td")[COLOR="#FF0000"](1)[/COLOR]
        strText = objColumn.innertext
    End With
End Sub
Aan de rode indexen kom je door in de browser F12 te drukken, er verschijnt dan onderaan in beeld de "development tools".
Hiermee kan je onder de motorkap van de site kijken.
 
Laatst bewerkt:
SjonR,
Helemaal goed.
Zou je nog ter lering een korte verklaring kunnen geven wat iedere regel doet.
Ik heb ondertussen al veel van jullie geleerd maar met data uit websites halen
snap ik nog niet veel.
Vriendelijke groet , Jaap
 
Ik zou het best willen uitleggen, maar vergeleken met hetgeen Alphamax heeft gepost, is mijn code regelrecht amateurwerk :)
 
@SjonR
Zo ben ik ook ooit begonnen, maar HTML is een gestructureerde taal, dus gebruik ik die structuur met "getElementsByTagName".
Alleen het onder de motorkap kijken vergt oefening.
Je de aangeboden gereedschappen leren gebruiken.
En weten waar te kijken.
 
Werkt perfect.

Wat zit er een kennis bij jullie. Fantastisch!!

Ik heb bij .Visible , True gewijzigd in False anders bleef de website zichtbaar

Ik weet echter niets van de HMTL taal en snap dus niet hoe ik de info uit de gegevens , bij 3 maal Set , onder "de motorkap" vandaan haal.
Is dat misschien nog uit te leggen?
Vriendelijke groet , Jaap



Code:
Sub test()
    With CreateObject("InternetExplorer.Application")
        .Visible = False
        .Navigate "http://www.hetweeractueel.nl/weer/alkmaar2/actueel/"
        Do
            DoEvents
        Loop While .Busy Or .readyState <> 4
        Application.Wait DateAdd("s", 1, Now)
        Set objTable = .Document.getElementsByTagName("table")(2)
        Set objRow = objTable.getElementsByTagName("tr")(0)
        Set objColumn = objRow.getElementsByTagName("td")(1)
        strText = objColumn.innertext
    End With
    Range("B25").End(xlUp).Offset(1, 0) = strText
End Sub
 
Open de pagina in je browser.
Toets F12, als het goed is springt er onderaan beeld een scherm open, klopt dat?

Welke browser heb je, internet explorer? firefox? chrome?
 
Of

Code:
Sub M_snb()
    With CreateObject("MSXML2.XMLhttp")
      .Open "Get", "http://www.hetweeractueel.nl/weer/alkmaar2/actueel/", False
      .send

      Do Until .readystate = 4
        DoEvents
      Loop

      MsgBox Replace(Split(Filter(Split(.responsetext, vbLf), "'>Temperatuur")(0), "strong>")(1), "°C</", Chr(176) & "C")
    End With
End Sub
 
Laatst bewerkt:
Alphamax,

Ik werk met Internet explorer

Na op F12 geklikt te hebben , website uiteraard eerst geopend , opent zich het Html-bestand.
15 A4 velletjes en ongeveer 1500 woorden
Onderstaande Code is een deel hieruit.
Ik weet echter niet wat er gewijzigd moet worden in uw code (de 3 regels met Set) om bv. het dauwpunt uit de site te halen.
Ben op HTML gebied een absolute leek.
Misschien is het toch voor een persoon als ik uit te leggen.
Jaap

Code:
<td width="180">Temperatuur</td><td width="200"><strong>7.0 °C</strong></td>
		<td width="150">Windchill</td><td width="100"><strong>4.3 °C</strong></td>
  		</tr>
		<tr>
		<td>Windsnelheid en -richting</td><td><strong>7.4 km/uur uit NW</strong></td>
		<td>Hitte index</td><td><strong>7.0 °C</strong></td>
  		</tr>
		<tr>
		<td>Windkracht</td><td><strong>2 bft - Zwak</strong></td>
		<td>Dauwpunt</td><td><strong>5.5 °C</strong></td>
  		</tr>
		<tr>
		<td>Maximale windsnelheid</td><td><strong>41.0 km/uur om 06:55 uur</strong></td>
		<td>Luchtvochtigheid</td><td><strong>90.0 %</strong></td>
  		</tr>
		<tr><td>&nbsp;</td><td>&nbsp;</td></tr>
		<tr>
		<td>Barometer</td><td><strong>1016.9 hPa </strong></td>
		<td>Neerslag</td><td><strong>0.0 mm</strong></td>
 
op de weg van alphamax verder gestapt, macro laten lopen en 5 sec wachten
 

Bijlagen

  • info uit website halen.xlsm
    22,1 KB · Weergaven: 39
Alle forumleden heel erg bedankt voor jullie hulp en reacties.
Ik kan hier wel verder mee.

Snb jouw oplossing werkt veel sneller dan alle andere geboden oplossingen.
Ik kom er alleen niet uit om alleen de temperatuur in kolom B te krijgen.
Zou je mij daar nog mee willen helpen?
Jaap
 
Laatst bewerkt door een moderator:
Sneller, sneller?

Mijn ervaring is dat dit stukje code soms verder gaat als de pagina niet helemaal geladen is.
Code:
Do Until .readystate = 4
        DoEvents
      Loop
Vervolgens krijg je foutmeldingen in de code.

Daarom voeg ik nog een wachtlus toe, en bij trage verbindingen maak ik hem nog wat langer ook.
Code:
Application.Wait DateAdd("s", 1, Now)

Hardlopers zijn doodlopers, zeker bij webscraping.
 
Laatst bewerkt:
Code:
Sub M_snb()
    With CreateObject("MSXML2.XMLhttp")
      .Open "Get", "http://www.hetweeractueel.nl/weer/alkmaar2/actueel/", False
      .send

      Do Until .readystate = 4
        DoEvents
      Loop

      sheets(1).cells(rows.count,2).end(xlup).offset(1)= Replace(Split(Filter(Split(.responsetext, vbLf), "'>Temperatuur")(0), "strong>")(1), "°C</", Chr(176) & "C")
    End With
End Sub

Bij deze bibliotheek hoeft niets met de grafische kaart gedaan te worden, omdat een GUI ontbreekt.
Visible True/False is dan ook niet van toepassing.
Evenmin hoeft de code geïnterpreteerd te worden als html: het blijft platte tekst.
 
Laatst bewerkt:
Snb,
Helemaal goed. Dank je wel.

Alphamax,
Ja , dat is inderdaad iets om rekening mee te houden.

Een ieder nogmaals bedankt.
Probleem opgelost
Weer wat opgestoken.

Vriendelijke groet , Jaap
 
Snb,

Nog even een probleem.
De code geeft "4.4 °C</" als uitkomst.
Het zou alleen 4.4 °C moeten zijn.
Is dat nog te veranderen?
 
Ja, Maar dat kun je ook zelf (zou je zelf moeten kunnen).

Code:
Sub M_snb()
    With CreateObject("MSXML2.XMLhttp")
      .Open "Get", "http://www.hetweeractueel.nl/weer/alkmaar2/actueel/", False
      .send

      Do Until .readystate = 4
        DoEvents
      Loop

      sheets(1).cells(rows.count,2).end(xlup).offset(1)= Replace(Split(Filter(Split(.responsetext, vbLf), "'>Temperatuur")(0), "strong>")(1), "#&176;C</", Chr(176) & "C")
    End With
End Sub
 
Met een macro-opname kan je ook een heel eind komen en kan inzicht geven welke tabel je moet hebben.

Code:
Sub Macro3()
  With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.hetweeractueel.nl/weer/alkmaar2/actueel", Destination:=Range("$A$1"))
    .WebTables = "3"
    .Refresh BackgroundQuery:=False
  End With
End Sub

Zoals al eerder opgemerkt is 'webscraping' een listige methode om data binnen te halen. Een kleine aanpassing in de code van de site kan er al voor zorgen dat geen van de codes meer werkt.
 
Laatst bewerkt:
VenA,
Dank je wel.
Ik snap het nu en weet ook als ik een andere waarde uit tabel moet hebben , hoe dit te doen

snb ,
Ook de laatste code geeft nog steeds hetzelfde probleem.
Ik gebruik Office365 , zou het daar in kunnen liggen?

Jaap
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan