Beautiful Soup 跳过评论和脚本标签
Posted
技术标签:
【中文标题】Beautiful Soup 跳过评论和脚本标签【英文标题】:Beautiful Soup skip comment and script tags 【发布时间】:2018-04-26 22:42:19 【问题描述】:我正在使用 Beautiful Soup 替换文本。
这是我的代码示例:
for x in soup.find('body').find_all(string=True):
fix_str = re.sub(...)
x.replace_with(fix_str)
如何跳过script
和comment
(<--! -->
) 标签?
如何确定x
中有哪些元素或标签?
【问题讨论】:
您在使用 BeautifulSoup 4 吗?参考***.com/questions/33138937/… 是的,我用的是 bs4,谢谢 【参考方案1】:如果您获取每个文本项的父项,则可以确定它是来自<script>
标记内还是来自 html 注释。如果没有,则可以使用您的re.sub()
函数使用该文本调用replace_with()
:
from bs4 import BeautifulSoup, Comment
html = """<html>
<head>
<!-- a comment -->
<title>A title</title>
<script>a script</script>
</head>
<body>
Some text 1
<!-- a comment -->
<!-- a comment -->
Some text 2
<!-- a comment -->
<script>a script</script>
Some text 2
</body>
</html>"""
soup = BeautifulSoup(html, "html.parser")
for text in soup.body.find_all(string=True):
if text.parent.name != 'script' and not isinstance(text, Comment):
text.replace_with('new text') # add re.sub() logic here
print soup
为您提供以下新 HTML:
<html>
<head>
<!-- a comment -->
<title>A title</title>
<script>a script</script>
</head>
<body>new text<!-- a comment -->new text<!-- a comment -->new text<!-- a comment -->new text<script>a script</script>new text</body>
</html>
【讨论】:
thx,但是我不能使用方法 replace_with 替换文本。我需要在除注释和脚本之外的所有地方替换文本,并返回包含此标签的完整 html 啊,我明白了。我已经更新了脚本以允许它修改文本。以上是关于Beautiful Soup 跳过评论和脚本标签的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Beautiful Soup 获取锚标签的 href?
如何使用 Beautiful Soup 从 <script> 中提取内容