2016-06-05 1 views
1

У меня есть следующий текстНеожиданный выход с помощью LXML `.xpath()` и `for`

testing = """ 
<div> 
<a>11</a> 
</div> 
<div> 
<a>21</a> 
<a>23</a> 
</div> 
""" 

И я хочу, чтобы извлечь текст внутри <a></a>. Ниже моя попытка,

testing = html.fromstring(testing) 
testing = testing.xpath("//div") 
[x.xpath("//a/text()") for x in testing] 

Выход

[['11', '21', '23'], ['11', '21', '23'], ['11', '21', '23']] 

Но то, что я ожидал и хочу

[['11'], ['21', '23']] 

Как я могу это сделать?

спасибо.

ответ

4

testing.xpath("//div") возвращает список соответствия div узлов. Для каждого узла div вы просите найти все элементы a, но // в начале выражения начнет поиск с корня дерева . Вам нужно сделать поиск специфичны для каждой div в списке, предваряя точку:

[x.xpath(".//a/text()") for x in testing] 
    # HERE^ 

Или, если это применимо в вашем случае, вы можете просто сделать это за один раз в одном выражении:

x.xpath("//div/a/text()")