2017-01-25 4 views
0

Я пытаюсь получить все элементы в списке с веб-сайтапитон, LXML извлечения всех элементов в списке

Из следующих фрагмент кода HTML:

<ul> 
    <li class="name"> James </li> 
    <li> Male </li> 
    <li> 5'8" </li> 
</ul> 

Мой текущий код берет использует XPath и сохраняет имена в списке. Есть ли способ получить все три поля в виде списка?

Мой код:

name = tree.xpath('//li[@class="name"]/text()') 

ответ

1
import lxml.html as LH 
tree = LH.parse('data') 
print(tree.xpath('//li[../li[@class="name" and position()=1]]/text()')) 

печатает

[' James ', ' Male ', ' 5\'8" '] 

XPath '//li[../li[@class="name" and position()=1]]/text()' означает

//li    # all li elements 
[    # whose 
..    # parent 
/    # has a child 
li    # li element 
    [    # whose 
    @class="name" # class attribute equals "name" 
    and   # and 
    position()=1] # which is the first child element 
    ]    
    /text()  # return the text of those elements 
1
from lxml import html 

text = '''<ul> 
    <li class="name"> James </li> 
    <li> Male </li> 
    <li> 5'8" </li> 
</ul> 
<ul> 
    <li class="name"> James </li> 
    <li> Male </li> 
    <li> 5'8" </li> 
</ul> 
<ul> 
    <li class="name"> James </li> 
    <li> Male </li> 
    <li> 5'8" </li> 
</ul>''' 

tree = html.fromstring(text) 
for ul in tree.xpath('//ul[li[@class="name"]]'): # loop through the ul tag, whose child tag contains class attribute and the value is 'name' 
    print(ul.xpath("li/text()")) # get all the text in the li tag 

из:

[' James ', ' Male ', ' 5\'8" '] 
[' James ', ' Male ', ' 5\'8" '] 
[' James ', ' Male ', ' 5\'8" '] 
Смежные вопросы