使用Rvest和html_element时如何处理xml_missing?

pb3skfrl  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(160)

我想把这里列出的每一个选举日期都列出来:https://voterportal.sos.la.gov/static/,这样我就可以前往每个相应的选举网站,下载并编译名为“Excel -完整结果”的电子表格
通常情况下,我会使用Rvest来获取链接网站上列出的每个日期,然后Map这些日期以到达每个选举网站(只是将选举日期附加到父网站的URL,如:“https://voterportal.sos.la.gov/static/2022-04-30“),然后阅读选举网站中链接的excels,但我遇到了一个以前没有遇到过的html_elements问题:
我尝试使用html_elements来提取日期:

la_elections_url <- "https://voterportal.sos.la.gov/static/"

la_elections_text <- read_html(la_elections_url)

la_elections_text %>% html_element("a")

我想我可以过滤到href属性,比如:

html_attr(html_nodes(la_elections_text, "a"), "href") %>% as.list()

但我得到了警告:

la_elections_text %>% html_element("a")

{xml_missing}
<NA>
ozxc1zmp

ozxc1zmp1#

这个网站使用XHR来加载数据,这使得使用基于DOM的rvest有点棘手。幸运的是,你可以使用DevTools抓取URL来自己获取所有数据:

使用httr,这变得非常简单:

library(httr)
library(tidyverse)

res <- httr::GET('https://voterportal.sos.la.gov/ElectionResults/ElectionResults/Data?blob=ElectionDates.htm')

res_list <- httr::content(res)

res_list$Dates$Date %>% 
  purrr::map( ~ {
    .x$ElectionDate
  })

它为您提供:

[[1]]
[1] "04/29/2023"

[[2]]
[1] "03/25/2023"

[[3]]
[1] "02/18/2023"

[[4]]
[1] "01/14/2023"

[[5]]
[1] "12/10/2022"

.....

相关问题