2011-12-10 77 views
2

我有一些麻烦缠绕我的头周围lxml。我有一些我想要解析的html,并且我设法做到了,但它并不觉得这是最好的方式。Python lxml,匹配属性

我想提取值属性的值,但前提是名称的值为“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")) 

回答

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   
+0

我知道有这样一个更好的解决方案,谢谢。 –

2

您可以使用XPath与lxml,这里是例子:

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

见本文件:http://lxml.de/xpathxslt.html