使用RVest刮取类似名称的表

问题描述 投票:0回答:1

我正在尝试使用rvest从fbref.com上的不同页面抓取数据表。我已经能够使用:

从一页抓取数据。
library(rvest)
URL <- "https://fbref.com/en/squads/822bd0ba/Liverpool"
WS <- read_html(URL)
passStats <- WS %>% rvest::html_nodes(xpath = '//*[(@id = "ks_sched_all")]') %>% rvest::html_table() %>% data.frame()

但是当我尝试使用for循环将其应用于多个页面时,我遇到了一个问题,因为并非所有页面都为该表使用相同的ID。一些是“ ks_sched_all”,而另一些是“ ks_sched_(4位数字)”。是否有任何方法可以提取页面上以“ ks_sched_”开头的ID的任何表?

r xpath web-scraping rvest
1个回答
0
投票

您可以将table添加到XPath表达式和()中。代码可以是:

library(rvest)
URL <- "https://fbref.com/en/squads/822bd0ba/Liverpool"
WS <- read_html(URL)


results=list()
i=1

for (tables in 1:length(html_nodes(x = WS,xpath = "//table[starts-with(@id,'ks_sched_')]"))) {
path=paste0('(//table[starts-with(@id,"ks_sched_")])[',i,']')
results[[i]] <- WS %>% html_nodes(xpath = path) %>% html_table() %>% data.frame()
i=i+1
}

[我们使用for循环,用length获取表的数量,每次用paste0生成一个新的XPath,并将结果存储在list中。

输出:7个数据帧的列表

Dataframes

© www.soinside.com 2019 - 2024. All rights reserved.