2011-12-10 20 views
2

私はlxmlの周りに頭を抱えているいくつかの問題があります。私は解析したいhtmlをいくつか持っていますが、それを行うことはできましたが、それを実行する最善の方法とは感じられません。Python lxml、一致する属性

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

私はvalue属性の値を抽出したいのですが、名前の値が「myInput」である場合にのみ、私はこれを行うために管理が、私はよりよい解決策があると感じています。

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

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

答えて

3

あなたは、XPathでそれを行うことができます: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 

は、次のような意味を持っています

//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