2013-06-29 36 views
7

Tôi có một html như thế nàyget danh mục bên trong div thẻ sử dụng 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> 

Tôi muốn nhận được những cuốn sách và url của mình sử dụng xpath, nhưng có vẻ như cách tiếp cận của tôi không hoạt động. vì đơn giản tôi đã cố gắng để trích xuất tất cả các yếu tố dưới "li" thẻ như sau

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

Bạn không muốn '// div [@ id =" tất cả câu chuyện "]/ul/li/text()'? – kgraney

+0

@kgraney Tôi đã thử cách tiếp cận nhưng không nhận được kết quả. –

Trả lời

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()) 

sản lượng

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

XPath //div[@id="all-stories"]/div không phù hợp với bất cứ điều gì vì không có con div bên trong thẻ div bên ngoài.

XPath //div[@id="all-stories"]/li cũng sẽ không phù hợp vì không có trực tiếp con li Tage bên trong thẻ div. Tuy nhiên, //div[@id="all-stories"]//lihiện khớp với li thẻ vì // yêu cầu XPath tìm kiếm đệ quy sâu khi cần thiết để tìm các thẻ li.

Hiện tại, nội dung bạn đang tìm kiếm không nằm trong thẻ li. Nó nằm trong thẻ a. Vì vậy, thay vào đó, hãy sử dụng XPath '//div[@id="all-stories"]//li/a' để truy cập vào các thẻ a. Giá trị của thuộc tính href có thể được truy cập với atag.attrib['href'] và văn bản có atag.text_content().

Các vấn đề liên quan