我想在汤中创建允许标签的白名单,并删除其余的(基本上将某些标签列入白名单)。这样的事情,除了工作:
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]
这只是一个空白的汤。这怎么能起作用?
答案 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>]