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

如何仅在Engine Capacity标签存在时获取其前置元素的文本?

提取「Engine Capacity」标签对应的前置元素文本

嘿,针对你要提取文本为「Engine Capacity」的标签的前置元素文本的需求,结合你提供的HTML结构和XPath信息,我给你几个可靠的实现方案:

方案1:固定位置XPath提取(快速但依赖结构)

如果你确认页面结构不会变动,目标标签和前置元素始终是第11个<dt>和<dd>,可以直接用你给出的XPath获取文本:

//*[@id="ownershipDiv"]/dl/dd[11]/text()

不过要注意,一旦页面新增或删除了<dt>/<dd>对,这个方法就会失效,所以更推荐下面的关联匹配方案。

方案2:通过标签文本关联提取(更健壮)

为了不依赖固定的位置索引,我们可以先定位到「Engine Capacity」标签,再关联到它的前置<dd>元素,对应的XPath逻辑非常清晰:

//*[@id="ownershipDiv"]/dl/dt[label/text()="Engine Capacity"]/preceding-sibling::dd[1]/text()

拆解一下这个XPath的逻辑:

  • 先找到包含文本为「Engine Capacity」的<label>的<dt>元素
  • 然后获取这个<dt>的最近的前一个<dd>元素的文本
  • preceding-sibling::dd[1]确保只匹配紧邻的前置<dd>,不会误抓更早的元素

这个方法完全基于标签文本关联,就算页面其他位置的元素有变动,只要「Engine Capacity」标签存在,就能准确提取到对应的前置文本。

方案3:Python代码实现示例(Scrapy/BeautifulSoup)

如果是用Python做网页抓取,这里给你两个常用库的实现代码:

Scrapy 实现

# 假设response是Scrapy的响应对象
engine_capacity = response.xpath('//*[@id="ownershipDiv"]/dl/dt[label/text()="Engine Capacity"]/preceding-sibling::dd[1]/text()').get()
# 提取结果就是 "1328"

BeautifulSoup 实现

from bs4 import BeautifulSoup

# 假设html是你获取到的页面HTML内容
soup = BeautifulSoup(html, 'html.parser')
# 定位目标label标签
target_label = soup.find('label', string='Engine Capacity')
if target_label:
    # 找到父元素<dt>,再获取它的前一个<dd>兄弟元素
    dt_element = target_label.parent
    preceding_dd = dt_element.find_previous_sibling('dd')
    if preceding_dd:
        engine_capacity_text = preceding_dd.get_text(strip=True)
        # 最终结果就是 "1328"

这样不管是用纯XPath还是结合代码,都能精准提取到你需要的前置元素文本~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:52:34