Соскоб с трансфермаркт с R пакетом рвест - PullRequest
0 голосов
/ 18 января 2019

Я учусь очищать данные и использую для этого Transfermakt, но сегодня я столкнулся с двумя проблемами. Я использовал Selector Gadget. Мой код такой:

library(rvest)


url <- "https://www.transfermarkt.es/fc-granada/startseite/verein/16795"
webpage <- read_html(url)

players_html  <- html_nodes(webpage,"#yw1 .tooltipstered") 
players <- html_text(players_html) 
players

valores_html <- html_nodes(webpage,'.rechts.hauptlink')
valores <- html_text(valores_html)
valores
valores <- gsub(" miles €","000", valores)
valores <- gsub(" mill. €","0000", valores)
valores
valores <- gsub(",","",valores)
valores <- gsub(" ","", valores)
valores

У меня возникла первая проблема при выборе игроков. Это вывод.

> players_html  <- html_nodes(webpage,"#yw1 .tooltipstered")
> players <- html_text(players_html)
> players
character(0)

Я думаю, что проблема в селекторе CSS, но именно он показывает мне гаджет селектора при выборе игроков, поэтому я не знаю, как решить эту проблему.

Другая проблема возникает при выборе их рыночной стоимости. Gsub не удаляет некоторые последние пробелы, которые избегают ставить символы в виде чисел. Это вывод:

> valores_html <- html_nodes(webpage,'.rechts.hauptlink')
> valores <- html_text(valores_html)
> valores
[1] "700 miles €  "  "300 miles €  "  "800 miles €  "  "500 miles €  "  
"300 miles €  " 
[6] "300 miles €  "  "1,00 mill. €  " "300 miles €  "  "1,20 mill. €  
" "500 miles €  " 
[11] "1,70 mill. €  " "1,50 mill. €  " "1,00 mill. €  " "800 miles €  
"  "800 miles €  " 
[16] "300 miles €  "  "2,00 mill. €  " "800 miles €  "  "700 miles €  
"  "400 miles €  " 
[21] "700 miles €  "  "1,00 mill. €  " "800 miles €  " 
> valores <- gsub(" miles €","000", valores)
> valores <- gsub(" mill. €","0000", valores)
> valores
[1] "700000  "   "300000  "   "800000  "   "500000  "   "300000  "   
"300000  "   "1,000000  "
[8] "300000  "   "1,200000  " "500000  "   "1,700000  " "1,500000  " 
"1,000000  " "800000  "  
[15] "800000  "   "300000  "   "2,000000  " "800000  "   "700000  "   
"400000  "   "700000  "  
[22] "1,000000  " "800000  "  
> valores <- gsub(",","",valores)
> valores <- gsub(" ","", valores)
> valores
[1] "700000  "  "300000  "  "800000  "  "500000  "  "300000  "  
"300000  "  "1000000  " "300000  " 
[9] "1200000  " "500000  "  "1700000  " "1500000  " "1000000  " 
"800000  "  "800000  "  "300000  " 
[17] "2000000  " "800000  "  "700000  "  "400000  "  "700000  "  
"1000000  " "800000  " 

По сути, последний gsub, использованный для удаления последнего пробела, в этом случае ничего не делает. Может ли кто-нибудь помочь мне с этими двумя проблемами?

PS: я использую Transfermarkt на испанском языке.

1 Ответ

0 голосов
/ 18 января 2019

Что касается gsub, мы можем использовать

valores <- html_text(valores_html)
valores <- gsub(" miles €", "000", valores)
valores <- gsub(" mill. €", "0000", valores)
valores <- gsub("\\D", "", valores)
valores
#  [1] "700000"  "300000"  "800000"  "500000"  "300000"  "300000"  "1000000" "300000"  "1200000"
# [10] "500000"  "1700000" "1500000" "1000000" "800000"  "800000"  "300000"  "2000000" "800000" 
# [19] "700000"  "400000"  "700000"  "1000000" "800000" 

где \\D - это что-то, кроме цифры.

Для имен игроков мы можем написать

players_html  <- html_nodes(webpage,"#yw1 span.hide-for-small a.spielprofil_tooltip")
players <- html_text(players_html) 
players
#  [1] "Rui Silva"             "Aarón Escandell"       "Bernardo Cruz"        
#  [4] "José Antonio Martínez" "Germán Sánchez"        "Pablo Vázquez"        
#  [7] "Álex Martínez"         "Adrián Castellano"     "Víctor Díaz"          
# [10] "Quini"                 "Nicolás Aguirre"       "Fede San Emeterio"    
# [13] "Ángel Montoro"         "Fran Rico"             "Alberto Martín"       
# [16] "José Antonio González" "Alejandro Pozo"        "Antonio Puertas"      
# [19] "Fede Vico"             "Daniel Ojeda"          "Álvaro Vadillo"       
# [22] "Adrián Ramos"          "Rodri"          

Таким образом, мы также получаем только один набор (полных) имен. Использование, например, "#yw1 a.spielprofil_tooltip" также вернет их короткие версии.

...