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

R语言rvest爬取网页时关联子标题与对应数据的方法

R爬虫rvest分块绑定子标题方案

问题背景

  • 已通过rvest包读取目标房产页面内容存入preciosComAlq对象
  • 可正常提取.t-panel.comprar板块下5个.t-panel_subtitle子标题节点,也可提取描述区块内的数值、文本字段,直接bind_cols()合并后得到12行2列无分类标记的tibble
  • 需求:新增subtitle列标记每条数值-文本条目对应的子标题归属,例如「6.345 €/m² Precio con terraza」这类条目需归属到「Precio m² por características」子标题下,输出结构化数据集

实现代码

核心思路是放弃全局平级提取所有描述项的写法,以子标题节点为起点逐块提取对应下属内容,从根源避免分类错位:

library(rvest)
library(tidyverse)

# 先定位到买房板块的根节点
comprar_root <- preciosComAlq %>% html_element(".t-panel.comprar")

# 迭代每个子标题节点,逐块提取数据并绑定子标题
result_df <- comprar_root %>%
  html_elements(".t-panel_subtitle") %>%
  map_dfr(function(sub_node){
    # 提取当前子标题文本
    sub_title <- sub_node %>% html_text2()
    # 定位当前子标题紧邻的下属描述区块(通过XPath兄弟节点轴匹配)
    desc_block <- sub_node %>% 
      html_element(xpath = "following-sibling::div[contains(@class,'description-wrap')][1]")
    # 提取当前区块下的所有数值
    metric_vals <- desc_block %>% 
      html_elements(".description-item_semibold") %>% 
      html_text2()
    # 提取当前区块下的所有描述文本
    metric_text <- desc_block %>% 
      html_elements(".description-item_regular") %>% 
      html_text2()
    # 组装当前块的数据集
    tibble(
      subtitle = sub_title,
      metric_value = metric_vals,
      metric_desc = metric_text
    )
  })

注意事项

  • 该方案通过XPath的following-sibling轴匹配每个子标题之后第一个描述区块,严格对应网页DOM结构的从属关系,不需要手动做位置匹配,不会出现分类错配
  • 统一使用html_text2()提取文本,可自动清理网页自带的多余换行、空白字符,无需额外做文本清洗
  • 若存在个别子标题下无对应描述项的场景,可在提取desc_block后增加空值判断,避免迭代报错
  • 最终输出结果行数和之前提取的12行完全一致,无数据丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:12:12