2016-11-14 5 views
2

데이터를 가져오고 싶지만 8 페이지 분량의 데이터가있는 웹 사이트가 있습니다. I 데이터의 첫 번째 페이지를 얻기 위하여 다음 사용한rvest로 여러 페이지에 걸쳐 웹 스크 레이 핑

이는 첫 페이지가 = 0 오프셋을 갖는 URL이 순차적으로 이동하고, 상기 제 오프셋 = 100, 세 번째 페이지는 = 200 오프셋 표시
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", ] 

등등.

내 문제는 위의 "사이트"벡터에 수동으로 URL을 붙여 넣지 않고 한 번에 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