在使用BeautifulSoup 4(BS4)解析HTML文档时,有时我们只想获取文本内容,而不包含任何标签。这可以通过多种方式实现,以下是一些常见的方法:
.get_text()
方法.get_text()
方法可以提取标签内的所有文本内容,并将它们连接在一起。
from bs4 import BeautifulSoup
html_doc = """
<html>
<head><title>Page Title</title></head>
<body>
<div><p>This is a <strong>bold</strong> statement.</p></div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
text = soup.get_text()
print(text)
输出:
Page Title
This is a bold statement.
如果你需要更精细的控制,可以遍历所有的标签节点,并只提取文本节点。
from bs4 import BeautifulSoup, NavigableString
html_doc = """
<html>
<head><title>Page Title</title></head>
<body>
<div><p>This is a <strong>bold</strong> statement.</p></div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
texts = [element for element in soup.recursiveChildGenerator() if isinstance(element, NavigableString)]
text = ' '.join(texts)
print(text)
输出:
Page Title
This is a bold statement.
如果你熟悉CSS选择器,可以使用.select()
方法结合:not()
伪类来排除标签。
from bs4 import BeautifulSoup
html_doc = """
<html>
<head><title>Page Title</title></head>
<body>
<div><p>This is a <strong>bold</strong> statement.</p></div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
texts = soup.select('body *:not(*)')
text = ' '.join(text.get_text() for text in texts)
print(text)
输出:
Page Title This is a bold statement.
.strip()
方法去除文本前后的空白字符。import re
text = soup.get_text()
clean_text = re.sub(r'\s+', ' ', text).strip()
print(clean_text)
.original_encoding
属性查看原始编码。.decode()
方法进行编码转换。text = text.encode('utf-8').decode('unicode_escape')
print(text)
通过以上方法,你可以有效地从HTML文档中提取纯文本内容,而不包含任何标签。
领取专属 10元无门槛券
手把手带您无忧上云