我正在尝试使用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]中的错误:下标超出范围
有人能看到我把这张桌子弄错了吗?
答案 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
#...