rvest пустой список для таблицы через xpath - PullRequest
0 голосов
/ 07 октября 2018

Мне нужна помощь для сбора данных с сайта ниже.Я скопировал, как ссылка здесь https://msperlin.github.io/pafdR/importingInternet.html#accessing-data-from-web-pages-webscraping, чтобы свернуть таблицу ставок, но я получаю только список 0. Может кто-нибудь помочь мне?

library(rvest)

# set url and xpath
my.url <- 'https://www.treasury.gov/resource-center/data-chart-center/interest-rates/Pages/TextView.aspx?data=yield'
my.xpath <- '//*[@id="t-content-main-content"]/div/table/tbody/tr/td/div/table'


# get nodes from html
out.nodes <- html_nodes(read_html(my.url),
                        xpath = my.xpath)

# get table from nodes (each element in 
# list is a table)
df <- html_table(out.nodes)
df

1 Ответ

0 голосов
/ 07 октября 2018

Обычно лучше не использовать чрезвычайно точные операторы XPath, поскольку структура страниц может меняться, а иногда то, что выглядит корректно в исходном тексте браузера или в инструментах разработчика, может не изменяться (браузеры изменяют HTML, когда читают его).

Используя указанные средства разработчика (в данном случае через Firefox, но Chrome тоже хорошо работает), элемент проверки рядом с таблицей показывает:

enter image description here

Мыможно просто придерживаться синтаксиса селектора CSS и делать:

library(rvest)

pg <- read_html("https://www.treasury.gov/resource-center/data-chart-center/interest-rates/Pages/TextView.aspx?data=yield")

html_node(pg, "table.t-chart") %>% 
  html_table()
##       Date 1 mo 3 mo 6 mo 1 yr 2 yr 3 yr 5 yr 7 yr 10 yr 20 yr 30 yr
## 1 10/01/18 2.13 2.23 2.40 2.60 2.82 2.90 2.96 3.04  3.09  3.18  3.24
## 2 10/02/18 2.14 2.23 2.41 2.61 2.82 2.88 2.94 3.01  3.05  3.14  3.20
## 3 10/03/18 2.15 2.23 2.41 2.62 2.85 2.94 3.02 3.10  3.15  3.24  3.30
## 4 10/04/18 2.16 2.22 2.42 2.63 2.87 2.97 3.05 3.14  3.19  3.29  3.35
## 5 10/05/18 2.15 2.23 2.41 2.64 2.88 2.99 3.07 3.18  3.23  3.34  3.40

В этом случае селекторы CSS проще (это не всегда так), но вы также можете использовать запросы XPath:

html_node(pg, xpath = ".//table[@class='t-chart']")
...