You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中抓取本地HTML转会数据:如何将选择器索引设为变量?

解决R中批量抓取转会数据的CSS选择器索引问题

我明白你遇到的问题了——固定的:nth-child(2)索引只能抓取单条转会数据,没法遍历所有的转会条目。其实核心思路是先定位所有转会的父节点,再从每个父节点内部提取需要的信息,这样就不用依赖外部的固定索引了。

分析HTML结构

从你提供的HTML片段可以看到,每一条转会记录都被包裹在<li class="post pressRelease">标签里,里面的<ul class="player">包含了所有我们需要的信息:球员姓名、时间、转会费,还有<div class="from">里的卖家和买家。

修改后的R代码

我们可以用purrr包的map_dfr来遍历每个转会条目,把每条数据整合成一个数据框:

library(rvest)
library(purrr)
library(dplyr)

# 读取本地HTML文件
dades <- read_html("你的本地HTML文件路径.html")

# 获取所有转会条目
transfer_items <- dades %>% html_nodes("li.post.pressRelease")

# 遍历每个条目,提取数据
transfer_data <- transfer_items %>%
  map_dfr(function(item) {
    # 提取球员姓名
    player <- item %>% 
      html_node("ul.player li.text strong") %>% 
      html_text() %>% 
      trimws()
    
    # 提取转会费
    cost <- item %>% 
      html_node("ul.player li.text span") %>% 
      html_text() %>% 
      trimws()
    
    # 提取卖家和买家:div.from里的两个strong标签,第一个是卖家,第二个是买家
    from_to <- item %>% 
      html_nodes("ul.player li.text div.from strong") %>% 
      html_text() %>% 
      trimws()
    seller <- from_to[1]
    buyer <- from_to[2]
    
    # 提取交易时间
    day <- item %>% 
      html_node("ul.player li.text time") %>% 
      html_text() %>% 
      trimws()
    
    # 返回当前条目的数据框
    tibble(player, cost, seller, buyer, day)
  })

# 查看结果
print(transfer_data)

代码说明

  • 先抓所有转会父节点:html_nodes("li.post.pressRelease")会把页面上所有的转会条目都抓下来,不管有多少条。
  • 从父节点内部提取元素:每个item就是一条转会记录,我们从item内部用相对的CSS选择器找子元素,比如ul.player li.text strong,这样就不用依赖外部的#pressReleases > ul > li:nth-child(2)这种固定索引了。
  • 卖家和买家的提取:div.from里的两个<strong>标签正好对应卖家和买家,所以我们把它们都抓下来后,分别取第1和第2个元素即可。

这样修改后,不管页面上有多少条转会记录,都能一次性批量抓取所有数据啦。

内容的提问来源于stack exchange,提问作者xuriguer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:58:39