Я работаю над проектом для школы, где мне нужно собрать статистику карьеры для отдельных футболистов NCAA. Данные для каждого игрока находятся в этом формате.
http://www.sports-reference.com/cfb/players/ryan-aplin-1.html
Я не могу найти совокупность всех игроков, поэтому мне нужно переходить по странице за страницей и вытаскивать нижнюю строку каждого проходящего подсчета очков Спешка и получение и т. Д. Таблица html
Каждый игрок классифицируется по фамилии со ссылками на каждый алфавит, идущий здесь.
http://www.sports-reference.com/cfb/players/
Например, здесь находится каждый игрок с фамилией А.
http://www.sports-reference.com/cfb/players/a-index.html
Я впервые занимаюсь парсингом данных, поэтому я попытался найти похожие вопросы с ответами. Ближайший ответ, который я нашел, был этим вопросом
Я считаю, что мог бы использовать что-то очень похожее, где я меняю номер страницы на имя собранного игрока. Однако я не уверен, как изменить это, чтобы искать имя игрока вместо номера страницы.
Сэмюэл Л. Вентура также недавно рассказал об извлечении данных из данных НФЛ, которые можно найти здесь.
РЕДАКТИРОВАТЬ:
Бен был действительно полезен и предоставил отличный код. Первая часть работает очень хорошо, однако, когда я пытаюсь запустить вторую часть, я сталкиваюсь с этим.
> # unlist into a single character vector
> links <- unlist(links)
> # Go to each URL in the list and scrape all the data from the tables
> # this will take some time... don't interrupt it!
> all_tables <- lapply(links, readHTMLTable, stringsAsFactors = FALSE)
Error in UseMethod("xmlNamespaceDefinitions") :
no applicable method for 'xmlNamespaceDefinitions' applied to an object of class "NULL"
> # Put player names in the list so we know who the data belong to
> # extract names from the URLs to their stats page...
> toMatch <- c("http://www.sports-reference.com/cfb/players/", "-1.html")
> player_names <- unique (gsub(paste(toMatch,collapse="|"), "", links))
Error: cannot allocate vector of size 512 Kb
> # assign player names to list of tables
> names(all_tables) <- player_names
Error: object 'player_names' not found
> fix(inx_page)
Error in edit(name, file, title, editor) :
unexpected '<' occurred on line 1
use a command like
x <- edit()
to recover
In addition: Warning message:
In edit.default(name, file, title, editor = defaultEditor) :
deparse may be incomplete
Это могло быть ошибкой из-за нехватки памяти (только 4 ГБ на компьютере, который я сейчас использую). Хотя я не понимаю ошибку
> all_tables <- lapply(links, readHTMLTable, stringsAsFactors = FALSE)
Error in UseMethod("xmlNamespaceDefinitions") :
no applicable method for 'xmlNamespaceDefinitions' applied to an object of class "NULL"
Просматривая другие мои наборы данных, мои игроки действительно вернулись только к 2007 году. Если будет какой-то способ привлечь только людей с 2007 года, это может помочь уменьшить данные. Если бы у меня был список людей, чьи имена я хотел бы вытащить, мог бы я просто заменить линк в
links[[i]] <- paste0("http://www.sports-reference.com", lnk)
только с теми игроками, которые мне нужны?
scrapy
, как предложил @aseidlitz, здесь, в SO, тоже есть несколько экспертов. Я тоже использовал его с успехом, но в настоящее время я моноглот R. - person Ben   schedule 03.12.2013