Saya mencoba mengikis tabel di tab menggunakan rvest tetapi html_elements() tampaknya mengabaikannya.

library(tidyverse)
library(rvest)

URL.BNPF <- 'https://fundkis.com/en/funds/bnppf-privatesustainable-balanced/BE6294262298#navs'
html <- read_html(URL.BNPF)

test <- html %>% 
    html_elements('#navs') %>%
    html_elements('.row') 

Kode berfungsi sampai di sana, tetapi apa pun yang saya coba setelah mengekstrak tabel itu sendiri (dengan judul "Nilai Aset Bersih Historis (Kutipan)") mengembalikan daftar kosong. Saya menduga fakta bahwa tabel berada di bawah tab dapat memengaruhi class atau id yang perlu saya cari.

Banyak terima kasih sebelumnya.

1
Sal 27 Mei 2021, 08:23

1 menjawab

Jawaban Terbaik

Data diambil secara dinamis dari panggilan API. Anda dapat mengambil kunci dari url awal dan meneruskannya ke panggilan API dan mendapatkan data kembali sebagai json. Saya mengubah parameter pageSize dari panggilan API menjadi cukup besar untuk mendapatkan semua kemungkinan hasil.

library(rvest)
library(stringr)
library(jsonlite)

r <- read_html('https://fundkis.com/en/funds/bnppf-privatesustainable-balanced/BE6294262298#navs') 

share_id <- stringr::str_match(r %>% html_node('[name=ReactRiskPart]') %>% html_attr('props'), '"shareId": "(.*?)"')[,2]

api_url <- sprintf('https://fundkis.com/api/fkdb/navs/%s?PageIndex=0&PageSize=2000', share_id)

data<- jsonlite::read_json(api_url)

Sebagai kerangka data:

library(rvest)
library(stringr)
library(jsonlite)
library(tidyverse)
library(purrr)

r <- read_html("https://fundkis.com/en/funds/bnppf-privatesustainable-balanced/BE6294262298#navs")

share_id <- stringr::str_match(r %>% html_node("[name=ReactRiskPart]") %>% html_attr("props"), '"shareId": "(.*?)"')[, 2]

api_url <- sprintf("https://fundkis.com/api/fkdb/navs/%s?PageIndex=0&PageSize=2000", share_id)

data <- jsonlite::read_json(api_url)

df <- map_dfr(data, data.frame) %>%
  mutate(Date = format.Date(NavDate)) %>%
  select(-c("FundShareId", "NavDate")) %>%
  rename(Currency = NavCurrencyISO, `Net Asset` = TotalAum, VL = Nav, `Nb Shares` = NbShares) %>%
  relocate(Date, Currency, VL, `Nb Shares`, `Net Asset`)
1
QHarr 27 Mei 2021, 06:05