我正在尝试使用revest包从DC的开放数据门户获得停车违规数据。出于几个原因,我需要使用这个页面的数据——您需要在输入字段下方滚动。
但是,数据没有组织在表中,最重要的是,值本身也没有位于元素选择器中。是否有可能从这个表中提取值?
谢谢你,罗宾
这些页面有指向JSON数据页面的链接。下面的代码首先提取链接,然后提取JSON数据,最后使用公共数据元素创建data.frame。
我只会从10页下载JSON数据,因为有2000个链接。
library(rvest)
library(dplyr)
library(jsonlite)
pattern <- "/dcgis/rest/services/DCGIS_DATA/Violations_Parking_2022/MapServer/2/\d+$"
pg <- read_html(url)
pg %>%
html_elements("a") %>%
html_attr("href") %>%
stringr::str_match(pattern) %>%
na.omit() %>%
as.vector() %>%
paste0("https://maps2.dcgis.dc.gov", ., "?f=pjson") -> links
length(links)
#[1] 2000
现在下载JSON数据并创建data.frame。
parking_data <- lapply(links[1:10], (ll) {
tmp <- fromJSON(ll)
tmp$feature$attributes %>% unlist() %>% t() %>% as.data.frame()
})
common_cols <- Reduce(intersect, lapply(parking_data, names))
tickets_list <- lapply(parking, `[`, common_cols)
tickets <- do.call(rbind, tickets_list)