【问题标题】:R - Using SelectorGadget to grab a datasetR - 使用 SelectorGadget 抓取数据集
【发布时间】:2022-03-25 09:17:21
【问题描述】:

我正在尝试从该站点获取夏威夷特定数据:https://www.opentable.com/state-of-industry。我想从网站上的每个表中获取夏威夷的数据。这是在选择“状态”选项卡后完成的。

在 R 中,我正在尝试将 rvest 库与 SelectorGadget 一起使用。

到目前为止我已经尝试过

library(rvest)
html <- read_html("https://www.opentable.com/state-of-industry") 
    
html %>% 
html_element("tbody") %>% 
      html_table() 

但是,这还没有给我我想要的东西。我正在获取全局数据集而不是小标题。那么对于如何从 State 选项卡中获取夏威夷数据集有什么建议吗?

另外,有没有办法下载点击下载数据集选项卡的数据集?然后我也可以使用 csv 文件。

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    所有页面数据都存储在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()
    )
    

    正则表达式:

    【讨论】:

    • 这太棒了!我不知道所有页面数据都存储在脚本标签中。我只是在 R 中学习网页抓取。
    • 顺便说一句,我想知道这部分 "__INITIAL_STATE__ = (.*?\\});w\\." 的代码在做什么?
    • 我已经添加了正则表达式解释。我正在指定一种模式,它允许正则表达式引擎从 rvest 返回的响应文本中提取包含所有数据的 JavaScript 对象。
    • 顺便说一句,我认为他们对其网站进行了一些更改,因此这部分代码 all_data &lt;- jsonlite::parse_json(stringr::str_match(s3, "__INITIAL_STATE__ = (.*?\\});w\\.")[, 2]) 给出了错误:Error: lexical error: invalid char in json text. NA (right here) ------^。你能推荐一个解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多