在Beautiful Soup中使用replaceWith时动态指定标签

0 投票
2 回答
597 浏览
提问于 2025-04-15 11:44

之前我问过一个问题,链接在这里,得到了一个BeautifulSoup的示例代码,经过一些本地的讨论,我决定使用这个代码。

>>> from BeautifulSoup import BeautifulStoneSoup
>>> html = """
... <config>
... <links>
... <link name="Link1" id="1">
...  <encapsulation>
...   <mode>ipsec</mode>
...  </encapsulation>
... </link>
... <link name="Link2" id="2">
...  <encapsulation>
...   <mode>udp</mode>
...  </encapsulation>
... </link>
... </links>
... </config>
... """
>>> soup = BeautifulStoneSoup(html)
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>ipsec</mode>
</encapsulation>
</link>
>>> soup.find('link', id=1).mode.contents[0].replaceWith('whatever')
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>whatever</mode>
</encapsulation>
</link>

这个代码唯一的问题是,它里面有一个固定的标签值(在这个例子中是“mode”),而我需要能够在指定的“link”标签内指定任何标签。简单的变量替换似乎不太管用。

2 个回答

0

不需要使用 getattr

sometag = 'mode'
result = soup.find('link', id=1).find(sometag)
print result
2

试试用 getattr(soup.find('link', id=1), sometag) 这个方法。在这里,你之前在 soup.find('link', id=1).mode 中使用的是一个固定的标签。其实,getattr 是 Python 中用来获取属性的一个方法,它可以根据你提供的字符串变量来获取属性的值!

撰写回答