Tìm hiểu thêm về cách điều hướng through the parse tree in BeautifulSoup
. Cây phân tích cú pháp đã có tags
và NavigableStrings
(vì đây là một văn bản). Ví dụ:
from BeautifulSoup import BeautifulSoup
doc = ['<html><head><title>Page title</title></head>',
'<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',
'<p id="secondpara" align="blah">This is paragraph <b>two</b>.',
'</html>']
soup = BeautifulSoup(''.join(doc))
print soup.prettify()
# <html>
# <head>
# <title>
# Page title
# </title>
# </head>
# <body>
# <p id="firstpara" align="center">
# This is paragraph
# <b>
# one
# </b>
# .
# </p>
# <p id="secondpara" align="blah">
# This is paragraph
# <b>
# two
# </b>
# .
# </p>
# </body>
# </html>
Để di chuyển cây phân tích bạn có contents
và string
.
-
nội dung là một danh sách có thứ tự các Tag và NavigableString đối tượng chứa trong một yếu tố trang
-
nếu thẻ có chỉ có một nút con, và đó là nút con là một chuỗi, nút con được cung cấp dưới dạng tag.string, cũng như tag.contents [0]
Đối với ở trên, đó là để nói rằng bạn có thể nhận được
soup.b.string
# u'one'
soup.b.contents[0]
# u'one'
Đối với nhiều trẻ em nút, bạn có thể có ví dụ
pTag = soup.p
pTag.contents
# [u'This is paragraph ', <b>one</b>, u'.']
vì vậy đây bạn có thể chơi với contents
và nhận nội dung tại chỉ mục bạn muốn.
Bạn cũng có thể lặp qua Thẻ, đây là lối tắt. Ví dụ:
for i in soup.body:
print i
# <p id="firstpara" align="center">This is paragraph <b>one</b>.</p>
# <p id="secondpara" align="blah">This is paragraph <b>two</b>.</p>
Điều đó sẽ trả lại 'u '\ n một bình luận \ nĐịa chỉ \ ncái gì đó \ n ĐÂY LÀ TEXT CỦA TÔI \ n điều gì khác \ n'' hoặc' u'a bình luậnTextsomethingTHIS LÀ TEXTs something else'' của tôi có nhiều văn bản hơn yêu cầu. –
@CristianCiupitu: Tất nhiên, bạn đúng, không chú ý ở đây. Đang cập nhật. –
Đây là giải pháp duy nhất không phụ thuộc vào văn bản nằm trong chuỗi hoặc mối quan hệ vị trí với một phần tử cụ thể khác, mà kéo tất cả văn bản từ thẻ/phần tử được chỉ định trong khi bỏ qua văn bản (hoặc nội dung khác) của thẻ/phần tử con. Cảm ơn! Nó là khó xử, nhưng nó hoạt động và giải quyết vấn đề của tôi (tôi không phải là OP, nhưng có một nhu cầu tương tự). – geewiz