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"]//li
hiệ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()
.
Bạn không muốn '// div [@ id =" tất cả câu chuyện "]/ul/li/text()'? – kgraney
@kgraney Tôi đã thử cách tiếp cận nhưng không nhận được kết quả. –