如何抓取没有元素选择器的网页?



我正在尝试使用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)

最新更新