2010-05-25 91 views
3

從HTML輸入這樣開始一個鏈接後追加:使用BeautifulSoup如何將標籤與BeautifulSoup

<p> 
<a href="http://www.foo.com">this if foo</a> 
<a href="http://www.bar.com">this if bar</a> 
</p> 

,我想在更改此HTML:

<p> 
<a href="http://www.foo.com">this if foo</a><b>OK</b> 
<a href="http://www.bar.com">this if bar</a><b>OK</b> 
</p> 

是否有可能使用BeautifulSoup來做到這一點?

喜歡的東西:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
for link_tag in soup.findAll('a'): 
    link_tag = link_tag + '<b>OK</b>' #This obviously does not work 
+0

是的,這是可能的。 BeautifulSoup有相當不錯的文檔: http://www.crummy.com/software/BeautifulSoup/documentation.html 發佈您的代碼,如果你有問題,我(和其他人)會幫助。 – Jack 2010-05-25 20:50:41

+2

實際上這個特殊的操作並不是從文檔中提取的。 – 2010-05-26 13:16:42

回答

5

你有正確的想法。只需匹配類型,並做replaceWith

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
for link_tag in soup.findAll('a'): 
    link_tag.replaceWith(link_tag.prettify() + '<b>OK</b>') 
print soup 

應該給你:

<p> 
<a href="http://www.foo.com"> 
this if foo 
</a> 
<b>OK</b> 
<a href="http://www.bar.com"> 
this if bar 
</a> 
<b>OK</b> 
</p> 
+9

請注意,對於任何人從Google等打這個答案,在BS4有一個insert_after()方法,例如:'b = soup.new_tag(「b」); b.string =「確定」; (b)'應該工作。 – contrebis 2012-09-17 20:03:39

7

您可以使用BeautifulSoup的insert在正確的地方添加的元素:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 

for link_tag in soup.findAll('a'): 
    link_tag_idx = link_tag.parent.contents.index(link_tag) 
    link_tag.parent.insert(link_tag_idx + 1, '<b>OK</b>') 

這適用於你給的例子,雖然我」米不知道這是唯一或最有效的方法。

+0

我認爲最後一行應該是'link_tag.parent.insert(link_tag_idx + 1,BeautifulSoup(「
」))',因爲「<" and ">」沒有在我的機器上正確轉換。 – sup 2013-10-29 22:58:41