【问题标题】:web scraping across multiple pages with rvest使用 rvest 跨多个页面进行网页抓取
【发布时间】:2017-03-28 14:40:25
【问题描述】:

我有一个网站,我想从中抓取数据,但有 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,依此类推。

我的问题是,如果不手动将 url 粘贴到上面的“站点”向量中,我无法找到一种直接抓取所有 8 个页面的方法。我希望能够普遍做到这一点,所以如果存在一个很好的通用 rvest 解决方案。否则,任何帮助或建议将不胜感激。非常感谢。

【问题讨论】:

    标签: r url dataframe web-scraping rvest


    【解决方案1】:

    函数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的?
    • 选择器小工具。查看带有 rvest 的小插图:cran.r-project.org/pub/R/web/packages/rvest/vignettes/…
    • 但是当没有更多链接可以关注时会发生什么?也许某种类型的while 循环是合适的?或者在 url 中增加一个页面偏移量直到它失败?
    猜你喜欢
    • 2019-02-16
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多