2013-10-26 6 views
1

Я пытаюсь отказаться от таблицы на веб-сайте, но не могу добиться успеха ... Я уже делал это много времени, он всегда работал, но со времени, когда таблица кажется быть в каком-то Javascript, и синтаксический анализ не работает вообще? Кто-нибудь может мне помочь?Скребок HTML (или JavaScript) Таблица

Страница: here.

Я уже пробовал обычный:

readHTMLTable(doc//table[@id='live-player-home-offensive-grid'], as.data.frame=TRUE, header=FALSE) 
# or 
xpathSApply(pagetree, "//*/table[@id='live-player-home-offensive-grid']", xmlValue) 

ответ

1

Проблема заключается в том, что данные не в таблице, но в коде Javascript - он ставится только в таблице, когда страница отображается, в вашем браузере.

Я не вижу чистый способ извлечения его, короткие использования инструментов Javacript или контроллеров веб-браузера (Zombie.js, CasperJS, PhantomJS, Selenium).

Следующая читает страницу HTML в виде строки, и ищет определение initialData переменной, , что, по-видимому содержит данные. Он возвращает данные в том же жестком формате, список списков списков списков списков списков.

library(RCurl) 
url <- "http://www.whoscored.com/Matches/411429/LiveStatistics/England-Premier-League-2010-2011-Fulham-Arsenal" 
html <- getURL(url) 
initial_data <- gsub("^.*?initialData = (.*?);.*", "\\1", html) 
initial_data <- gsub("'", '"', initial_data) 
library(RJSONIO) 
data <- fromJSON(initial_data) 
+0

На самом деле, это очень полезно! С этого момента я могу заблокировать данные, и у меня остался довольно длинный вектор, содержащий все данные, которые я хочу. Из этого я помещал его в data.frame, и у меня есть 1 столбца, 5k + строк данных. И это почти сделано, если кто-то может помочь мне сделать это: как мне сказать R, сколько col я хочу при преобразовании в data.frame? Мне не удалось с "ncol". Еще раз большое спасибо! – user2923574

+0

Проблема в том, что эти списки глубоко вложены и не имеют одинаковой длины. Вы можете попытаться понять структуру данных, посмотрев на 'cat (toJSON (data))', 'cat (toJSON (data [[1]]))', 'cat (toJSON (data [[1] ]] [[1]])) и т. Д. Следующие значения имеют смысл и просты в использовании, , но я мог отбросить слишком много данных: 'lapply (data [[1]] [[2]] [[1]] [[5]], функция (u) c ("name", u [[2]], unlist (u [[4]]))) '. –

Смежные вопросы