r - 使用 rvest 抓取类似名称的表
问题描述
我正在尝试使用 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 表?
解决方案
您可以添加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
每次用 生成一个新的 XPathpaste0
并将结果存储在一个list
.
输出:7 个数据帧的列表
推荐阅读
- sql - 复杂的 SQL 查询,无处可答 :(
- jmeter - Jmeter从同时执行的多个线程组将数据写入excel表
- excel - VBA 代码返回字符串作为范围位置的变量
- java - 无法使用 Selenium 脚本输入完整值,只有一半的值被传递到该字段
- html - 如何将边框应用于facebook页面的所有元素[悬停]而不破坏整个页面的外观
- django - 如何使用 django-filter 按当前用户过滤 ModelChoiceFilter
- java - 考虑在你的配置中定义一个 'com.modern.converter.UserConverter' 类型的 bean
- batch-file - 使用 java home 问题的自定义路径启动 /b javaw
- angular - 将焦点设置在输入字段上 - 复选框
- c# - Linq 查询列表
- > C# 类的 where 属性