使用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
相关产品推荐
相关产品推荐

