Olá @pedro, tudo bem?
Por sorte, os seus dados são alimentados por uma API!
Olhando no Network (Apertando F12, entrando em Network e recarregando a página) da página, eu notei que tinha uma requisição para o arquivo json abaixo.
# primeira forma, via API ----
library(magrittr)
u <- "https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json"
r <- httr::GET(u, httr::config(ssl_verifypeer = FALSE))
da_tesouro <- httr::content(r, simplifyDataFrame = TRUE) %>%
purrr::pluck("response", 3, 1) %>%
tibble::as_tibble() %>%
janitor::clean_names()
da_tesouro
#> # A tibble: 29 x 17
#> cd nm featrs mtrty_dt min_invstmt_amt untr_invstmt_val invstmt_stbl
#> <int> <chr> <chr> <chr> <dbl> <dbl> <chr>
#> 1 153 Teso… "Títu… 2021-03… 0 0 "Esse inves…
#> 2 159 Teso… "Títu… 2023-03… 0 0 "Esse inves…
#> 3 171 Teso… "Títu… 2024-09… 107. 10727. "Como não p…
#> 4 164 Teso… "Títu… 2025-03… 0 0 "Como não p…
#> 5 172 Teso… "Títu… 2027-03… 106. 10574. "Como não p…
#> 6 163 Teso… "Títu… 2022-01… 0 0 "É mais int…
#> 7 155 Teso… "Títu… 2023-01… 0 0 "É mais int…
#> 8 146 Teso… "Títu… 2023-01… 0 0 "É mais int…
#> 9 173 Teso… "Títu… 2024-07… 31.9 798. "É mais int…
#> 10 161 Teso… "Títu… 2025-01… 0 0 "É mais int…
#> # … with 19 more rows, and 11 more variables: semi_anul_intrst_ind <lgl>,
#> # rcvg_incm <chr>, anul_invstmt_rate <dbl>, anul_red_rate <dbl>,
#> # min_red_qty <dbl>, untr_red_val <dbl>, min_red_val <dbl>, isin_cd <chr>,
#> # fin_indxs$cd <int>, $nm <chr>, wdwl_dt <chr>
Note que o formato da tabela não é exatamente igual o da tabela que aparece no site, mas provavelmente todos seus dados estão aí.
Também tentei obter os dados diretamente das tabelas que estão na página, mas infelizmente isso não é possível (pelo menos não sem selenium) pois o conteúdo é gerado dinamicamente.
# segunda forma, via parse do html ----
# nao da certo, pois a pagina é alimentada dinamicamente
u <- "https://www.tesourodireto.com.br/titulos/calculadora.htm"
r <- httr::GET(u, httr::config(ssl_verifypeer = FALSE))
html <- xml2::read_html(r)
html %>%
rvest::html_node("#tabelaResgate")
#> {xml_missing}
#> <NA>
Created on 2021-02-22 by the reprex package (v1.0.0)
Excelente exemplo para nosso curso de web scraping! Obrigado 