2010-12-12 78 views
5

有没有人有一些示例代码说明如何使用Python的美丽汤去除所有的html标签,除了一些文本字符串?使用美丽的汤从字符串中去除html标签

我想要去除所有的JavaScript和HTML标签一切除了:

<a></a> 
<b></b> 
<i></i> 

而且还搞什么:

<a onclick=""></a> 

感谢您的帮助 - 我无法找到太多的互联网上这个目的。

回答

8
import BeautifulSoup 

doc = '''<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is <i>paragraph</i> <a onclick="">one</a>.<p id="secondpara" align="blah">This is <i>paragraph</i> <b>two</b>.</html>''' 
soup = BeautifulSoup.BeautifulSoup(doc) 

for tag in soup.recursiveChildGenerator(): 
    if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'): 
     print(tag) 

产生

<i>paragraph</i> 
<a onclick="">one</a> 
<i>paragraph</i> 
<b>two</b> 

如果你只是想文本内容,你可以改变print(tag)print(tag.string)

如果你想从a标签删除属性一样onclick="",你可以这样做:

if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'): 
    if tag.name=='a': 
     del tag['onclick'] 
    print(tag) 
+0

谢谢你 - 什么办法去除的onclick =“” – ensnare 2010-12-12 21:42:31

+0

加“tag.attrs = [ ]'打印前删除所有属性。如果你需要更多的控制,tag.attrs只是你需要的(名称,值)对列表。 – Spacedman 2010-12-12 21:57:27

+0

嘿,这真的很有帮助,非常感谢。 – ensnare 2010-12-12 22:54:27