Câu hỏi của bạn có hai phần:
Biến NavigableString single "Văn bản này là của tôi" vào một NavigableString, một Tag, và một NavigableString.
Thay thế NavigableString "Văn bản này là của tôi" với ba phần tử mới.
Câu trả lời cho # 1 tùy thuộc vào trường hợp của bạn. Cụ thể là nó phụ thuộc vào cách bạn xác định phần nào của văn bản cần liên kết. Tôi sẽ sử dụng cụm từ thông dụng để tìm chuỗi "văn bản":
from bs4 import BeautifulSoup
data = '<p>This text is my <a href="#">text</a><p>'
soup = BeautifulSoup(data)
original_string = soup.p.contents[0]
print(original_string)
# "This text is my "
import re
this, text, is_my = re.compile("(text)").split(original_string)
Bây giờ cho # 2. Đây không phải là dễ dàng như nó có thể được, nhưng nó chắc chắn có thể. Đầu tiên, Turn text
thành một Tag
chứa văn bản liên kết:
text_link = soup.new_tag("a", href="#")
text_link.string = text
re.split()
quay this
và is_my
thành chuỗi Unicode bình thường. Biến chúng trở lại vào NavigableString
s để họ có thể quay trở lại vào cây như yếu tố:
this = soup.new_string(this)
is_my = soup.new_string(is_my)
Bây giờ sử dụng replace_with()
và insert_after
để thay thế các yếu tố cũ với ba yếu tố mới:
original_string.replace_with(this)
this.insert_after(text_link)
text_link.insert_after(is_my)
Bây giờ cây của bạn nên xem theo cách bạn muốn:
print(soup.p)
# <p>This <a href="#">text</a> is my <a href=""></a></p>
Nguồn
2012-04-20 02:08:22