आपका प्रश्न के दो भाग हैं:
एकल NavigableString टर्निंग "यह पाठ है मेरी" एक NavigableString, एक टैग, और एक अन्य NavigableString में।
नेविगेलस्ट्रिंग को बदलना "यह पाठ मेरा नया है" तीन नए तत्वों के साथ।
# 1 का उत्तर आपकी स्थिति पर निर्भर करता है। विशेष रूप से यह इस बात पर निर्भर करता है कि आप कैसे निर्धारित करते हैं कि पाठ के किस हिस्से को जोड़ने की आवश्यकता है। मैं स्ट्रिंग "टेक्स्ट" खोजने के लिए एक नियमित अभिव्यक्ति का उपयोग करूंगा:
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)
अब # 2 के लिए। यह जितना आसान हो सकता है उतना आसान नहीं है, लेकिन यह निश्चित रूप से संभव है। सबसे पहले, एक Tag
लिंक पाठ वाले मुड़ें text
:
text_link = soup.new_tag("a", href="#")
text_link.string = text
re.split()
साधारण यूनिकोड स्ट्रिंग में this
और is_my
बदल गया। NavigableString
रों में उन्हें वापस कर दें ताकि वे तत्व के रूप में पेड़ में वापस जा सकते हैं:
this = soup.new_string(this)
is_my = soup.new_string(is_my)
अब replace_with()
और insert_after
का उपयोग तीन नए तत्वों के साथ पुराने तत्व को बदलने के लिए:
original_string.replace_with(this)
this.insert_after(text_link)
text_link.insert_after(is_my)
अब आप अपने पेड़ जिस तरह से आप के लिए यह चाहते दिखना चाहिए:
print(soup.p)
# <p>This <a href="#">text</a> is my <a href=""></a></p>
स्रोत
2012-04-20 02:08:22