【问题标题】:Passing an xpath expression to an xpath result将 xpath 表达式传递给 xpath 结果
【发布时间】:2018-08-28 11:16:21
【问题描述】:

我正在努力理解 python 的 lxml 库的部分内容。

获取以下html文件,sample.html

<div class="team">
    <ul class="team-members">
        <li class="team-member">
                <span class="team-member-name">John Doe</span>
                <span class="team-member-age">30</span>
            </li>
        <li class="team-member">
                <span class="team-member-name">Jane Doe</span>
                <span class="team-member-age">32</span>
            </li>
        </ul>
    </div>
<div class="team">
    <ul class="team-members">
        <li class="team-member">
                <span class="team-member-name">Joe Smith</span>
                <span class="team-member-age">28</span>
            </li>
        <li class="team-member">
                <span class="team-member-name">Jill Smith</span>
                <span class="team-member-age">41</span>
            </li>
        </ul>
    </div>

我可以将此 html 导入到 lxml 树中:

from lxml import html

file = open("sample.html",'r')
sample = file.read()

tree = html.fromstring(sample)

然后我可以使用 xpath 来获取 html 中所有文本原子的列表,如下所示:

tree.xpath('//text()')

当我通过如下的 xpath 时出现问题:

elements = tree.xpath("//li")

打印元素产量

[<Element li at 0x48be638>,
 <Element li at 0x48be9f8>,
 <Element li at 0x48beb88>,
 <Element li at 0x48bec78>]

我可以将 xpaths 传递给其中的每一个,但每一个的行为都与原始树一样!比如,

elements[0].xpath('//text()')

似乎返回与上面完全相同的列表。不过,

elements[0].tag

返回“li”,因此每个元素似乎都有一些关于它来自哪里的记录。

问题: 理想情况下,我希望能够单独访问 html 文档中的每个列表成员,并将 xpath 传递给每个成员。这样的事情可能吗?每个“元素 li”实际上包含什么信息?

【问题讨论】:

    标签: python html xpath lxml


    【解决方案1】:

    elements[0].xpath('//text()') 在给定的 HTML DOM 中返回 所有 文本节点。要获取 elements[0] 的后代文本节点,您需要以点 (context node) 开头的 XPath:

    elements[0].xpath('.//text()')
    

    【讨论】:

    • 面部护理。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2014-07-14
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多