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

如何用rvest从指定网站抓取entity-app类元素生成表格?

实现思路与代码指导

核心步骤

  • 遍历已抓取的每个entity-app元素,分别提取两类目标内容
  • 对每个元素,单独提取entity-app__header__name的文本(每个APP对应唯一名称)
  • 提取entity-app__info__list__header的所有文本(每个APP可能包含多个这类信息项,比如厂商、注册号等),可将多个文本合并为单个字符串
  • 将所有提取结果整理为标准数据框(表格)

完整代码

library(rvest)
library(purrr)  # 用于遍历元素并生成数据框

# 读取页面(复用你的初始代码)
document <- read_html("https://diga.bfarm.de/de/verzeichnis")
html_products <- document %>% html_elements(".entity-app")  # 类选择器需加.前缀才能正确匹配

# 遍历每个元素,提取目标数据并生成数据框
result_df <- html_products %>%
  map_dfr(function(app) {
    # 提取应用名称
    app_name <- app %>% 
      html_element(".entity-app__header__name") %>% 
      html_text2()  # 自动处理空白与空值
    
    # 提取所有信息表头,合并为逗号分隔的字符串
    info_headers <- app %>% 
      html_elements(".entity-app__info__list__header") %>% 
      html_text2() %>% 
      paste(collapse = ", ")
    
    # 返回当前APP的结果行
    tibble::tibble(
      应用名称 = app_name,
      信息项 = info_headers
    )
  })

# 查看结果
print(result_df)

关键细节说明

  1. 类选择器修正:原代码中html_elements("entity-app")需改为html_elements(".entity-app"),CSS类名选择器必须加.前缀才能匹配到目标元素
  2. map_dfr的作用:自动遍历每个entity-app元素,将单个元素的提取结果合并为数据框的一行,最终生成完整表格
  3. 空值处理:html_text2()比html_text()更智能,会自动去除多余空白,遇到不存在的元素时返回空字符串,避免报错
  4. 精细化提取示例:如果需要将信息项拆分为单独列(比如厂商、注册号),可通过XPath精准定位:
result_df_detail <- html_products %>%
  map_dfr(function(app) {
    tibble::tibble(
      应用名称 = app %>% html_element(".entity-app__header__name") %>% html_text2(),
      厂商 = app %>% html_element(xpath = ".//*[contains(@class, 'entity-app__info__list__header') and text()='Hersteller']/following-sibling::div") %>% html_text2(),
      注册号 = app %>% html_element(xpath = ".//*[contains(@class, 'entity-app__info__list__header') and text()='Eingangsnummer']/following-sibling::div") %>% html_text2()
    )
  })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:51:02