我想使用漂亮的汤删除我的html文件中的所有评论。由于BS4生成每个comment as a special type of navigable string,我认为这段代码可行:
for comments in soup.find_all('comment'):
comments.decompose()
所以这不起作用....如何使用BS4查找所有评论?
答案 0 :(得分:12)
您可以将函数传递给find_all()以帮助它检查字符串是否为Comment。
例如我在html下面:
<body>
<!-- Branding and main navigation -->
<div class="Branding">The Science & Safety Behind Your Favorite Products</div>
<div class="l-branding">
<p>Just a brand</p>
</div>
<!-- test comment here -->
<div class="block_content">
<a href="https://www.google.com">Google</a>
</div>
</body>
代码:
from bs4 import BeautifulSoup as BS
from bs4 import Comment
....
soup = BS(html, 'html.parser')
comments = soup.find_all(string=lambda text: isinstance(text, Comment))
for c in comments:
print(c)
print("===========")
c.extract()
输出将是:
Branding and main navigation
============
test comment here
============
BTW,我认为find_all('Comment')
不起作用的原因是(来自BeautifulSoup文档):
传入名称的值,您将告诉Beautiful Soup只考虑具有特定名称的标签。 文本字符串将被忽略,名称不匹配的标记也将被忽略。
答案 1 :(得分:10)
我需要做的两件事:
首先,导入美丽的汤
from bs4 import BeautifulSoup, Comment
其次,这是提取评论的代码
for comments in soup.findAll(text=lambda text:isinstance(text, Comment)):
comments.extract()