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

使用XPath提取爬虫元素时第二条路径失效,寻求技术帮助

解决XPath无法提取Quality对应1080p的问题

问题核心在于HTML结构的特殊性:Quality对应的1080p并不是包含<b>Quality:</b>的<li>标签的子内容,而是该<li>的同级文本节点,所以常规提取<li>内部文本的XPath自然拿不到它。

下面结合你的Python代码,给出两种可行的解决方案:

方案1:精准定位目标文本节点

通过找到包含"Quality:"的<b>标签的父<li>,再选取它后面的同级文本节点,用normalize-space()过滤掉多余空白:

from lxml.html import fromstring

content = """<div class="mdif"> <ul> <li><b>Genre:</b>Thriller</li> <li><b>Quality:</b></li>1080p </ul> </div>"""

tree = fromstring(content)

# 提取Genre(原有逻辑可保留)
genre = tree.xpath("//div[@class='mdif']/ul/li[b[text()='Genre:']]/text()")[0]
print("Genre:", genre)

# 提取Quality的正确XPath
quality = tree.xpath("//div[@class='mdif']/ul/li[b[text()='Quality:']]/following-sibling::text()[normalize-space()]")[0].strip()
print("Quality:", quality)

方案2:提取整体文本后分割(备选)

如果页面结构相对稳定,也可以提取<ul>下的所有文本,再按关键词分割提取:

from lxml.html import fromstring

content = """<div class="mdif"> <ul> <li><b>Genre:</b>Thriller</li> <li><b>Quality:</b></li>1080p </ul> </div>"""

tree = fromstring(content)

# 提取<ul>下的所有文本并清理
ul_text_parts = tree.xpath("//div[@class='mdif']/ul/text()")
clean_ul_text = ''.join([part.strip() for part in ul_text_parts])

# 分割获取Quality内容
quality = clean_ul_text.split('Quality:')[-1].strip()
print("Quality:", quality)

第一种方案更精准,推荐优先使用,它直接定位到目标文本节点,不受其他无关内容干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:20