• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyciąganie danych z sieci Web

VPS Starter Arubacloud
0 głosów
285 wizyt
pytanie zadane 20 lipca 2022 w Visual Basic przez arkopolo Początkujący (250 p.)

Jestem zainteresowany wyciągnięciem danych dot. notowań funduszy PPK z jednej z dwóch podanych stron (bardziej interesowałaby mnie pierwsza opcja):

  1. https://www.analizy.pl/fundusze-ppk/notowania
  2. https://www.biznesradar.pl/fundusze/ppk

W przypadku pierwszej opcji nie wiem jak tego mogę dokonać. W przypadku drugiej opcji napotykam na problem w przypadku pobierania danych do Excela poprzez Dane -> Z sieci Web. Próbuję tego dokonać poprzez wejście w archiwum notowań danego funduszu, np. TEN. Archiwum to jest jednak zlokalizowane na wielu podstronach, w opisanej opcji mogę pobierać (ten sposób umożliwia też późniejsze odświeżenie danych) pojedyncze strony. Chciałbym natomiast, aby automatycznie pobierać całą historię notowań dla danego funduszu ze wszystkich podstron. Czytałem trochę o robieniu pętli makro (tutaj link do wpisu), jednak nie potrafię tego rozgryźć (moja strona jest chyba nieco inna). 

Będę wdzięczny za wskazówkę, próbny kod w VBA, który nakieruje mnie co mam zrobić :)

Pozdrawiam

1 odpowiedź

0 głosów
odpowiedź 20 lipca 2022 przez VBService Ekspert (251,210 p.)
edycja 21 lipca 2022 przez VBService

W podanym przez Ciebie linku, kolejne podstrony różnią się ostatnią cyfrą (przecinek i cyfra)

1 strona:   https://www.biznesradar.pl/notowania-historyczne/NNDN25.TFI
2 strona:   https://www.biznesradar.pl/notowania-historyczne/NNDN25.TFI,2
3 strona:   https://www.biznesradar.pl/notowania-historyczne/NNDN25.TFI,3   itd.

dla strony 1 możesz ustawić  https://www.biznesradar.pl/notowania-historyczne/NNDN25.TFI,1

więc kod, ze strony (chodzi o linię 13)

Czytałem trochę o robieniu pętli makro (tutaj link do wpisu)

 

Sub ImportStronWeb()
'
' ImportStronWeb Makro
'
 
'
 
Dim intLicznik As Long
intlicznikpodstron = 1 'np 8 podstron
intLicznikWierszy = 1 'np kolejne dane w odstępie 500 wierszy
 
Do While intlicznikpodstron < 8
    With ActiveSheet.QueryTables.Add(Connection:="URL;https://tomaszkenig.pl/page/" & intlicznikpodstron & "/", _
    ' reszta kodu

 

zamień  np. tak

Sub ImportStronWeb()
'
' ImportStronWeb Makro
'
 
'
 
Dim intLicznik As Long
intlicznikpodstron = 1 'np 8 podstron
intLicznikWierszy = 1 'np kolejne dane w odstępie 500 wierszy
 
Do While intlicznikpodstron < 8
    With ActiveSheet.QueryTables.Add(Connection:="URL;https://www.biznesradar.pl/notowania-historyczne/NNDN25.TFI," & intlicznikpodstron, _
    ' reszta kodu

oczywiście wartości dla zmiennych: intlicznikpodstronintLicznikWierszy  ustaw według własnych potrzeb.

komentarz 28 lipca 2022 przez VBService Ekspert (251,210 p.)

Użyłem Twój plik excel-a i Twój kod zamieniłem na ten kod

Option Explicit
Option Base 1
 
Sub test()
    Dim intPage As Integer
    Dim arrColumn() As Variant
        arrColumn = Array("A", "C", "E", "G", "I", "K", "M") ' Co druga kolumna

    ActiveWindow.ScrollRow = 1
    Range("A1:Z" & Rows.Count).ClearContents
         
    ActiveWindow.ScrollRow = 24 ' Przewiń widok do 24 wiersza
         
    For intPage = 1 To UBound(arrColumn)
        With ActiveSheet.QueryTables.Add(Connection:="URL;https://www.biznesradar.pl/notowania-historyczne/NNDN25.TFI," & intPage, _
            Destination:=Range("$" & arrColumn(intPage) & "$1"))
            .Name = "arkopolo"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlEntirePage
            .WebFormatting = xlWebFormattingNone
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
         
        DoEvents ' Widać jak kolejne kolumny się wczytują
    Next [intPage] ' For intPage = 1 To UBound(arrColumn)
     
     
    Range("A1:A10").EntireRow.Delete
     
    Dim strFundName_Line1, strFundName_Line2 As String
     
    strFundName_Line1 = Range("A1").Value
    strFundName_Line2 = Range("A2").Value
     
    Range("A1:A12").EntireRow.Delete
    Range("A1:A3").EntireRow.Insert
     
    Range("A1").Value = strFundName_Line1
    Range("A2").Value = strFundName_Line2
     
    Range("A56:" & arrColumn(UBound(arrColumn)) & Rows.Count).ClearContents
    ActiveWindow.ScrollRow = 1
End Sub

 

użyłem Office 64bit 2016 Pro plus pl, może to jest problem z wersją jaką używasz.

komentarz 28 lipca 2022 przez arkopolo Początkujący (250 p.)
Ja używam Office 64bit 2019 Pro Plus PL, więc jest nieco nowsza wersja. Ale chyba nie powinno być problemów przy nowszej wersji. Ona też nie jest znowu taka nowa, żeby były to jakieś problemy "niemowlęce". Musiałbym kupić inną/starszą wersję żeby przetestować...

A to pobieranie z tego drugiego linku to jak domyślam się odpada tym sposobem, nie?
komentarz 29 lipca 2022 przez arkopolo Początkujący (250 p.)

Eureka! Udało mi się obejść problem! smiley Mam w związku z tym ostatnie pytanie, czy jest możliwość wrzucenia w jedno makro kilku funduszy, aby zaciągały się w osobnych kolumnach?

Np. Fundusz 1 zajmuje kolumny A:B (data, kurs), fundusz 2 C:D (data kurs)... itd.

komentarz 29 lipca 2022 przez VBService Ekspert (251,210 p.)
Tak, można wrzucić w jedno makro.
komentarz 29 lipca 2022 przez arkopolo Początkujący (250 p.)

Mógłbyś wskazać mi jakiej zmiany w kodzie muszę dokonać, aby wrzucić kolejny fundusz (może być kolejny fundusz z TEGO linku)? Resztę już potem dłubałbym sobie po swojemu (mam nadzieję, że podołam) wink

Podobne pytania

0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 1 września 2022 w Visual Basic przez morking Nowicjusz (210 p.)
0 głosów
0 odpowiedzi 98 wizyt
0 głosów
1 odpowiedź 2,556 wizyt
pytanie zadane 4 kwietnia 2018 w Visual Basic przez krzysztooof94 Początkujący (350 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...