无法生成精准XPath,需提取页面Title与Genre对应内容
精准提取Title和Genre的XPath方案
嘿,我来帮你搞定这个元素定位的问题!先看看你提供的HTML结构:
- Title:Army Of Darkness
- Genre:
Horror
这里有个小坑:Genre对应的文本Horror并没有放在<li>标签里,而是作为<ul>的直接文本节点,跟在第二个<li>后面。下面给你一套精准又健壮的XPath方案:
1. 提取Title的最优XPath
你之前的思路是对的,但可以优化得更健壮——不要依赖<li>的位置(比如li[1]),而是通过<b>标签的文本内容来定位对应的<li>:
//div[@class='mdif']/ul/li[b[text()='Title:']]/text()
这样就算HTML里<li>的顺序发生变化,只要<b>Title:</b>这个标识在,就能准确拿到Army Of Darkness。
2. 提取Genre的XPath
因为Horror是<ul>的直接文本节点,我们需要定位到<b>Genre:</b>所在的<li>,然后获取它后面的非空白文本节点:
//div[@class='mdif']/ul/li[b[text()='Genre:']]/following-sibling::text()[normalize-space()]
following-sibling::text():获取当前<li>后面的所有文本节点normalize-space():过滤掉那些只有空白字符的无效文本节点
3. 组合结果
如果用Python的lxml库,你可以这样写代码来得到期望的结果:
title = root.xpath("//div[@class='mdif']/ul/li[b[text()='Title:']]/text()")[0] genre = root.xpath("//div[@class='mdif']/ul/li[b[text()='Genre:']]/following-sibling::text()[normalize-space()]")[0].strip() result = f"{title} {genre}" # 输出:Army Of Darkness Horror
这种方案既精准又具备适应性,不用担心HTML结构小幅度调整导致提取失败。
内容的提问来源于stack exchange,提问作者SIM
相关产品推荐
相关产品推荐

