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"]//li
fa 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()
.
Non vuoi '// div [@ id =" all-stories "]/ul/li/text()'? – kgraney
@kgraney Ho provato l'approccio ma non mi ha ottenuto il risultato. –