首页 > 解决方案 > 使用RSelenium在表格中抓取背景颜色?

问题描述

我正在从本网站底部抓取“动态”表:http://arbejdsmarkedsbalancen.dk/da/Historik.aspx?group=Akademisk%20arbejde®ion=%7CNordjylland%7C&jobOpportunities=|||||||||| |||5|3|2|4|1|&chart=Skemaoversigt&years=|2015-1|2015-2|

在网站上看起来像这样,第一列是不同职业的名称(丹麦语),第二和第三行是颜色指示器在此处输入图像描述

因此,我希望制作一个看起来像这样的表格:

1. column                          2. column  3. column
Adjunkt, Humaniora                 yellow     yellow
Adjunkt, Naturvidenskab Og Teknik  yellow     yellow
....                               ....       .... 

等等。

由于我在 html 源代码中找不到表结构,因此我假设它是使用其他脚本生成的,并且必须使用 RSelenium 提取。

到目前为止,我的代码看起来像这样

library(RSelenium)
library(XML)

server <- rsDriver(browser = "firefox")
remDr <- server$client

url <- "http://arbejdsmarkedsbalancen.dk/da/Historik.aspx?group=Akademisk%20arbejde&region=%7CNordjylland%7C&jobOpportunities=|||||||||||||5|3|2|4|1|&chart=Skemaoversigt&years=|2015-1|2015-2|"
remDr$navigate(url)

list <- readHTMLTable(remDr$getPageSource()[[1]], encoding="UTF-8")
final.table <- list[[1]]

View(final.table)

这给我留下了这个输出。

输出

有谁知道我是否可以从第二列和第三列中的颜色或任何其他颜色指示符中提取颜色?

提前致谢!

标签: rweb-scrapingrselenium

解决方案


最好的解决方法是使用 rvest 而不是 XML 包,解决方案如下:

page <- read_html(remDr$getPageSource()[[1]])
table.1 <- page %>%  html_nodes("table") %>% html_table(fill = TRUE)
table.1 <- table.1[[1]]
table.1 <- table.1[-nrow(table.1),]
colnames(table.1) <- c("Stilling","firsthalf","secondhalf")

table.2 <- page %>%  html_nodes("td") %>% html_attr("style") %>% gsub("background-color:", "", .)
table.2.a <- table.2[seq(1,length(table.2),3)]
table.2.b <- table.2[seq(2,length(table.2),3)]
table.2.b <- table.2.b[-length(table.2.b)] 
table.2.c <- table.2[seq(3,length(table.2),3)]
table.2.c <- table.2.c[-length(table.2.c)]

table.1$firsthalf <- table.2.b
table.1$secondhalf <- table.2.c

推荐阅读