htmltab找不到使用数字或字符向量作为“哪个”自变量的表

时间:2019-12-26 15:29:50

标签: r web-scraping html-table

我正在尝试使用htmltab将某些表格从美联储网站抓取到RStudio。

此代码适用于一个表,其数字矢量为1,用于表的等级“哪个”参数:

url <- 'https://www.federalreserve.gov/releases/h6/current/default.htm'
df1 <- htmltab(url,1) 

但是,另一个表似乎不接受'where'参数的数字向量。

url <- 'https://www.federalreserve.gov/monetarypolicy/bst_recenttrends_accessible.htm'
df2 <- htmltab(url,1)

输出:

  

错误:找不到表。尝试将(不同的)信息传递给which参数。

htmltab的RDocumentation提到使用字符向量将表的XPath描述为“哪个”参数,但我似乎也无法使它起作用:

url <- 'https://www.federalreserve.gov/monetarypolicy/bst_recenttrends_accessible.htm'
xp <- '//*[@id="bstContainer"]/table[1]'
df2 <- htmltab(url, xp)

输出:

  

节点[{1]中的错误:下标超出范围

有人能看到我把这张桌子弄错了吗?

1 个答案:

答案 0 :(得分:2)

您的代码无法正常工作的原因是您只能使用方法抓取静态html。第二页动态地将数据加载到其表中,因此该表实际上并不存在于您要下载到R的页面中。幸运的是,通过跟随xhr请求所使用的基础xml的链接来获取数据很简单。将其读入数据帧也很简单。

require("xml2")
page <- read_html("https://www.federalreserve.gov/data.xml")
tables <- xml_find_all(page,"//series")
first_table <- data.frame(date = xml_attr(xml_contents(tables[[1]]), "index"),
                          amount = xml_attr(xml_contents(tables[[1]]), "value"))

# > first_table
# >          date     amount
# > 1    1-Aug-07  870261.00
# > 2    8-Aug-07  865453.00
# > 3   15-Aug-07  864931.00
# > 4   22-Aug-07  862775.00
# > 5   29-Aug-07  872873.00
# > 6    5-Sep-07  871156.00
# > 7   12-Sep-07  886314.00
# > 8   19-Sep-07  867732.00
# > 9   26-Sep-07  889900.00
# > 10   3-Oct-07  869051.00
#...