Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以用BeautifulSoup删除脚本标记吗?_Python_Html_Beautifulsoup - Fatal编程技术网

Python 我可以用BeautifulSoup删除脚本标记吗?

Python 我可以用BeautifulSoup删除脚本标记吗?,python,html,beautifulsoup,Python,Html,Beautifulsoup,是否可以使用BeautifulSoup从HTML中删除标记及其所有内容,还是必须使用正则表达式或其他方法?如中所述,您可以使用extract方法删除与搜索匹配的所有子树 >>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'html.parser') >&

是否可以使用BeautifulSoup从HTML中删除标记及其所有内容,还是必须使用正则表达式或其他方法?

如中所述,您可以使用extract方法删除与搜索匹配的所有子树

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'html.parser')
>>> for s in soup.select('script'):
>>>    s.extract()
>>> soup
baba
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]

为将来可能需要参考的人提供的最新答案: 正确答案是。 . 您可以使用不同的方法,但可以就地分解工作

用法示例:

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>'

清除碎屑非常有用,例如,等等。

链接要删除的附加标签的最佳方法是什么?现在,如果我一个接一个地重复这个命令,[s.extract for s in soup'script'],然后[s.extract for s in soup'iframe']等等,它就可以工作了,但是如果我像这样链接它们[s.extract for s in soup'iframe','script'],则不行。@Ali您必须使用[s.extract for s in soup['iframe',script]]注意,要使用多个标记,该参数必须是一个list@FábioDiniz我如何提取像‘ababab’这样的东西?是一样的吗?此操作后,soup对象变得无用,再也找不到任何标记。这已经过时,BeautifulSoup现在似乎将字符串格式化为html:baba

分解和提取的区别在于后者返回已删除的内容,而前者只是将其销毁。这是对这个问题更准确的回答,但其他方法确实有效。分解不会删除脚本标记的内容,它只删除标记。实际上,根据文档:Tag.Decompose从树中删除标记,然后完全销毁它及其内容:@Vangel抱歉,我想我忘了在我的评论中加上一句话:我相信我是在回应罗兰·皮拉卡斯的评论。考虑到我们可能有几个I标签,并希望删除所有I标签,我们可以类似于上面的@FábioDiniz extract示例[s.分解为汤中的s'I']。分解本身只删除第一次出现的标记。有没有方法删除带有特定类的标记?我不想删除所有具有相同名称的标记,只想删除一个具有特定类的标记块。您所要做的就是选择要调用extract的特定元素。[x.extract for x in a.select'span.className']