2015-04-29 2 views
1

Я хотел бы прочитать несколько таблиц в R от http://www.nhl.com/stats/player?navid=nav-sts-indiv#, а в одной таблице отображается только 30 строк, если их насчитывается> 300. Используя XML и readHTMLTables, как я могу извлечь и объединить все таблицы в один большой фреймворк, который я могу выполнить.Прочитайте несколько таблиц через скребок

Я использовал цикл для чтения страниц 1-11, но есть много разных таблиц, которые меня интересуют, и не думаю, что эффективно смотреть на каждого, чтобы увидеть, сколько всего таблиц/строк есть.

require(XML) 
    url='http://www.nhl.com/stats/player?fetchKey=20153ALLSASAll&viewName=summary&sort=points&gp=1&pg=' 
a=NULL 
for(i in 1:11){ 
    w=paste(url,i,sep='') 
    b=readHTMLTable(w)[[3]] 
    a=rbind(a,b) 
} 

Обратите внимание, что есть 11 URL-адресов, о которых я знаю, потому что я посмотрел его вручную.

Есть ли способ, по которому каждый может подумать, где я могу автоматически вычислить общее количество строк/таблиц, чтобы я не искал его вручную. Может быть, есть функция, которую я не встречал?

ответ

1

Вы можете очистить количество страниц и затем выбросить их в свой цикл. Вот краткое расширение вашего скребка:

require(XML) 
require(stringr) 

url <- 'http://www.nhl.com/stats/player?fetchKey=20153ALLSASAll&viewName=summary&sort=points&gp=1&pg=' 

# Scrape the first page to get the number of pages 
w1 <- paste(url, 1, sep = '') 

# Parse using the XPath found by inspecting the page 
page_divs <- xpathApply(htmlParse(w1), '//*[@id="statsPage"]/div/div/a') 

# Extract the last div 
last_div <- page_divs[length(page_divs)] 

# Extact the page 
last_url <- xmlGetAttr(last_div[[1]], "href") 

# Extract max page 
max_page <- str_extract(str_extract(last_url, "pg=.\\d"), "[[:digit:]]+") 

a <- NULL 
for(i in 1:max_page) { 
    w <- paste(url, i , sep = '') 
    b <- readHTMLTable(w)[[3]] 
    a <- rbind(a, b) 
} 
+0

это здорово! Он работал даже с несколькими новыми наборами таблиц данных. Я буду искать xpathApply, page_divs, xmlGetAttr и stringr. благодаря! – alex

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