Yahoo Finance изменила структуру своего сайта. Следующий код R ранее работал для очистки метаданных фонда. Код больше не работает для очистки целевых переменных (PE, NAV, Beta, Yield и т. д.). Ошибка в коде — переменная node_txt. Он ссылается на «таблицу», которой больше нет. Я не эксперт в проверке источника страницы, чтобы определить, где хранятся данные списка. Любая помощь по обновлению кода приветствуется.
library(rvest)
library(purrr)
library(dplyr)
ticker <- "IVV"
url <- paste0("https://finance.yahoo.com/quote/",ticker)
ivv_html <- read_html(url)
node_txt <- ".svelte-tx3nkj" # This contains "table" info of interest
df <- ivv_html %>%
html_nodes(paste0(".container", node_txt)) %>%
map_dfr(~{
tibble(
label = html_nodes(.x, paste0(".label", node_txt)) %>%
html_text(trim = TRUE),
value = html_nodes(.x, paste0(".value", node_txt)) %>%
html_text(trim = TRUE)
)
})
df %>%
filter(label %in% c("NAV", "PE Ratio (TTM)", "Yield", "Beta (5Y Monthly)", "Expense Ratio (net)"))
LOL... сайт попросил меня удалить вопрос, и они предоставили информацию для его улучшения. Веб-скейпинг HTML иногда является единственным способом получить необходимые данные. Вопрос действителен, и запрошенный результат определяется последней строкой. Именованные переменные представляют собой метаданные в первой таблице URL-адреса. Пожалуйста, дайте ответ (если он у вас есть)
Бегло просмотрев эту страницу, вы можете попробовать заменить svelte на yf.





Найдите yf-tx3nkj в атрибуте класса li, извлекая текст внутри диапазона и преобразуя его в матрицу.
library(xml2)
ivv_html |>
xml_find_all("//li[contains(@class, 'yf-tx3nkj')]/span/text()") |>
as.character() |>
tail(12) |>
matrix(6, 2, byrow = TRUE)
## [,1] [,2]
## [1,] "NAV" "561.61"
## [2,] "PE Ratio (TTM)" "28.29"
## [3,] "Yield" "1.30%"
## [4,] "YTD Daily Total Return" "18.34%"
## [5,] "Beta (5Y Monthly)" "1.00"
## [6,] "Expense Ratio (net)" "0.03%"
Отличная работа. Спасибо
Не следует удалять и повторно публиковать один и тот же вопрос. Поскольку этот код не работает, неясно, какой именно результат здесь требуется. Yahoo имеет право менять свой сайт каждый день, если захочет. Нет смысла отвечать на вопросы о конкретных сайтах, если вы не готовы приложить усилия, чтобы понять, как работают кодовые слова и что вам нужно делать, чтобы поддерживать их в актуальном состоянии. Всегда лучше использовать общедоступные API, чем пытаться очистить HTML, если это возможно.