Python lxml, соответствующие атрибуты - PullRequest
2 голосов
/ 10 декабря 2011

У меня проблемы с намоткой головы на lxml. У меня есть html, который я хочу разобрать, и мне удалось это сделать, но это не лучший способ сделать это.

Я хочу извлечь значение атрибута value, но только если значение name равно "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 ]

3 голосов
/ 10 декабря 2011

Вы можете сделать это с 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           
2 голосов
/ 10 декабря 2011

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

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

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

...