После прохождения xpath в учебнике lxml для python мне сложно понять 2 поведения, которые кажутся мне ошибками. Во-первых, lxml, похоже, возвращает список, даже когда мое выражение xpath явно выбирает только один элемент, а во-вторых. Xpath, кажется, возвращает родительские элементы, а не сами элементы, выбранные прямым поиском поиска xpath.ошибка lxml в .xpath?
Является ли мое понимание XPath все неправильным или у lxml действительно есть ошибка?
Скрипт для репликации поведение Я говорю:
from lxml.html.soupparser import fromstring
doc = fromstring("""
<html>
<head></head>
<body>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</body>
</html>
""")
print doc.xpath("//html")
#[<Element html at 1f385e0>]
#(This makes sense - return a list of all possible matches for html)
print doc.xpath("//html[1]")
#[<Element html at 1f385e0>]
#(This doesn't make sense - why do I get a list when there
#can clearly only be 1 element returned?)
print doc.xpath("body")
#[<Element body at 1d003e8>]
#(This doesn't make sense - according to
#http://www.w3schools.com/xpath/xpath_syntax.asp if I use a tag name
#without any leading/I should get the *child* nodes of the named
#node, which in this case would mean I get a list of
#p tags [<Element p at ...>, <Element p at ...>]
Моя проблема не в том, что я не могу понять, как использовать lxml, чтобы выбрать все теги p. Моя проблема заключается в том, почему именно lxml не имеет ошибки, потому что он ведет себя по-другому, что я ожидаю, основываясь на учебнике XPath. – Trindaz