使用rvest在多个页面上进行网页抓取

3

我有一个网站,想从中爬取数据,但是数据分为8页。我已经使用以下方法获取了第一页的数据:

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是按顺序移动的,第一页的偏移量为0,第二页的偏移量为100,第三页的偏移量为200,以此类推。
我的问题是,我找不到一种简单直接的方法来一次性爬取所有8页内容,而不需要手动将url粘贴到上面的“site”向量中。我希望能够通用地解决这个问题,如果有通用的rvest解决方案,那就太好了。否则,任何帮助或建议都将不胜感激。非常感谢。
1个回答

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')导航到后续页面。

你是怎么找到CSS的? - jvalenti
Selector gadget. 请查看使用rvest的vignette:ftp://cran.r-project.org/pub/R/web/packages/rvest/vignettes/selectorgadget.html - Brandon LeBeau
但是当没有更多的链接可以跟随时会发生什么呢?也许使用某种类型的while循环会比较合适?或者在URL中递增页面偏移量直到失败为止? - JasonAizkalns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接