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 在选项卡下可能会影响我需要查找的 class
或 id
。
非常感谢。
数据是从 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`)
我正在尝试使用 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 在选项卡下可能会影响我需要查找的 class
或 id
。
非常感谢。
数据是从 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`)