【发布时间】:2017-08-19 12:32:38
【问题描述】:
我正在尝试编写一个脚本,该脚本将通过 Transfermarkt 网站提供的玩家列表并收集有关他们的一些信息。为此,我创建了下面的脚本,但在list 的 29 位玩家中,有 1 位遇到了问题。由于一个页面的排列方式与其他页面不同,代码输出了一个只有 28 名玩家的列表,因为它无法在上述页面上找到信息。
我理解为什么我编写的代码在给定页面上找不到任何信息,因此给了我 28 个列表,但我不知道如何重写代码以实现我想要的: 如果脚本没有找到任何内容(在本例中为国籍),则脚本只需将条目替换为“-”,用于特定页面上的节点,并返回包含 29 名玩家的完整列表,其中包含所有其他信息。
有问题的玩家页面是this,而其他页面有代码中用于国籍的节点,这里是“.dataValue span”。
我对 R 还是很陌生,这可能很容易解决,但 atm 我无法弄清楚。感谢您提供任何帮助或建议。
URL <- "http://www.transfermarkt.de/fc-bayern-munchen/leistungsdaten/verein/27/reldata/%262016/plus/1"
WS <- read_html(URL)
Team <- WS %>% html_nodes(".spielprofil_tooltip") %>% html_attr("href") %>% as.character()
Team <- paste0("http://www.transfermarkt.de",Team)
Catcher <- data.frame(Name=character(),Nat=character(),Vertrag=character())
for (i in Team) {
WS1 <- read_html(i)
Name <- WS1 %>% html_nodes("h1") %>% html_text() %>% as.character()
Nat <- WS1 %>% html_nodes(".hide-for-small+ p .dataValue span") %>% html_text() %>% as.character()
Vertrag <- WS1 %>% html_nodes(".dataValue:nth-child(9)") %>% html_text() %>% as.character()
if (length(Nat) > 0) {
temp <- data.frame(Name,Nat,Vertrag)
Catcher <- rbind(Catcher,temp)
}
else {}
cat("*")
}
num_Rows <- nrow(Catcher)
odd_indexes <- seq(1,num_Rows,2)
Catcher <- data.frame(Catcher[odd_indexes,])
【问题讨论】: