是否可以使用BeautifulSoup从HTML中删除脚本标签及其所有内容,还是必须使用正则表达式或其他内容?
Answers:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> for s in soup.select('script'):
>>> s.extract()
>>> soup
baba
[s.extract() for s in soup(['iframe', 'script'])]
需要注意的是使用多个标签,必须将参数列表
'<script class="blah">a</script>baba<script id="blahhhh">b</script>'
?一样吗
<html><head></head><body><p>baba</p></body></html>
为可能需要将来参考的人员更新了答案:正确的答案是。
decompose()
您可以使用不同的方式,但是decompose
可以在原地工作。
用法示例:
soup = BeautifulSoup('<p>This is a slimy text and <i> I am slimer</i></p>')
soup.i.decompose()
print str(soup)
#prints '<p>This is a slimy text and</p>'
消除诸如“ script”,“ img”之类的碎屑等非常有用。
decompose
和之间的区别在于,extract
后者返回被移除的东西,而前者则将其销毁。因此,这是对该问题的更精确答案,但是其他方法也可以。
remove
内容OP回答正确的原因。通常用于清除不需要的标签和格式的HTML。
如(官方文档)中所述,您可以使用extract
方法删除与搜索匹配的所有子树。
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]