2016-11-14 86 views
2

我有一个网站,我想从中抓取数据,但有8页的数据价值。我已经使用以下来获得数据的第一页网页抓取跨多页rvest

library(rvest) 
library(stringr) 
library(tidyr) 

site <- 'http://www.basketball-reference.com/play-index/draft_finder.cgi?request=1&year_min=2001&year_max=2014&college_id=0&pos_is_g=Y&pos_is_gf=Y&pos_is_f=Y&pos_is_fg=Y&pos_is_fc=Y&pos_is_c=Y&pos_is_cf=Y&order_by=year_id' 
webpage <- read_html(site) 

draft_table <- html_nodes(webpage, 'table') 
draft <- html_table(draft_table)[[1]] 
head(draft) 
draft <- draft[-1,] 
names(draft) <- c("rank", "year", "league", "round", "pick", "team",  "player", "age", "position", "birth", "college", 
        "yearin", "lastyear", "car.gp", "car.mp", "car.ppg", "car.rebpg", "car.apg", "car.stlpg", "car.blkpg", 
       "car.fgp", "car.2pfgp", "car.3pfgp", "car.ftp", "car.ws", "car.ws48") 

draft <- draft[draft$player != "" & draft$player != "Player", ] 

看来,网址在序列移动,与第一页具有偏移= 0,和第二偏移= 100,第三页偏移量= 200等等。

我的问题是,我找不到一个简单的方法来一次刮掉所有的8页,而没有手动粘贴到上面的“网站”向量的网址。我希望能够做到这一点,如果存在一个普遍的投资解决方案,那就太好了。否则,任何帮助或建议将不胜感激。非常感谢。

回答

3

功能follow_link是你在找什么。

library(rvest) 
library(stringr) 
library(tidyr) 

site <- 'http://www.basketball-reference.com/play-index/draft_finder.cgi?request=1&year_min=2001&year_max=2014&college_id=0&pos_is_g=Y&pos_is_gf=Y&pos_is_f=Y&pos_is_fg=Y&pos_is_fc=Y&pos_is_c=Y&pos_is_cf=Y&order_by=year_id' 

s <- html_session(site) 
s <- s %>% follow_link(css = '#pi p a') 
url2 <- s$handle$url 

s <- s %>% follow_link(css = '#pi a+ a') 
url3 <- s$handle$url 

它出现链接模式在第二页后回收,因此后续页面可以导航到follow_link(css = '#pi a+ a')

+0

你是怎么找到css的? – jvalenti

+0

选择器小工具。使用rvest查看小插曲:ftp://cran.r-project.org/pub/R/web/packages/rvest/vignettes/selectorgadget.html –

+0

但是当没有更多的链接可以遵循时会发生什么?也许某种类型的'while'循环是合适的?或者增加url中的页面偏移量直到失败? – JasonAizkalns