• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Webden veri çekme

Katılım
12 Mayıs 2016
Mesajlar
386
Excel Vers. ve Dili
Ofis 2019- 32 Bit - Türkçe
Aşağıdaki kod ile Ziraat Katılım Bankasından altın alış satış tutarlarını excele çekiyordum fakat site arayüzü değiştiği için kod hata veriyor. Uğraştım ama yapamadım yardım ederseniz sevinirim. Şimdiden teşekkür ederim
Kod:
Sub veriCek()


    Dim URL As String
    Dim IE As Object
    
    Range("H2") = Format(Now, "dd.mm.yyyy hh:mm")
    URL = "https://www.ziraatkatilim.com.tr"
    
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate URL
    
    Do Until IE.ReadyState = 4
    Loop
    
    Range("A2:B2") = Empty
    
    Range("A2") = IE.document.querySelectorAll("#block-zk-content > article > div > div:nth-child(1) > div > div > div.col-lg-7.col-md-7 > div > div > div > div:nth-child(4) > div > div:nth-child(2) > div > div").Item(0).innerText / 1
    Range("B2") = IE.document.querySelectorAll("#block-zk-content > article > div > div:nth-child(1) > div > div > div.col-lg-7.col-md-7 > div > div > div > div:nth-child(4) > div > div:nth-child(3) > div > div").Item(0).innerText / 1
    Range("A2:B2").NumberFormat = "#.##"
    Range("G2").Value = Range("J2").Value
    Range("G3").Value = Range("J3").Value
    Range("G4").Value = Range("J4").Value
    Range("G5").Value = Range("J5").Value
    UserForm1.Show 'ana kod bloğuna geçerken bu satır aktif edilmeli

    IE.Quit
    Set IE = Nothing

 
End Sub
 
Kod:
Sub test()
    With CreateObject("InternetExplorer.Application")
        .Visible = False
        .navigate "https://www.ziraatkatilim.com.tr"
basla:
        Do While .Busy Or .readyState <> 4
            DoEvents
        Loop

        On Error Resume Next
        With .document
            Set lst = .getelementbyId("piyasalar-finance-portal-wrapper")
            If lst Is Nothing Then GoTo basla
            On Error GoTo 0
            Set rws = lst.getelementsByClassName("row align-items-center")
            Range("A1:C5") = Empty
            Range("A1:C1").Value = Array(Time, "ALIŞ", "SATIŞ")
            For i = 0 To rws.Length - 1
                Set cinsi = rws(i).getelementsByClassName("finance-portal__currency-title text-center font-weight-bold")
                Set kurlar = rws(i).getelementsByClassName("finance-portal__currency-val")
                Range("A" & i + 2).Value = cinsi(0).innerText
                Range("B" & i + 2).Resize(, 2).NumberFormat = "#,##0.0000"
                Range("B" & i + 2).Value = CDbl(Replace(kurlar(0).innerText, ",", "."))
                Range("C" & i + 2).Value = CDbl(Replace(kurlar(1).innerText, ",", "."))
            Next i
        End With
        .Quit
    End With

End Sub
 
Teşekkürler Sayın veyselemre
 
Google Sheets ile bir alternatif:

Verileri güncellemek için Sorgu ID için herhangi birkaç basamaklı sayı yazılması yeterlidir.


.Capture.PNG

.
 
Asri Bey,

Google Sheets'deki IMPORTXML fonksiyonunda, tıpkı VBA'deki gibi XPATH kullanıyoruz. Mantık olarak çok farklı değil.

Verilerin alınması için uzun VBA kodları yerine böyle kısa tek satırlık bir formülle alınabiliyor.

Söz konusu URL'de aradığımız bilgiler 7 ve 8. division'lar olduğu için, formülün INDEX kısmında bu değerleri kullandım....

.
 
Asri Bey,

Google Sheets'deki IMPORTXML fonksiyonunda, tıpkı VBA'deki gibi XPATH kullanıyoruz. Mantık olarak çok farklı değil.

Verilerin alınması için uzun VBA kodları yerine böyle kısa tek satırlık bir formülle alınabiliyor.

Söz konusu URL'de aradığımız bilgiler 7 ve 8. division'lar olduğu için, formülün INDEX kısmında bu değerleri kullandım....

.

Açıklama için teşekkür ederim.
 
Google Sheets kullanımını merak edenler için ayrıca; aşağıdaki linkte yer alan uygulamada buna benzer değişik formüller ve ilave olarak kullanılan script'ler (VBA'deki makroların karşılığı) bulunmaktadır. (Not: Uygulama ücretlidir)


.
 
Teşekkürler haluk hocam
 
Geri
Üst