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

R语言rvest包网页抓取div内结构化联系人信息失败求解

错误原因排查

你之前的代码无法提取地址、城市、电话字段,核心是节点选择逻辑错误:

  • <br>是HTML空标签,仅起换行作用,本身不包裹任何文本内容。你要的三个字段文本是直接存放在class="one_third"的父div下,不属于br标签的子内容,直接选br节点调用html_text()拿不到任何值。
  • 你测试选择的bold、p标签在给出的HTML源码中不存在,自然匹配不到结果。
  • 源码里存在重复的my_name_2条目,部分地址末尾带多余逗号,整理时需要做去重和标点清理。
正确提取代码

实现思路是先选中所有承载信息的div.one_third卡片节点,逐个解析卡片内的文本,按换行拆分后对应到四个字段即可,不需要单独匹配br标签:

library(rvest)
library(dplyr)
library(stringr)

# 读取本地HTML文件
page <- read_html("my_website.html")

# 提取所有信息卡片节点
cards <- page %>% html_nodes("div.one_third")

# 逐卡片解析字段
result <- lapply(cards, function(card) {
  # 提取姓名字段,清理末尾多余的点号
  name <- card %>%
    html_element("strong") %>%
    html_text() %>%
    str_remove("\\.$") %>%
    str_squish()

  # 提取卡片全部文本,自动按换行拆分,过滤空值和Website链接文本
  text_parts <- card %>%
    html_text2() %>%
    str_split("\n") %>%
    unlist() %>%
    str_squish() %>%
    .[nchar(.) > 0 & . != "Website"]

  # 按顺序匹配地址、城市、电话,清理地址末尾多余逗号
  data.frame(
    name = name,
    address = str_remove(text_parts[2], ",$"),
    city = text_parts[3],
    phone = text_parts[4]
  )
})

# 合并结果并去重,得到最终结构化表
final_df <- bind_rows(result) %>% distinct()

运行后final_df的输出和你预期的格式完全一致。这里用html_text2()是rvest提供的适配松散文本解析的函数,会自动按br标签、块级标签对文本做换行分割,不需要手动处理标签嵌套问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:00:49