BeautifulSoup反向选择

时间:2014-04-28 20:57:16

标签: python 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]

这只是一个空白的汤。这怎么能起作用?

1 个答案:

答案 0 :(得分: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>]