BeautifulSoup 反向选择
我想在一个“汤”(这里指的是处理HTML的内容)中创建一个允许的标签白名单,只保留这些标签,其他的都去掉。就像这样,不过要能正常工作:
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 个回答
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>]