2014-04-28 41 views
0

我想在汤中创建允许标记的白名单,并删除剩下的(基本上将某些标记列入白名单)。像这样的事情,除了工作:BeautifulSoup逆选择

HTML:

<title>title</title> 
<p>p</p> 
<span>span</span> 
<script>script</script> 

的Python:

>>> p = soup.find_all('p') 
>>> span = soup.find_all('span') 
>>> title = soup.find_all('title') 
>>> whitelist = p + span + title 

>>> [el.extract() for el in soup.find_all() if el not in whitelist] 

这只是返回空白汤。这怎么能做到?

+2

如果是白名单,你确定要'如果el不在白名单中'而不是'如果el在白名单中? – shuttle87

+0

除了上面的注释之外,你是否已经完成了'findall',你不能通过'whitelist'循环吗?还是真的是黑名单? – beroe

回答

2

所有您需要做的就是提供一个可致电find_all来告诉它要保留哪些标签。

s = '''<title>title</title> 
<p>p</p> 
<span>span</span> 
<script>script</script>''' 

soup = BeautifulSoup(s) 

keepset = {'title','p','span'} 

soup.find_all(lambda tag: tag.name in keepset) 
Out[59]: [<title>title</title>, <p>p</p>, <span>span</span>] 
+0

我宁愿如果“脚本”的内容也被删除,这是可能的代码? – jumbopap

+0

哦,我明白你需要什么。 (完全不同)请参阅编辑。 – roippi