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

使用html_text爬取网页时捕获冗余CSS数据的解决求助

解决R爬虫提取文本时包含CSS样式代码的问题

出现这种情况是因为目标元素中嵌套了CSS-in-JS生成的<style>标签,html_text()会提取所有子节点的文本内容,包括这些样式代码。以下是几种更可靠的解决方法:

方法1:用XPath直接定位纯文本节点

通过XPath过滤掉<style>标签下的文本,只提取实际内容的文本节点:

library(rvest)
library(magrittr)

"https://tomsk.drom.ru/toyota/bb/49660653.html" %>%
  read_html() %>%
  html_nodes(xpath = "//tr[2]//*[contains(@class, 'ezjvm5n0')]/text()[not(parent::style)]") %>%
  html_text() %>%
  paste(collapse = " ")

解释:

  • //tr[2]//*[contains(@class, 'ezjvm5n0')] 定位到目标元素
  • /text()[not(parent::style)] 只选择父节点不是<style>的文本节点
  • 最后用paste(collapse = " ")把分散的文本节点拼接成完整内容

方法2:移除目标元素内的style节点后提取文本

先选中目标元素,删除其中的<style>子节点,再提取文本:

library(rvest)
library(magrittr)
library(xml2)

page <- read_html("https://tomsk.drom.ru/toyota/bb/49660653.html")
target_element <- page %>% html_elements("tr:nth-child(2) .ezjvm5n0")

# 移除所有嵌套的style标签
xml_remove(xml_find_all(target_element, ".//style"))

# 提取干净文本
clean_text <- target_element %>% html_text(trim = TRUE)

解释:

  • xml_remove() 直接从DOM结构中删除样式节点,从根源上避免提取到样式代码
  • trim = TRUE 可以自动去除文本前后的空白字符

方法3:正则表达式兜底(仅前两种方法失效时使用)

如果网站DOM结构变化导致前两种方法不生效,可以用正则匹配并移除CSS样式块:

raw_text <- ".css-9g0qum{line-height:1.55;}109 л.с., .css-1dauskf{-webkit-text-decoration:none;text-decoration:none;cursor:pointer;color:var(--link, hsl(209, 77%, 45%));border:none;background:none;font-size:inherit;font-weight:inherit;padding:0;text-align:left;border-bottom:1px dashed var(--light-blue-button-bg, hsl(208, 100%, 92%));}.drom-notouch .css-1dauskf:hover,.drom-touch .css-1dauskf:active{-webkit-text-decoration:none;text-decoration:none;color:var(--drom-brand, hsl(353, 100%, 43%));border-bottom:1px dashed var(--link-hover-border, hsla(353, 100%, 43%, 0.2));}налог"

clean_text <- gsub("\\.css-[^{]+\\{[^}]+\\}", "", raw_text) %>% trimws()

注意:

正则方案依赖CSS样式块的格式(以.css-开头、用{}包裹),如果网站样式生成规则变化,可能会失效,因此优先推荐前两种DOM操作方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:12:44