Weboldalról adat kinyerése excelbe Visaul Basic-el
2021-05-01T19:55:42+02:00
2021-05-03T12:12:55+02:00
2022-07-18T23:50:25+02:00
peccs
Sziasztok!
Most ismerkedem a dologgal, működnek is dolgok, de... Találtam egy példát a neten, kipróbáltam, sikerült is módosítani például az eredmény cellába írásával, vagy a weblapon belül másik almenüben található adatok kiolvasása is sikerült, tehát mondhatni amire nekem kell, az ésszerű és működőképes. 
Azonban, ha ugyan ezt a kódot egy másik oldalon akarnám munkára fogni, akkor nem sikerül. Több oldalon is próbáltam, de mindenhol máshol hibát dob ki. (Az eredeti weboldalon, de más URL címekkel sikerül, de más weboldalon már nem.)
A kód:

Sub Get_Web_Data()
' TeachExcel.com

Dim request As Object
Dim response As String
Dim html As New HTMLDocument
Dim website As String
Dim price As Variant

website = "https://finance.yahoo.com/quote/EURUSD=X?p=EURUSD=X"
Set request = CreateObject("MSXML2.XMLHTTP")
request.Open "GET", website, False
request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
request.send
response = StrConv(request.responseBody, vbUnicode)
html.body.innerHTML = response
price = html.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").Item(0).innerText
MsgBox price
End Sub


Tehát ha átírok mindent értelemszerűen, akkor működik, de másik weblappal már nem, hiába cserélem ki a "website"-ot és a "price" értékeit.
Ha valami triviális dolgot rontok el, akkor megköszönnék egy kis útbaigazítást.
Mutasd a teljes hozzászólást!

  • Nem értek nagyon az Excelhez, de gondolom ez a rész lesz az:

    html.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").Item(0).innerText
    Ezek a class-nevek léteznek az oldalon? Valószínüleg nem.

    Ajánlom hogy mielőtt a scrapingbe belekezdenél, utánnaolvasnál egy kicsit annak hogy a DOM hogyan működik, például itt: JavaScript HTML DOM
    Mutasd a teljes hozzászólást!
  • Hello!
    Igen, a hiba természetesen ott van, ezt tudom is, csak nem tudom hogyan kéne ezt orvosolni. Köszi a linket, utána nézek, hátha sikerül. Egyébként igen, szerepel, azt is kicseréltem amikor próbálkoztam, de nyilván tudni kéne mit kell keresni még. :)
    Ahogy írtam is több példát végig tudtam csinálni, több különböző érték kiolvasása sikerült más url-ről is, de csak ezen a weboldalon belül. Tehát a logika alapja talán megvan, csak nem tudom mit kellene keresni, hogy ez más weblapon is működjön.
    Mutasd a teljes hozzászólást!
  • A scapeléshez sok dolgot kell manuálisan csinálni.

    Ha böngészőben jobklikkelsz az elemre, és valószínüleg találni fogsz egy opciót hogy kimásolja a CSS kiválasztót. Azzal próbáltad már?

    Nem nagyon lehet ebből olyat csinálni ami nagyon különböző weboldakon működik
    Mutasd a teljes hozzászólást!
  • Naívan azt hittem van rá esély, hogy adott Class-okkal lehessen dolgozni más oldalakon is. De ha ez így nem járható, akkor bukta. Csak megörültem, hogy több művelet is sikerült az elgondolt logika alapján... :D
    Mert a tutoriálba az volt, hogy adat kinyerése weboldalról. Gondoltam akkor nem CSAK arról a weboldalról lehet a példán keresztül... 

    Köszi a tippet, utána járok.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd