Advertisement
ansakoy

Bresler7

Mar 6th, 2015
3,219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 2.88 KB | None | 0 0
  1. getBREFTeamStatTable <- function(season_end = 2015, table_name = 'team', date = T){
  2.     c('rvest','dplyr','pipeR') -> packages
  3.     lapply(packages, library, character.only = T)
  4.     'http://www.basketball-reference.com/leagues/' -> base
  5.     'NBA' -> league
  6.     '#' %>>% paste0(table_name) -> css_page
  7.     css_page %>>% paste0(" , ", css_page,' a') -> css_id
  8.     table_name %>>% tolower -> table_name
  9.     table_name %>>% paste('stats', sep = "_") -> table
  10.     base %>>% paste0(league,'_',season_end,".html") -> url
  11.     url %>>% ## get table
  12.         html %>>%
  13.         html_nodes(css_page) %>>%
  14.         html_table(header = F) %>>% data.frame() %>>% tbl_df() -> df
  15.  
  16.     if(df$X.1[1] == 'Rk'){
  17.         df %>>%
  18.             filter(X.1 == "Rk") %>>% as.character -> names
  19.         'Rk' %>>% grep(x = df$X.1) -> row_of_header #находим ранг
  20.         (row_of_header + 1) %>>% (df[.:nrow(df),]) -> df #пропускаем этот ряд и идем до конца
  21.         names %>>% tolower-> names(df)} else{
  22.             df %>>%
  23.                 filter(X.1 == "Rk") %>>% as.character -> names
  24.             'Rk' %>>% grep(x = df$X.1) -> row_of_header #находим ранг
  25.             (row_of_header + 1) %>>% (df[.:nrow(df),]) -> df #пропускаем этот ряд и идем до конца
  26.             names %>>% tolower-> names(df)
  27.         }
  28.     names(df) %>>% (gsub('\\%|/','\\.',.)) -> names(df)
  29.     NULL -> df$rk
  30.     c('team','arena') -> table_name_character
  31.     df[,!(df %>>% names) %in% table_name_character] %>>%
  32.         apply(2, function(x) gsub('\\,','',x) %>>% as.numeric(x))  ->
  33.         df[,!(df %>>% names) %in% table_name_character] #убираем запятые, переводим в числовой формат
  34.     df$team %>>% grepl(pattern = '\\*') -> df$playoff_team
  35.     df$team %>>% (gsub('\\*','',.)) -> df$team
  36.     df %>>% nrow() -1  -> rows
  37.     df[1:rows,] -> df
  38.     (season_end-1) %>>% paste0("-",season_end) -> season
  39.     ##Собираем ID команд
  40.     url %>>% ## get table
  41.         html %>>%
  42.         html_nodes(css_id) %>>%
  43.         html_attrs() %>>% unlist %>>% as.character -> stems
  44.     stems[3:length(stems)] -> stems #пропускаем первые два ряда, потому что там заголовки
  45.     stems %>>% (gsub('\\/|.html|teams','',.)) %>>% #убираем ненужный текст
  46.         (gsub(season_end,'',.)) -> bref_team_id #убираем год, получаем id команды
  47.     data.frame(season,table_name = table, bref_team_id, df) -> df  #объединяем в 1 df
  48.     if(date == T){
  49.         Sys.time() -> df$scrape_time #add scrape time if you want it
  50.     }
  51.     return(df)
  52. }
  53.  
  54. #This paste is a code from tutorial by Alex Bresler
  55. # http://asbcllc.com/blog/2014/november/creating_bref_scraper/
  56. # Comments translated into Russian for
  57. # http://www.datadrivenjournalism.ru/2015/03/webscrape-in-r/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement