rvest -- 如何在选项卡中抓取 table?

rvest -- how to scrape a table in a tab?

我正在尝试使用 rvest 在选项卡中抓取 table,但 html_elements() 似乎忽略了它。

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') 

代码一直有效,但我之后尝试提取 table 本身(标题为“历史净资产值(报价)”)returns 的任何内容都是一个空列表。我怀疑 table 在选项卡下可能会影响我需要查找的 classid

非常感谢。

数据是从 API 调用中动态提取的。您可以从初始 url 中获取 key 并将其传递到 API 调用中,然后将数据返回为 json。我将 API 调用的 pageSize 参数更改为足够大以获得所有可能的结果。

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)

作为数据框:

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`)