Python lxml,匹配属性

2 投票
2 回答
1258 浏览
提问于 2025-04-17 08:07

我在理解lxml这个库时遇到了一些问题。我有一些HTML代码想要解析,我已经成功解析了,但感觉这不是最好的方法。

我想提取一个叫"value"的属性的值,但前提是这个属性的名字是"myInput"。

<input name="myInput" value="This is what i want"/>

我虽然能做到这一点,但我觉得还有更好的解决办法。

doc = html.fromstring(data)
tr = doc.cssselect("input")

for x in tr:
    if x.get("name") == "myInput":
        print(x.get("value"))

2 个回答

2

你可以使用 xpath 和 lxml,下面是一个例子:

f = StringIO(xmlString)
tree = etree.parse(f)
r = tree.xpath('/input[@name="myInput"]/@value')

可以查看这个文档:http://lxml.de/xpathxslt.html

3

你可以用XPath来实现这个:

import lxml.html as LH

content='<input name="myInput" value="This is what i want"/>'

doc=LH.fromstring(content)
for val in doc.xpath("//input[@name='myInput']/@value"):
    print(val)

这样会得到

This is what i want

上面使用的XPath有以下意思:

    //input                    # find all input tags
      [@name='myInput']        # such that the name attribute equals myInput
      /@value                  # return the value of the value attribute           

撰写回答