R - 使用 SelectorGadget 获取数据集
R - Using SelectorGadget to grab a dataset
我正在尝试从该站点获取 Hawaii-specific 数据:https://www.opentable.com/state-of-industry。我想从网站上的每个 table 获取夏威夷的数据。这是在选择“状态”选项卡后完成的。
在 R 中,我正在尝试将 rvest 库与 SelectorGadget 一起使用。
到目前为止我已经试过了
library(rvest)
html <- read_html("https://www.opentable.com/state-of-industry")
html %>%
html_element("tbody") %>%
html_table()
但是,这还没有给我想要的东西。我正在获取全局数据集而不是小标题。那么关于如何从州选项卡获取夏威夷数据集有什么建议吗?
另外,有没有办法通过点击下载数据集选项卡来下载数据集?然后我也可以从 csv 文件开始工作。
所有页面数据都存储在 script
标记中,它是在浏览器中动态提取的。您可以用正则表达式输出包含所有数据的 JavaScript 对象,并编写一个自定义函数来仅提取夏威夷的信息,如下所示。函数 get_state_index
被编写为接受一个 state
参数,以防您希望查看其他州的信息。
library(rvest)
library(jsonlite)
library(magrittr)
library(stringr)
library(purrr)
library(dplyr)
get_state_index <- function(states, state) {
return(match(T, map(states, ~ {
.x$name == state
})))
}
s <- read_html("https://www.opentable.com/state-of-industry") %>% html_text()
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = (.*?\});w\.")[, 2])
fullbook <- all_data$covidDataCenter$fullbook
hawaii_dataset <- tibble(
date = fullbook$headers %>% unlist() %>% as.Date(),
yoy = fullbook$states[get_state_index(fullbook$states, "Hawaii")][[1]]$yoy %>% unlist()
)
正则表达式:
我正在尝试从该站点获取 Hawaii-specific 数据:https://www.opentable.com/state-of-industry。我想从网站上的每个 table 获取夏威夷的数据。这是在选择“状态”选项卡后完成的。
在 R 中,我正在尝试将 rvest 库与 SelectorGadget 一起使用。
到目前为止我已经试过了
library(rvest)
html <- read_html("https://www.opentable.com/state-of-industry")
html %>%
html_element("tbody") %>%
html_table()
但是,这还没有给我想要的东西。我正在获取全局数据集而不是小标题。那么关于如何从州选项卡获取夏威夷数据集有什么建议吗?
另外,有没有办法通过点击下载数据集选项卡来下载数据集?然后我也可以从 csv 文件开始工作。
所有页面数据都存储在 script
标记中,它是在浏览器中动态提取的。您可以用正则表达式输出包含所有数据的 JavaScript 对象,并编写一个自定义函数来仅提取夏威夷的信息,如下所示。函数 get_state_index
被编写为接受一个 state
参数,以防您希望查看其他州的信息。
library(rvest)
library(jsonlite)
library(magrittr)
library(stringr)
library(purrr)
library(dplyr)
get_state_index <- function(states, state) {
return(match(T, map(states, ~ {
.x$name == state
})))
}
s <- read_html("https://www.opentable.com/state-of-industry") %>% html_text()
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = (.*?\});w\.")[, 2])
fullbook <- all_data$covidDataCenter$fullbook
hawaii_dataset <- tibble(
date = fullbook$headers %>% unlist() %>% as.Date(),
yoy = fullbook$states[get_state_index(fullbook$states, "Hawaii")][[1]]$yoy %>% unlist()
)
正则表达式: