2009-05-21 66 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