2009-05-21 36 views
0

以前我问过this的问题,并找回了这个BeautifulSoup示例代码,经过一些本地咨询后,我决定与之合作。在美丽的汤中使用replaceWith时动态指定标签

>>> 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> 

与此唯一的问题是,例如具有硬编码的标记值(在这种情况下“模式”),并且我需要能够指定“链接”的标签中指定的任何标签。简单的变量替换似乎不起作用。

回答

2

尝试getattr(soup.find('link', id=1), sometag)你现在有一个硬编码标记soup.find('link', id=1).mode - getattr是Python的方式来获取一个属性,其名称保存为字符串变量,毕竟!

+0

谢谢。这样可行。 – 2009-05-21 05:17:21

0

无需使用getattr

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