
本文介绍使用 rvest 和 xml2 包,通过节点位置(而非属性选择器)可靠提取缺失 itemprop 或 aria-label 等标准语义标记的 html 文本内容,特别适用于结构稳定但语义标注不规范的房产类网页数据抓取。
本文介绍使用 rvest 和 xml2 包,通过节点位置(而非属性选择器)可靠提取缺失 itemprop 或 aria-label 等标准语义标记的 html 文本内容,特别适用于结构稳定但语义标注不规范的房产类网页数据抓取。
在网页爬虫实践中,常遇到 HTML 标签缺乏标准化语义属性(如 itemprop、data-* 或 class 命名不一致)的情况。例如,目标
标签中仅通过嵌套 的 aria-label 提供可读提示,但所需文本值实际位于 标签的直接文本节点(即 后的兄弟文本),而非 内容中——这导致 html_nodes("[aria-label='...']") %>% html_text() 返回空字符串。 此时,依赖DOM 结构稳定性比依赖属性更可靠。观察原始 HTML 可发现: 元素按固定顺序排列(面积 → 卧室数 → 浴室数 → 车位数),且车位信息恒为第 4 个 子节点(尽管其缺失 itemprop 属性)。因此,应转向基于位置的节点选取策略。 以下为完整、健壮的提取方案: 的顺序和层级关系。若顺序不固定(如车位有时排第 3),需改用更鲁棒的逻辑(如结合 aria-label 定位 ,再获取其父 的文本)。 内含 + 文本,推荐先用 xml_children() 获取 列表,再对 调用 html_text() —— 更清晰且自动处理混合内容。 节点执行 xml_children(p_node) 查看内部节点构成,确认目标文本是否为独立文本节点(xml_name() == "#text")。 该方法摆脱了对 HTML 语义标记完整性的依赖,转而利用前端渲染的视觉一致性,在真实爬虫项目中显著提升数据提取成功率。library(rvest)
library(xml2)
library(dplyr)
# 读取 HTML(本地文件或 URL)
pagee 的纯文本
for (i in seq_along(amenity_sections)) {
p_nodes 元素(排除换行/空白文本节点)
p_elements = 4) {
# 提取第 4 个 <p> 的全部文本(自动合并文本节点,去除前后空格)
garage_counts[i] </p><p><strong>关键要点与注意事项:</strong></p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img
src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a>
<p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










