Python lxml,匹配属性
我在理解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