在Beautiful Soup中使用replaceWith时动态指定标签
之前我问过一个问题,链接在这里这,得到了一个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 中用来获取属性的一个方法,它可以根据你提供的字符串变量来获取属性的值!