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

使用R的rvest包抓取含URL链接的指定HTML表格方法咨询

保留HTML表格中链接的抓取方案(针对KEGG目标表格)

要抓取KEGG网站中标记为“Category Bacteria and Archaea”的第二个表格,同时保留Category、Source、Organism列的外部链接,原代码无法将链接与对应单元格正确匹配,以下是修正后的实现方法:

实现代码

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

# 读取目标页面
item <- read_html("https://www.genome.jp/kegg/tables/br08606.html#5")

# 定位到目标表格(页面第二个表格)
target_table <- item %>% html_nodes("table") %>% .[[2]]

# 提取表格行数据
rows <- target_table %>% html_nodes("tr")

# 处理表头并标准化命名
header <- rows[[1]] %>% html_nodes("th") %>% html_text() %>% make_clean_names()

# 逐行处理数据,同时提取文本与对应链接
data_with_links <- rows[-1] %>% map_dfr(function(row) {
  cells <- row %>% html_nodes("td")
  
  # 提取单元格显示文本
  cell_text <- cells %>% html_text() %>% trimws()
  
  # 提取单元格内的链接(无链接则返回NA)
  cell_links <- cells %>% map_chr(function(cell) {
    link <- cell %>% html_node("a") %>% html_attr("href")
    ifelse(is.null(link), NA_character_, link)
  })
  
  # 整合文本与链接,生成对应列
  tibble(
    category = cell_text[1],
    category_link = cell_links[1],
    source = cell_text[2],
    source_link = cell_links[2],
    organism = cell_text[3],
    organism_link = cell_links[3],
    ncbi_taxon_id = cell_text[4],
    kegg_organism_code = cell_text[5],
    number_of_genes = cell_text[6]
  )
})

关键说明

  • 代码仅针对目标表格处理,避免抓取页面其他无关链接
  • 对Category、Source、Organism列分别生成对应的category_link、source_link、organism_link列,确保链接与文本严格一一对应
  • 无链接的单元格会自动填充NA,不破坏表格原有结构

原代码问题修正

原代码中使用//td/a会抓取整个页面所有<td>内的链接,而非仅目标表格内容;且直接将所有链接存入单独一列,无法对应到具体单元格。修正后的代码通过逐行逐单元格遍历的方式,精准匹配每个单元格的文本与链接。

内容的提问来源于stack exchange,提问作者Han-Jiun Ke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:15:11