我想获取 HTML 页面上所有显示的文本,直到点击某个标签。例如,我想获取页面上所有显示的文本,直到点击 id 为“end_content”的标签为止。
有没有办法用 BeautifulSoup 来做到这一点? 这与 soup.get_text() 方法类似,只不过它会在遇到 id 为“end_content”的标签后停止获取文本。
可以使用 Beautiful Soup 来实现这一点,但是没有直接的方法可以在遇到特定标签后停止获取文本。
以下两种方法可以实现你的需求:
方法一: 使用
find_all()
和循环
-
使用
soup.find_all(text=True)
获取所有文本节点。 -
遍历文本节点,如果遇到
id
为end_content
的标签,则停止遍历。
from bs4 import BeautifulSoup
html = """
<html>
<body>
<p> 这是一些文本。</p>
<div id="end_content"> 停止获取文本</div>
<p> 这段文本不应该被获取。</p>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
text_content = ""
for element in soup.find_all(text=True):
if element.find_parent(id="end_content"):
break
text_content += element.strip() + " "
print(text_content)
方法二: 使用
extract()
方法
-
找到
id
为end_content
的标签。 -
使用
extract()
方法移除该标签及其后面的所有内容。 -
使用
soup.get_text()
获取剩余内容的文本。
from bs4 import BeautifulSoup
html = """
<html>
<body>
<p> 这是一些文本。</p>
<div id="end_content"> 停止获取文本</div>
<p> 这段文本不应该被获取。</p>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
end_tag = soup.find(id="end_content")
if end_tag:
# 移除 end_tag 及其后面的所有内容
end_tag.find_parent().extract()
text_content = soup.get_text(strip=True)
print(text_content)
两种方法都可以实现你的需求,选择哪种方法取决于你的具体情况和个人偏好.
标签:python,web-scraping,beautifulsoup From: 50578090