gpt4 book ai didi

Python lxml 的 XPath 在

标签中找不到

    转载 作者:太空宇宙 更新时间:2023-11-04 10:19:17 25 4
    gpt4 key购买 nike

    我对 pythons lxml 的 XPath 函数有疑问。一个最小的示例是以下 python 代码:

    from lxml import html, etree

    text = """
    <p class="goal">
    <strong>Goal</strong> <br />
    <ul><li>test</li></ul>
    </p>
    """

    tree = html.fromstring(text)
    thesis_goal = tree.xpath('//p[@class="goal"]')[0]
    print etree.tostring(thesis_goal)

    运行代码产生

    <p class="goal">
    <strong>Goal</strong> <br/>
    </p>

    如您所见,整个 <ul> block 丢失。这也意味着无法解决 <ul>使用 //p[@class="goal"]/ul 的 XPath , 作为 <ul>不算作 <p> 的 child .

    这是 lxml 的错误还是特性,如果是后者,我如何才能访问 <p> 的全部内容? ?这东西被嵌入到一个更大的网站中,甚至不能保证一个<ul>标签(内部可能还有另一个 <p>,或其他任何东西)。

    更新:收到答案后更新了标题,让有同样问题的人更容易找到这个问题。

    最佳答案

    ul 元素(或更一般地 flow content )是 not allowed inside p elements (只能包含 phrasing content )。因此 lxml.htmltext 解析为

    In [45]: print(html.tostring(tree))
    <div><p class="goal">
    <strong>Goal</strong> <br>
    </p><ul><li>test</li></ul>

    </div>

    ul 跟在 p 元素之后。所以您可以使用 XPath 找到 ul 元素

    In [47]: print(html.tostring(tree.xpath('//p[@class="goal"]/following::ul')[0]))
    <ul><li>test</li></ul>

    关于Python lxml 的 XPath 在 <p> 标签中找不到 <ul>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33319290/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com