Web İsYatırım Sayfasından farklı tablodan veri çekmek

Katılım
31 Ağustos 2004
Mesajlar
146
Excel Vers. ve Dili
iş:Office 2003 Tr/office 2016trk
ev:office 2003 tr/office 2016trk
Altın Üyelik Bitiş Tarihi
29/12/2022
MErhaba;
Daha önce Sayın @halit3 üstadın
https://www.excel.web.tr/threads/bilanco-verileri-web-ten-isyatirimdan-verileri-alma.107062/ daki dosyası ile data çekebiliyordum fakat hem işbank hem garanti sayfaları değiştirdiler. Benim bilgimde yenilemeye imkan tanımıyor. Fakat siteyi excel2016 da web den al deyince bile takılıyor.
Browserda
https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/sirket-karti.aspx?hisse=PETKM sayfasını açınca Mali Tablolar bölümünü tıklayınca gerekli verileri görebiliyorum.
Acaba bu sayfayı açıp 4 üncü sekmedeki verileri seçtirmek için nasıl bir kod kullanmalıyım?
 

Ekli dosyalar

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,798
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Ben aslında bu tür konulara cevap yazmaktan kaçınıyorum ilgili web sitelerinin alt yapıları çok çabuk değişiyor bu yüzden cevap yazmıyorum çünkü emek başuna gidiyor. bu veri herhalde yeterli olacaktır.

PHP:
Private Sub CommandButton3_Click()

Range("A2:E1500").ClearContents

Dim URL As String

Dim IE As Object


URL = "https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/sirket-karti.aspx?hisse=PETKM"
Set IE = CreateObject("InternetExplorer.Application")


IE.Navigate URL
IE.Visible = 1
IE.Width = 200
IE.Height = 100
IE.Left = 10
IE.Top = 0


Do Until IE.ReadyState = 4: DoEvents: Loop
Do While IE.Busy: DoEvents: Loop

say1 = 2

On Error Resume Next


For Each tb In IE.Document.getElementsByTagName("div")
    For Each bb In tb.getElementsByTagName("ul")
        For Each tr In bb.getElementsByTagName("li")
            For Each ts In tr.getElementsByTagName("a")
            If ts.ID = "page-4" Then
            Application.Wait (Now + TimeValue("0:00:01"))
            ts.Click
            Do Until IE.ReadyState = 4: DoEvents: Loop
            Do While IE.Busy: DoEvents: Loop
            Application.Wait (Now + TimeValue("0:00:01"))
            GoTo atla1
            End If
            Next ts
        Next tr
    Next bb
Next tb
atla1:

ekle = 0


For Each tb In IE.Document.getElementsByTagName("div")
    For Each bb In tb.getElementsByTagName("Table")
        For Each tr In bb.getElementsByTagName("tbody")
          say = say + 1
          If say > 26 Then
          ekle = 1
          
            For Each ts In tr.getElementsByTagName("tr")
           ' If "Bilanço" = ts.innerText Then ekle = 1
            'If "Dipnot" = ts.innerText Then GoTo atla2
            If ekle = 1 Then
            say1 = say1 + 1
            sut = 1
          
                For Each td In ts.getElementsByTagName("td")
                If IsNumeric(td.innerText) = True Then
                'MsgBox Replace(td.innerText, ",", "")
                'If Cells(say1, sut) = Replace(td.innerText, ",", "") * 1 > 0 Then
                Cells(say1, sut) = td.innerText * 1
                 If Cells(say1, sut) = 0 Then Cells(say1, sut) = ""
                'End If
                Else
                Cells(say1, sut) = td.innerText
                End If
                sut = sut + 1
                Next td

            End If
            Next ts

        End If
            If say > 26 Then GoTo atla2
        Next tr
    Next bb
Next tb

atla2:
Application.Wait (Now + TimeValue("0:00:01"))


IE.Quit: Set IE = Nothing

MsgBox ("Bitti  ")
End Sub
 
Son düzenleme:
Katılım
31 Ağustos 2004
Mesajlar
146
Excel Vers. ve Dili
iş:Office 2003 Tr/office 2016trk
ev:office 2003 tr/office 2016trk
Altın Üyelik Bitiş Tarihi
29/12/2022
Çok Teşekkür ederim Haliyet Bey biliyorum ama malesef bu seviyelere çıkamadığımız için sormak zorunda kalıyoruz.:(

Not:Kodu 50 kere adımladım class ları az da olsa anladım ama döngüyü hala çözemedim ve hücrelere atımıda. yani ben bunu web den copy paste dışında yapabilmem imkansız mış.
 
Son düzenleme:

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,798
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Bu dosyada biraz farklı Sayfa2 deki bilgiler ışığında Sayfa1 deki A1 hücresindeki seçilen şirket adına verileri çıkartıyor.
 

Ekli dosyalar

Katılım
31 Ağustos 2004
Mesajlar
146
Excel Vers. ve Dili
iş:Office 2003 Tr/office 2016trk
ev:office 2003 tr/office 2016trk
Altın Üyelik Bitiş Tarihi
29/12/2022
Eski dosyanın yeni versiyonu olmuş elinize sağlık (y)(y)
bu arada php bottan c# bota kadar 50 video ve dosya ile çalıştım geçen hafta. en son powershell ile csv yaptı bir arkadaş ama sizin dosyanın pratikliği hiç birinde yok.

Dögü işi burada can alıcı nokta herhalde..
 
Son düzenleme:

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,798
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Teşekkürler iyi günler
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,798
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
4 nolu mesejdaki dosyayı güncelledim
 
Katılım
31 Ağustos 2004
Mesajlar
146
Excel Vers. ve Dili
iş:Office 2003 Tr/office 2016trk
ev:office 2003 tr/office 2016trk
Altın Üyelik Bitiş Tarihi
29/12/2022
Çok Teşekkür ederim. :giggle:
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,798
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Dosyayı güncelledim
PHP:
Sub deneme()
Range("A2:E200").ClearContents
Dim URL As String
Dim IE As Object
ekle = Cells(1, 1).Value
URL = "https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/sirket-karti.aspx?hisse=PETKM"
Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate URL
IE.Visible = 1
IE.Width = 200
IE.Height = 100
IE.Left = 10
IE.Top = 0

Do Until IE.ReadyState = 4: DoEvents: Loop
Do While IE.Busy: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop

Application.Wait (Now + TimeValue("0:00:01"))

sat = 3
For k = 24 To 26
Set t = IE.document.getElementsByTagName("table").Item(k)
If t.Rows(1).Cells(0).innerText <> "Bilanço" Then GoTo atla5
For i = 1 To t.Rows.Length - 1
For j = 0 To t.Rows(i).Cells.Length - 1
If IsNumeric(t.Rows(i).Cells(j).innerText) = True Then
If t.Rows(i).Cells(j).innerText * 1 > 0 Then
Cells(sat, j + 1) = t.Rows(i).Cells(j).innerText * 1
End If
Else
Cells(sat, j + 1) = t.Rows(i).Cells(j).innerText
End If
Next
sat = sat + 1
Next
GoTo atla6
atla5:
Next
atla6:

IE.Quit: Set IE = Nothing

MsgBox ("Bitti  ")
End Sub
 

Ekli dosyalar

Son düzenleme:
Katılım
31 Ağustos 2004
Mesajlar
146
Excel Vers. ve Dili
iş:Office 2003 Tr/office 2016trk
ev:office 2003 tr/office 2016trk
Altın Üyelik Bitiş Tarihi
29/12/2022
Öncelikle Herkesin Mübarek Kurban Bayramını kutlar sağlık sıhhatler dilerim.

Halit Bey;
Elinize sağlık her cevapda biraz daha hızlanıyor sistem.
Daha önce yazdığınızı kullanmış biri olarak kafa sürekli kıyas yapıyor :censored:

1-)Mesela sayfa 4 dönem veriyor (aslında kod bölümünde eski dönemlerde var) tek seferde tümünü almak için döngüde nereleri değiştirmek gerekli veya 10 dönem ile kısıtlamak?

2-) Aslında sayfada excel e aktar mevcut onun üzerinde click olayını çalıştım ama ne "i" de ne "a" class dan beceremedim ....örnek resim...

Belki işine yarayan çıkar

başlat çalıştır powershell ISE ile çalışıyor. Windows 7 kullananlar frameworkd 5,01 yükleyerek çalıştırabilirler.
ekte powershall ile yapılmış sayfada ne kadar dönem varsa kod içine yazarak csv olarak kaydediyor. sadece son satırdaki kayıt yerini değiştirmeniz yeterli. sadece sanayi şirketleri bilançoları için
 

Ekli dosyalar

Katılım
24 Aralık 2012
Mesajlar
21
Excel Vers. ve Dili
excel 2016
Altın Üyelik Bitiş Tarihi
05-08-2023
Katılım
24 Aralık 2012
Mesajlar
21
Excel Vers. ve Dili
excel 2016
Altın Üyelik Bitiş Tarihi
05-08-2023
Dosyayı güncelledim
PHP:
Sub deneme()
Range("A2:E200").ClearContents
Dim URL As String
Dim IE As Object
ekle = Cells(1, 1).Value
URL = "https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/sirket-karti.aspx?hisse=PETKM"
Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate URL
IE.Visible = 1
IE.Width = 200
IE.Height = 100
IE.Left = 10
IE.Top = 0

Do Until IE.ReadyState = 4: DoEvents: Loop
Do While IE.Busy: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop

Application.Wait (Now + TimeValue("0:00:01"))

sat = 3
For k = 24 To 26
Set t = IE.document.getElementsByTagName("table").Item(k)
If t.Rows(1).Cells(0).innerText <> "Bilanço" Then GoTo atla5
For i = 1 To t.Rows.Length - 1
For j = 0 To t.Rows(i).Cells.Length - 1
If IsNumeric(t.Rows(i).Cells(j).innerText) = True Then
If t.Rows(i).Cells(j).innerText * 1 > 0 Then
Cells(sat, j + 1) = t.Rows(i).Cells(j).innerText * 1
End If
Else
Cells(sat, j + 1) = t.Rows(i).Cells(j).innerText
End If
Next
sat = sat + 1
Next
GoTo atla6
atla5:
Next
atla6:

IE.Quit: Set IE = Nothing

MsgBox ("Bitti  ")
End Sub
Merhaba, Halit Hocam dosya güzel çalışıyor güncelleme 3 yıl olmuş ama hala verileri çekebiliyor. ancak data sayfasında şirket isimlerinin hepsini getirmiyor, tekrar tekrar aynı şirketleri yenileyerek atıyor şirket isimlerini https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/default.aspx bu sayfadan aldırarak tekrar etmeden bir kez isimleri çekmesi için kodda nasıl bir değişiklik yapabiliriz.
 

sevenvironment

Altın Üye
Katılım
27 Ekim 2022
Mesajlar
29
Excel Vers. ve Dili
vba
Altın Üyelik Bitiş Tarihi
23-11-2027
Öncelikle Herkesin Mübarek Kurban Bayramını kutlar sağlık sıhhatler dilerim.

Halit Bey;
Elinize sağlık her cevapda biraz daha hızlanıyor sistem.
Daha önce yazdığınızı kullanmış biri olarak kafa sürekli kıyas yapıyor :censored:

1-)Mesela sayfa 4 dönem veriyor (aslında kod bölümünde eski dönemlerde var) tek seferde tümünü almak için döngüde nereleri değiştirmek gerekli veya 10 dönem ile kısıtlamak?

2-) Aslında sayfada excel e aktar mevcut onun üzerinde click olayını çalıştım ama ne "i" de ne "a" class dan beceremedim ....örnek resim...

Belki işine yarayan çıkar

başlat çalıştır powershell ISE ile çalışıyor. Windows 7 kullananlar frameworkd 5,01 yükleyerek çalıştırabilirler.
ekte powershall ile yapılmış sayfada ne kadar dönem varsa kod içine yazarak csv olarak kaydediyor. sadece son satırdaki kayıt yerini değiştirmeniz yeterli. sadece sanayi şirketleri bilançoları için
iyi akşamlar, mesela https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/Common/Data.aspx/MaliTablo?companyCode=$code&exchange=TRY&financialGroup=XI_29&year1=2022&period1=9&year2=2022&period2=6&year3=2022&period3=3&year4=2021&period4=12 , bu kodu nereden alıyoruz.
Mesela ben investing üzerinden veri çekeceğim ama bu url yi nasıl temin ediyoruz bir türlü anlayamadım.
 
Üst