BeautifulSoup 反向选择

0 投票
1 回答
1118 浏览
提问于 2025-04-18 04:39

我想在一个“汤”(这里指的是处理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>]

撰写回答