[ Blue82 @ 04.10.2020. 11:12 ] @
[ Blue82 @ 04.10.2020. 11:12 ] @
[ Jpeca @ 04.10.2020. 21:34 ] @
Ne znam da ti odgovorim na pitanje - iz debuga izgleda kao da je responseText nekompletan ima 6 tabela sa id news ali ova prva sa kursnom listom nedostaje i kompletan prvi deo.
Što se praktičnog dela tiče za izvlačenje podataka sa web stranica postoji alat Data > Get Data > From Other Sources > From Web, koji radi jako lepo sa tabelama na strani. Postoji mogućnost transformacija podataka iz pronađenih tabela tako da se direktno prebace u željeni oblik, bez potrebe za makroima. (Za komplikovanije slučajeve može da se koristi jezik M u transformacijama). https://www.youtube.com/watch?...qY&ab_channel=LeilaGharani [ djux66 @ 05.10.2020. 08:23 ] @
HTML za kurs evra ti se poziva sa druge adrese, ako otvoriš web developer tools i odeš na network pa uradiš refresh stranice nbs.rs, videćeš da se nakon nbs.rs poziva i
https://nbs.rs/static/nbs_site.../kurs/Indikativni_Kurs_20.html Probaj sa tom adresom, pa vidi dal onda možeš da pronađeš tabelu. [ Jpeca @ 05.10.2020. 08:45 ] @
Uspeo sam sa tvojim kodom da izvučem "kompletnu" stranicu u clipboard. Ne znam zašto se ne prikazuje kompleta u XMLDoc.body.innerHTML.Međutim i ova kompletna stranica nema tabelu sa kursom. Koliko sam shvatio ona se popunjava kroz javascript sa adrese koju je naveo djux66 (ima latinična, ćiriličan i enlish verzija)
U svakom slučaju mislim da vredi da pogledaš alat koji sam ti naveo ja tako dobijem tabelu sa adrese koju si naveo bez problema. [ Blue82 @ 05.10.2020. 14:46 ] @
Evo me konacno. Na zalost dok vi radite ja ne mogu ovde a kad vi ne radite ja mogu da svratim.
@Jpeca poznati su mi oni alati, no mene zanima vba programiranje pa sam naleteo na ovaj problem koji nisam umeo da rastumacim zasto nastaje. Primetio sam i sam da jedan izvestaj skida jednu tabelu manje, ali ne znam razlog. No resenje je verovatno u ovome sto prica @djux66, mada mi nije jasno zasto sa XMLDoc.body.innerHTML ne skida celu stranicu al eto sada znam da i to moze da se desi. EDIT: @djux66 probao sam sa tvojom adresom i tu uredno nadje podatke. Naucili smo jos nesto. Hvala oboma. [ Blue82 @ 05.10.2020. 15:25 ] @
U prilogu sam stavio novi fajl.
Sitno sam modifikovao program i u Metodologiji 1 pokusam da prikazem kursnu listu na dan 04.10.2020. godine, i to radi pomoću IE. U metodologiji 2 pokušavam isto, ali kada kažem Element.Click, umesto da klikne na dugme posle koga treba da prikaže listu, dobijem sistemsku poruku gde me pita sa kojim programom želim da odem na link. Može li se to nekako preskočiti? [Ovu poruku je menjao Blue82 dana 05.10.2020. u 18:05 GMT+1] [ 3okc @ 10.10.2020. 12:08 ] @
Umesto odgovora, preporućio bih ti kanal WiseOWL koji ima nekih 8 podužih videa na temu preuzimanja podataka sa veba, putem Excel VBA.
Ili vidi sam plejlistu koja je skromno naslovljena kao "uvod u VBA" ali ima stvari koje nigde drugde nisam video. https://www.youtube.com/playli...s-AWhQzckr8Dgmgb3akx_gFMnpxTN5 [ Blue82 @ 11.10.2020. 19:57 ] @
Možda sam nešto prevideo, ali ja ne videh ni jedan primer sa klikom na dugme koristeći MSXML2.XMLHTTP60.
Sve su klikovi na hyperlink koji su mi poznati. Ima dobrih primera za proširivaje razmišljanja povodom teme "Scraping Website" ali nisam pronašao odgovor na moje pitanje. [ Blue82 @ 14.10.2020. 07:20 ] @
Pokušao sam na osnovu primera sa gore pomenutog sajta da odradim isto preko POST Requests.
U suštini uspeo sam to da uradim na više različitih sajtova i radi ali sajt NBS-a se po nečemu razlikuje i ne znam zbog čega kod njega ne dobijam rezultat koji tražim. U prilogu je primer sa par redova koda, pa u koliko neko ima živaca i vremena da pogleda u čeku je problem. Program bi trebalo da zatraži kursnu listu na dan i da na desktopu snimi stranicu da se vidi rezultat (da li smo dobili traženu stranicu). Umesto kursne liste na dan dobijam početnu stranicu gde se očekuje da upišem podatke za koji dan tražim kursnu listu. [ Blue82 @ 15.10.2020. 08:55 ] @
Da li niko ne zna ili ne stižete pogledati?
U suštini me zanima i šta može da bude teoretski pa da znam u kom pravcu da tražim. Na 99% sajtova po ovoj metodologiji uspem da dođem do traženog podatka a sajt NBS-a iako mi po svemu deluje da je običan i da ne odskače od drugih pravi problem. [ bokinet @ 16.10.2020. 07:17 ] @
Kurs NBS https://nbs.rs/static/nbs_site.../kurs/Indikativni_Kurs_20.html Primer preuzimanja sadrzaja i parsovanja istog nakon preuzimanja u VBA. Na slican nacin preradidi parsovanje sadrzaja NBS. Code: Public Function GetWebContent(ByVal ThisUrl As String) As String Dim r As String Dim Http As Object On Error GoTo ErrHandler r = "" ' Create new instance of object Set Http = CreateObject("MSXML2.XMLHTTP") ' Get content from given url using GET method Http.Open "GET", ThisUrl, False ' Setnd request Http.send ' Get response r = Http.responseText ' Free memory resource Set Http = Nothing ' Return value GetWebContent = r Exit Function ErrHandler: Debug.Print Now, "GetWebContent()", Err.Number, Err.Description ' Return value GetWebContent = "" End Function Public Sub HtmlParse() ' TOOLS -> References -> Add Reference 'Microsoft HTML Object Library' On Error GoTo ErrHandler Dim Html As HTMLDocument Dim Topics As Object Dim TitleElem As Object Dim DetailsElem As Object Dim Topic As HTMLHtmlElement Dim i As Integer ' Create new instance of object Set Html = New HTMLDocument ' Get and set web content as HTML content Html.body.innerHTML = GetWebContent("https://news.ycombinator.com/") ' Get all topic elements Set Topics = Html.getElementsByClassName("athing") i = 2 For Each Topic In Topics Set TitleElem = Topic.getElementsByTagName("td")(2) Sheets(1).Cells(i, 1).Value = TitleElem.getElementsByTagName("a")(0).innerText Sheets(1).Cells(i, 2).Value = TitleElem.getElementsByTagName("a")(0).href Set DetailsElem = Topic.NextSibling.getElementsByTagName("td")(1) Sheets(1).Cells(i, 3).Value = DetailsElem.getElementsByTagName("span")(0).innerText Sheets(1).Cells(i, 4).Value = DetailsElem.getElementsByTagName("a")(0).innerText i = i + 1 Next ' Free memory resource Set Topic = Nothing Set DetailsElem = Nothing Set TitleElem = Nothing Set Topics = Nothing Set Html = Nothing Exit Sub ErrHandler: ' Free memory resource Set Topic = Nothing Set DetailsElem = Nothing Set TitleElem = Nothing Set Topics = Nothing Set Html = Nothing ' Show message MsgBox "HTML parsing error." & vbCrLf & "Error " & Err.Number & " - " & Err.Description, vbExclamation, "Html Parse" End Sub [ Blue82 @ 16.10.2020. 09:29 ] @
@bokinet hvala za primer, no nije mi cilj da skinem kurs EUR (umem to da uradim na više načina), nego me zanima baš po konkretnoj metodologiji iz mog primera, zašto funkcioniše na 99,9% sajtova sa kojih sam probao da skinem podatak a na sajtu NBS ne funkcioniše.
Ne vidim da se sajt NBS-a razlikuje i po čemu od drugih sajtova, deluje potpuno obično ali definitivno postoji neka caka za koju ja ne znam, vezana za njega. [ bokinet @ 17.10.2020. 13:43 ] @
Pa tako su oni odlucili a i opet sama strana je tako koncipirana da odredjene stvari povlaci sa razlicitih strana/izvora unutar iste.
Ovaj html sto vuce za kurs on moze da bude kesiran pa se ne generise stalno tj. verovatno azurira se jednom dnevno. S' druge strani svaki put kada se nakaci korisnik na nbs, tj na prvi stranu koja izlazi onda se taj sadrzaj generise u letu... da bi smanjili i/o na serveru i workload onda su to tako resili. Ovo nije nista novo i toga ima i na stranim siteovima. Sve vise sada se rade node.js i serverside javascript based web servisi i aplikacije pa tako po neki put eto se upadne u nerazumevanje server strane. Predlazem da uzmete da to recimo isto probate da uradite u recimo dot.net ili php okruzenju i rezultati vas mozda i iznenade. Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|