La tua domanda ha due parti:
Girando il singolo NavigableString "Questo testo è il mio" in un NavigableString, un tag, e un altro NavigableString.
Sostituzione di NavigableString "Questo testo è mio" con i tre nuovi elementi.
La risposta al numero 1 dipende dalla situazione. In particolare dipende da come si determina quale parte del testo ha bisogno di collegamento. Userò un'espressione regolare per trovare la stringa "text":
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)
Ora per # 2. Non è così facile come potrebbe essere, ma è sicuramente possibile. In primo luogo, Turn text
in un Tag
contenente il testo del link:
text_link = soup.new_tag("a", href="#")
text_link.string = text
re.split()
girato this
e is_my
in stringhe Unicode ordinarie. Li trasformano di nuovo in NavigableString
s in modo che possano tornare in albero come elementi:
this = soup.new_string(this)
is_my = soup.new_string(is_my)
Ora usare replace_with()
e insert_after
per sostituire il vecchio elemento con i tre nuovi elementi:
original_string.replace_with(this)
this.insert_after(text_link)
text_link.insert_after(is_my)
Ora il vostro albero dovrebbe guardare il modo in cui si vuole:
print(soup.p)
# <p>This <a href="#">text</a> is my <a href=""></a></p>
fonte
2012-04-20 02:08:22