【发布时间】:2022-07-05 07:04:02
【问题描述】:
与此处提出的问题相关:R - Using SelectorGadget to grab a dataset
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()
)
我正在尝试从 State 选项卡中获取 Hawaii 数据集。该代码以前可以运行,但现在这部分代码会引发错误:
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = (.*?\\});w\\.")[, 2])
我收到错误:
Error: lexical error: invalid char in json text. NA (right here) ------^
任何建议的解决方案?网站似乎在这一年保持不变,但什么类型的更改导致代码中断?
编辑:@QHarr 提出的解决方案:
all_data <- jsonlite::parse_json(stringr::str_match(s, "__INITIAL_STATE__ = ([\\s\\S]+\\});")[, 2])
这工作了一段时间,但似乎他们的网站再次更改了底层 HTML 代码。
【问题讨论】:
标签: r web-scraping rvest