【问题标题】:How to scrape a table created using datawrapper using rvest?如何使用 rvest 抓取使用 datawrapper 创建的表?
【发布时间】:2022-01-28 16:58:02
【问题描述】:

我正在尝试使用 rvest 从以下网站抓取表 1:

https://www.kff.org/coronavirus-covid-19/issue-brief/u-s-international-covid-19-vaccine-donations-tracker/

以下是我写的代码:

link <- "https://www.kff.org/coronavirus-covid-19/issue-brief/u-s-international-covid-19-vaccine-donations-tracker/"

page <- read_html(link)

page %>%   html_nodes("iframe") %>% html_attr("src") %>% .[11] %>% read_html() %>% 
  html_nodes("table.medium datawrapper-g2oKP-6idse1 svelte-1vspmnh resortable")

但是,我得到{xml_nodeset (0)} 作为结果。我正在努力找出正确的标签,以便从数据包装器页面中选择 html_nodes() 以提取表 1。

如果有人能指出我所犯的错误,或者提出解决此表的方法,我将不胜感激。

非常感谢。

【问题讨论】:

  • RSelenium 解决方案是否适合您?
  • 我不知道如何使用RSelenium,所以从Rvest开始。不过,谢谢你的建议。下次我也会尝试 RSelenium。

标签: r web-scraping html-table


【解决方案1】:

数据存在于 iframe 中,但需要进行一些操作。至少对我来说,从 iframe 页面构建 csv 下载 url 然后请求 csv 更容易

library(rvest)
library(magrittr)
library(vroom)
library(stringr)

page <- read_html('https://www.kff.org/coronavirus-covid-19/issue-brief/u-s-international-covid-19-vaccine-donations-tracker/')

iframe <- page %>% html_element('iframe[title^="Table 1"]') %>% html_attr('src')


id <- read_html(iframe) %>% html_element('meta') %>% html_attr('content') %>% str_match('/(\\d+)/') %>% .[, 2]

csv_url <- paste(iframe,id, 'dataset.csv', sep = '/' )

data <- vroom(csv_url, show_col_types = FALSE)

【讨论】:

  • 这行得通。我认为我犯的错误是我没有将正确的网址链接发送到 read_HTML()。非常感谢您的解决方案,它也帮助我理解了我所犯的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
相关资源
最近更新 更多