2013-06-29 11 views
7

ho un html come questovoci di elenco ottenere all'interno div tag utilizzando XPath

<div id="all-stories" class="book"> 
<ul> 

<li title="Book1" ><a href="book1_url">Book1</a></li> 

<li title="Book2" ><a href="book2_url">Book2</a></li> 
</ul> 

</div> 

voglio ottenere i libri e le rispettive url usando XPath, ma sembra il mio approccio non funziona. per semplicità ho cercato di estrarre tutti gli elementi sotto tag "li" come segue

lis = tree.xpath('//div[@id="all-stories"]/div/text()') 
+0

Non vuoi '// div [@ id =" all-stories "]/ul/li/text()'? – kgraney

+0

@kgraney Ho provato l'approccio ma non mi ha ottenuto il risultato. –

risposta

9
import lxml.html as LH 

content = '''\ 
<div id="all-stories" class="book"> 
<ul> 

<li title="Book1" ><a href="book1_url">Book1</a></li> 

<li title="Book2" ><a href="book2_url">Book2</a></li> 
</ul> 

</div> 
''' 
root = LH.fromstring(content) 
for atag in root.xpath('//div[@id="all-stories"]//li/a'): 
    print(atag.attrib['href'], atag.text_content()) 

rendimenti

('book1_url', 'Book1') 
('book2_url', 'Book2') 

Il XPath //div[@id="all-stories"]/div non corrisponde nulla, perché non c'è nessun bambino div all'interno del tag div esterno.

Il XPath //div[@id="all-stories"]/li, inoltre, non sarebbe partita, perché il non esiste diretta bambino li tage all'interno del tag div. Tuttavia, //div[@id="all-stories"]//lifa corrisponde ai tag li perché // indica a XPath di cercare in modo ricorsivo il più profondamente necessario per trovare i tag li.

Ora, il contenuto che stai cercando non è nel tag li. È all'interno del tag a. Quindi, usa invece XPath '//div[@id="all-stories"]//li/a' per raggiungere i tag a. È possibile accedere al valore dell'attributo href con e il testo con atag.text_content().

Problemi correlati