replaceWith方法抽出一个页面元素并将其替换为一个不同的元素。
新元素可以为一个Tag(它可能包含一个剖析树)或者NavigableString。
如果你传一个字符串到replaceWith, 它会变为NavigableString。
这个Navigation成员会完全融入到这个剖析树中,就像它本来就存在一样。
下面是一个简单的例子:
The new element can be aTag (possibly with a
whole parse tree beneath it) or a NavigableString. If you pass a
plain old string into replaceWith, it gets turned into a NavigableString. The navigation members are changed as though the
document had been parsed that way in the first place.
Here's a simple example:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup("<b>Argh!</b>")
soup.find(text="Argh!").replaceWith("Hooray!")
print soup
# <b>Hooray!</b>
newText = soup.find(text="Hooray!")
newText.previous
# <b>Hooray!</b>
newText.previous.next
# u'Hooray!'
newText.parent
# <b>Hooray!</b>
soup.b.contents
# [u'Hooray!']
这里有一个更复杂点的,相互替换标签(tag)的例子:
from BeautifulSoup import BeautifulSoup, Tag
soup = BeautifulSoup("<b>Argh!<a>Foo</a></b><i>Blah!</i>")
tag = Tag(soup, "newTag", [("id", 1)])
tag.insert(0, "Hooray!")
soup.a.replaceWith(tag)
print soup
# <b>Argh!<newTag id="1">Hooray!</newTag></b><i>Blah!</i>
You can even rip out an element from one part of the document and
stick it in another part:
你也可以将一个元素抽出然后插入到文档的其他地方:
from BeautifulSoup import BeautifulSoup
text = "<html>There's <b>no</b> business like <b>show</b> business</html>"
soup = BeautifulSoup(text)
no, show = soup.findAll('b')
show.replaceWith(no)
print soup
# <html>There's business like <b>no</b> business</html>