使用XPath Following从XML中获取元素

3
我有一个如下的XML文件
<li class="expandSubItem">
    <span class="expandSubLink">Popular Neighborhoods</span>
    <ul class="secondSubNav" style="top:-0.125em;">
        <li class="subItem">
            <a class="subLink" href="/Hotels-g187147-zfn7236765-Paris_Ile_de_France-Hotels.html">Quartier Latin Hotels</a>
        </li>
    </ul>
</li>
<li class="expandSubItem">
    <span class="expandSubLink">Popular Paris Categories</span>
    <ul class="secondSubNav" style="top:-0.125em;">
        <li class="subItem">
            <a class="subLink" href="/HotelsList-Paris-Cheap-Hotels-zfp10420.html">Paris Cheap Hotels</a>
        </li>
    </ul>
</li>

我想获取“热门巴黎分类”下的所有链接。我使用了类似于这样的代码://li//a/@href/following::span[text()='Popular Singapore Categories'],但是没有结果。有什么办法可以得到正确的结果吗?下面是我编写的Python代码片段。
t_url = 'https://www.tripadvisor.com/Tourism-g187147-Paris_Ile_de_France-Vacations.html'
page = requests.get(t_url, timeout=30)
tree = html.fromstring(page.content)

links = tree.xpath('//li[span="Popular Paris Categories"]//a/@href')
print links

//li[span='Popular Paris Categories']/ul/li/a/@href - har07
它没有起作用,因为“span”和“ul”在xpath的同一级别。 - Agus Sanjaya
1
是的,spanul处于同一级别,这并不重要。请参见演示(或在您喜欢的任何XPath测试器中尝试):http://xpatheval.apphb.com/3849byFx2 - har07
完整的页面内容太长了。但我在这里发布的部分是存在的。 - Agus Sanjaya
让我们在聊天中继续这个讨论 - Agus Sanjaya
显示剩余2条评论
2个回答

3
这是一种可能的方式:
//li[normalize-space(span)="Popular Paris Categories"]//a/@href

注意,normalize-space()被用来清除内容的尾随空格。这就是为什么我最初在评论中建议的XPath对你实际的HTML无效的原因。

是的,你说得对。在“Popular Paris Categories”之后有一个新行。非常感谢你的帮助。 - Agus Sanjaya

0

也许是这样的东西

//span[text()='Popular Paris Categories']/following-sibling::ul//a/@href

@AgusSanjaya,它应该可以工作(请参见http://xpatheval.apphb.com/8524GG-JA上的演示)。您在哪个环境中运行此程序?(*使用了什么XPath引擎等*) - Gabriele Petrioli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接