首页 > 解决方案 > 使用 rvest 抓取 Javascript

问题描述

我一直在尝试从保存为 javascript 的网站上抓取轮询时间序列。到目前为止,一旦选择“圆形”节点,我就会得到一个空列表。下面的代码,任何一点都非常感谢。

library(rvest)
library(V8)

url = 'https://www.politico.eu/europe-poll-of-polls/belgium/'

dta = read_html(url) %>% 
  html_node('svg') %>% 
  html_node('g') %>% 
  html_node('circle')

标签: javascripthtmlrweb-scrapingrvest

解决方案


这实际上很容易。数据来自您可以在网络选项卡中找到的 json 端点

library(jsonlite)

data <- jsonlite::read_json('https://www.politico.eu/wp-json/politico/v1/poll-of-polls/BE-parliament')
info <- data$polls

您可以转换为数据框。例如:

library(purrr)

df <- map_df(info, function(x) {

  data.frame(date = x$`date`,
             party = x$parties,
             stringsAsFactors=FALSE)
})

names(df) <- gsub( 'party.','',names(df))

您可以随时转置并进行任何其他您想要的转换等,例如

df <- t(df)

推荐阅读