0

之前我问过这个问题,得到了这个 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>

唯一的问题是该示例具有硬编码的标记值(在本例中为“模式”),并且我需要能够在指定的“链接”标记中指定任何标记。简单的变量替换似乎不起作用。

4

2 回答 2

2

试试getattr(soup.find('link', id=1), sometag)你现在有一个硬编码标签的地方soup.find('link', id=1).mode——getattr毕竟,这是获取名称作为字符串变量保存的属性的 Python 方法!

于 2009-05-21T05:09:18.820 回答
0

无需使用getattr

sometag = 'mode'
result = soup.find('link', id=1).find(sometag)
print result
于 2009-05-21T15:28:31.857 回答