如何向抓取的 Web 表的数据添加变量
How to add variable to data of scraped web tables
我想从 UEFA 网站 (like this one) 的几个页面中抓取 tables 并尝试将其合并到一个数据框中。数据框应该包含单个玩家页面上的所有信息(table "MATCH LOG")加上带有玩家名称的列(变量)。
Chris 的解决方案工作正常,但我想从页面顶部(选择器'.bigTitle')而不是框 "GENERAL INFO" 获取玩家的名字。
我制作数据框的代码:
length_links <- length(links)
all_tables <- vector("list",length_links)
for(i in seq_len(length_links)){
page <- html(links[i])
all_tables[[i]] <- as.data.frame(html_table(page))
}
do.call(rbind, all_tables)
非常感谢你的帮助。
library(stringr)
c('http://www.uefa.com/teamsandplayers/players/player=1900730/profile/index.html',
'http://www.uefa.com/teamsandplayers/players/player=250078460/profile/index.html',
'http://www.uefa.com/teamsandplayers/players/player=250045034/profile/index.html') -> links
namefind <- function(text){
str_extract(string = text, pattern = "Name.+Position") -> xx
substr(xx, start = 6, stop = nchar(xx)) -> u
u
}
length_links <- length(links)
all_tables <- vector("list",length_links)
for(i in seq_len(length_links)){
html(links[i]) -> q
html_table(q, fill = TRUE)-> tableList
if(length(tableList) == 0) next
for(cc in 1:length(tableList)){
if(all(colnames(tableList[[cc]])[1:3] == c("Date", "Competition", "Phase"))) {
all_tables[[i]] <- tableList[[cc]]
all_tables[[i]]$name <- html_text(html_node(q, css = '.bigTitle'))
}
}
}
do.call(rbind, all_tables) -> k
k[k$Date != "The home team is listed first.",] -> k
我想从 UEFA 网站 (like this one) 的几个页面中抓取 tables 并尝试将其合并到一个数据框中。数据框应该包含单个玩家页面上的所有信息(table "MATCH LOG")加上带有玩家名称的列(变量)。
Chris 的解决方案工作正常,但我想从页面顶部(选择器'.bigTitle')而不是框 "GENERAL INFO" 获取玩家的名字。
我制作数据框的代码:
length_links <- length(links)
all_tables <- vector("list",length_links)
for(i in seq_len(length_links)){
page <- html(links[i])
all_tables[[i]] <- as.data.frame(html_table(page))
}
do.call(rbind, all_tables)
非常感谢你的帮助。
library(stringr)
c('http://www.uefa.com/teamsandplayers/players/player=1900730/profile/index.html',
'http://www.uefa.com/teamsandplayers/players/player=250078460/profile/index.html',
'http://www.uefa.com/teamsandplayers/players/player=250045034/profile/index.html') -> links
namefind <- function(text){
str_extract(string = text, pattern = "Name.+Position") -> xx
substr(xx, start = 6, stop = nchar(xx)) -> u
u
}
length_links <- length(links)
all_tables <- vector("list",length_links)
for(i in seq_len(length_links)){
html(links[i]) -> q
html_table(q, fill = TRUE)-> tableList
if(length(tableList) == 0) next
for(cc in 1:length(tableList)){
if(all(colnames(tableList[[cc]])[1:3] == c("Date", "Competition", "Phase"))) {
all_tables[[i]] <- tableList[[cc]]
all_tables[[i]]$name <- html_text(html_node(q, css = '.bigTitle'))
}
}
}
do.call(rbind, all_tables) -> k
k[k$Date != "The home team is listed first.",] -> k