之前我问了this问题并找回了这个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”标记内指定任何标记。简单的变量替换似乎不起作用。
答案 0 :(得分:2)
尝试getattr(soup.find('link', id=1), sometag)
,你现在在soup.find('link', id=1).mode
中有一个硬编码标签 - getattr
是获取一个名称作为字符串变量保存的属性的Python方法! / p>
答案 1 :(得分:0)
无需使用getattr
:
sometag = 'mode'
result = soup.find('link', id=1).find(sometag)
print result