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")) 

Вы можете сделать это с помощью 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 

Вы можете использовать xpath с lxml, вот пример:

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

См. Этот документ: http://lxml.de/xpathxslt.html