最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python去除HTML標(biāo)簽獲取純文本的四種方法

 更新時間:2026年05月14日 08:15:48   作者:detayun  
這篇文章主要為大家詳細(xì)介紹了Python去除HTML標(biāo)簽獲取純文本的四種方法,主要是BeautifulSoup,正則表達(dá)式,html.parser和lxml,感興趣的小伙伴可以了解下

本文介紹了四種從HTML提取純文本的方法:

  • 使用BeautifulSoup(推薦),簡單易用且容錯強(qiáng)
  • 正則表達(dá)式適合簡單場景,速度快但可能出錯
  • html.parser是標(biāo)準(zhǔn)庫方案,無需安裝但代碼較多
  • lxml性能最佳但需安裝C庫

具體實現(xiàn)方法如下:

方法1:使用 BeautifulSoup(推薦)

from bs4 import BeautifulSoup

html = "<p>Hello <b>World</b>! <a href='#'>Click</a></p>"
soup = BeautifulSoup(html, 'html.parser')
text = soup.get_text()
print(text)  # Hello World! Click

方法2:使用正則表達(dá)式(簡單場景)

import re

html = "<p>Hello <b>World</b>! <a href='#'>Click</a></p>"
text = re.sub(r'<[^>]+>', '', html)
print(text)  # Hello World! Click

方法3:使用 html.parser(標(biāo)準(zhǔn)庫)

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.text = []
    
    def handle_data(self, data):
        self.text.append(data)
    
    def get_text(self):
        return ''.join(self.text)

html = "<p>Hello <b>World</b>!</p>"
parser = MyHTMLParser()
parser.feed(html)
print(parser.get_text())  # Hello World!

方法4:使用 lxml(性能最好)

from lxml import html

html_str = "<p>Hello <b>World</b>!</p>"
tree = html.fromstring(html_str)
text = tree.text_content()
print(text)  # Hello World!

方法對比

方法優(yōu)點缺點
BeautifulSoup簡單易用,容錯強(qiáng)需要安裝第三方庫
正則無需安裝,速度快復(fù)雜HTML可能出錯
html.parser標(biāo)準(zhǔn)庫,無需安裝代碼稍多
lxml速度最快,功能強(qiáng)大需要安裝C庫

推薦:一般用 BeautifulSoup,簡單場景用正則

pip install beautifulsoup4 lxml

知識擴(kuò)展

在 Python 中從 HTML 提取純文本,確實有不同的思路和工具。簡單來說,首選是用 BeautifulSoup 搭配 lxml 解析器——它在功能全面性、開發(fā)效率和性能之間取得了最佳平衡,足以覆蓋 99% 的應(yīng)用場景。

這里總結(jié)了幾種主流方法,你可以先快速了解它們的核心優(yōu)劣:

方法核心理念優(yōu)點缺點適用場景
BeautifulSoup將HTML解析為樹結(jié)構(gòu),遍歷提取文本節(jié)點API簡單易用,容錯性強(qiáng),能優(yōu)雅處理不規(guī)范HTML純Python實現(xiàn),處理超大型文件時性能相對較弱絕大多數(shù)應(yīng)用,尤其是網(wǎng)頁內(nèi)容多樣、結(jié)構(gòu)不確定的場景
lxml基于C語言的高性能庫,直接操作DOM樹性能極高,內(nèi)存占用低API相對底層,語法不如BeautifulSoup直觀追求極致性能,如大規(guī)模、高頻次的爬蟲任務(wù)
html2text將HTML轉(zhuǎn)為Markdown格式,兼顧純文本能較好地保留Markdown的段落、鏈接等語義結(jié)構(gòu)重點是將HTML轉(zhuǎn)為Markdown,而非最原始的純文本需要保留一定文本結(jié)構(gòu)(如層級列表)的應(yīng)用
正則表達(dá)式 (Regex)基于規(guī)則的模式匹配,直接操作字符流速度最快,尤其在處理簡單片段時無法理解HTML結(jié)構(gòu),易出錯,難以處理嵌套和復(fù)雜情況僅限一次性、結(jié)構(gòu)極其固定的簡單腳本,絕不應(yīng)用于生產(chǎn)環(huán)境

通用首選:BeautifulSoup

這是最推薦新手和絕大多數(shù)應(yīng)用場景的首選方法。它的核心思想是將HTML解析成一棵“標(biāo)簽樹”,然后提供像 find()、find_all() 等非常直觀的方法來遍歷和提取內(nèi)容。

from bs4 import BeautifulSoup
html_content = """
<div class="article">
    <h1>這是標(biāo)題</h1>
    <p>這是正文內(nèi)容,包含 <strong>加粗文字</strong>。</p>
    <a  rel="external nofollow" >這是一個鏈接</a>
</div>
"""
# 使用 lxml 作為解析器以獲得更佳性能
soup = BeautifulSoup(html_content, 'lxml')
# 核心方法:.get_text() 提取所有文本,strip=True 用于去除首尾空白
text = soup.get_text(strip=True)
print(text)
# 輸出:這是標(biāo)題這是正文內(nèi)容,包含加粗文字。這是一個鏈接
  • get_text() 方法:這是最核心的方法,它會遞歸地遍歷整個解析樹,將所有文本內(nèi)容拼接成一個字符串。strip=True 參數(shù)可以刪除文本片段首尾的多余空白。
  • 靈活定位:如果只想提取特定部分的文本,可以先用 find() 等方法精確定位元素,再調(diào)用 get_text()
# 只提取 &lt;div&gt; 標(biāo)簽內(nèi)的內(nèi)容
div_tag = soup.find('div', class_='article')
content = div_tag.get_text(strip=True)

追求性能:lxml

如果你的任務(wù)是海量、高頻的網(wǎng)頁解析,性能是關(guān)鍵考量,那么 lxml 是你的不二之選。

  • 性能優(yōu)勢:其底層由C語言實現(xiàn),在處理大型HTML文檔時比純Python的 BeautifulSoup 快得多。
  • XPath支持lxml 的強(qiáng)大之處在于對 XPath 的完整支持。XPath是一種專門用于在XML/HTML文檔中查找信息的路徑語言,可以非常精準(zhǔn)地定位到任何節(jié)點。
from lxml import html
html_content = """
<div class="product">
    <h2>產(chǎn)品名稱</h2>
    <p class="price">價格:$99.99</p>
    <p>產(chǎn)品描述...</p>
</div>
"""
tree = html.fromstring(html_content)
# 使用 XPath 定位并提取文本
# 'text()' 是獲取元素自身文本的XPath函數(shù)
title = tree.xpath('//div[@class="product"]/h2/text()')[0]
price_text = tree.xpath('//p[@class="price"]/text()')[0]
print(title)        # 輸出:產(chǎn)品名稱
print(price_text)   # 輸出:價格:$99.99

強(qiáng)強(qiáng)聯(lián)合:你完全可以將 lxml 用作 BeautifulSoup 的解析器,從而實現(xiàn)“BeautifulSoup的易用性”加上“lxml的高性能”。

soup = BeautifulSoup(html_content, 'lxml')

快速上手其他方案

正則表達(dá)式 (Regex)

正則表達(dá)式適用于無需安裝任何第三方庫、且HTML結(jié)構(gòu)極其簡單的快速腳本場景。

import re
html_content = '<div>文本內(nèi)容</div><span>更多文本</span>'
# re.sub將匹配到的所有標(biāo)簽替換為空字符串
pure_text = re.sub(r'<[^>]+>', '', html_content)
print(pure_text) # 輸出:文本內(nèi)容更多文本

警告:在復(fù)雜的真實網(wǎng)頁中,HTML可能出現(xiàn)未閉合、自閉合或復(fù)雜的嵌套標(biāo)簽,此時正則表達(dá)式極易失效或出錯。

html2text

這是一個能保留文本結(jié)構(gòu)的特殊工具。它將HTML轉(zhuǎn)換為語義化的Markdown格式,適合需要保留標(biāo)題層級、鏈接標(biāo)識和列表結(jié)構(gòu)的場景。

import html2text
converter = html2text.HTML2Text()
# 可選配置,例如忽略鏈接
converter.ignore_links = True
html = '<h1>大標(biāo)題</h1><p>這是一個包含<a href="#" rel="external nofollow" >鏈接</a>的段落。</p>'
markdown_text = converter.handle(html)
print(markdown_text)
# 輸出:
# 大標(biāo)題
# ===
# 這是一個包含鏈接的段落。

到此這篇關(guān)于Python去除HTML標(biāo)簽獲取純文本的四種方法的文章就介紹到這了,更多相關(guān)Python提取HTML純文本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的@property像訪問屬性一樣調(diào)用方法示例

    Python中的@property像訪問屬性一樣調(diào)用方法示例

    property是Python中的一個內(nèi)置函數(shù),用于在類中創(chuàng)建和管理屬性的getter和setter方法,這篇文章主要介紹了Python中@property像訪問屬性一樣調(diào)用方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-05-05
  • Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù)

    Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù)

    這篇文章主要介紹了Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù),在Python編程中,可以使用已經(jīng)定義好的函數(shù),也可以自定義函數(shù)實現(xiàn)某些特殊的功能,更多相關(guān)資料,請需要的人參考下面文章內(nèi)容
    2022-02-02
  • Python簡單實現(xiàn)子網(wǎng)掩碼轉(zhuǎn)換的方法

    Python簡單實現(xiàn)子網(wǎng)掩碼轉(zhuǎn)換的方法

    這篇文章主要介紹了Python簡單實現(xiàn)子網(wǎng)掩碼轉(zhuǎn)換的方法,涉及Python字符串相關(guān)操作技巧,需要的朋友可以參考下
    2016-04-04
  • Python畫圖實現(xiàn)同一結(jié)點多個柱狀圖的示例

    Python畫圖實現(xiàn)同一結(jié)點多個柱狀圖的示例

    今天小編就為大家分享一篇Python畫圖實現(xiàn)同一結(jié)點多個柱狀圖的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • pandas 相關(guān)性和正態(tài)性分析的實踐

    pandas 相關(guān)性和正態(tài)性分析的實踐

    當(dāng)我們談?wù)撜龖B(tài)性(Normality)和相關(guān)性(Correlation)時,我們實際上在嘗試?yán)斫鈹?shù)據(jù)的分布模式和不同變量之間的關(guān)系,本文就來介紹一下pandas 相關(guān)性和正態(tài)性的實踐,感興趣的可以了解一下
    2024-07-07
  • 十個Python練手的實戰(zhàn)項目,學(xué)會這些Python就基本沒問題了(推薦)

    十個Python練手的實戰(zhàn)項目,學(xué)會這些Python就基本沒問題了(推薦)

    這篇文章主要介紹了Python實戰(zhàn)項目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 一文詳解python如何將編寫的模塊打包上傳至pypi

    一文詳解python如何將編寫的模塊打包上傳至pypi

    我們此前花了很大功夫?qū)懥艘粋€極其簡單的web框架myWeb,想要給別人用的時候,需要讓別人拷貝源代碼才行,這太low了,所以本篇文章會介紹如何將自己寫的模塊打包上傳至pypi,以便讓需要的人通過pip進(jìn)行安裝,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Numpy中np.random.rand()和np.random.randn() 用法和區(qū)別詳解

    Numpy中np.random.rand()和np.random.randn() 用法和區(qū)別詳解

    這篇文章主要介紹了Numpy中np.random.rand()和np.random.randn() 用法和區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python 時間處理datetime實例

    Python 時間處理datetime實例

    Python Cook書中有很多章節(jié)都是針對某個庫的使用進(jìn)行介紹或是通過組合多個函數(shù)實現(xiàn)一些復(fù)雜的功能。我這里直接跳過了上一章節(jié)中對于文件處理的一些章節(jié),直接進(jìn)入對時間操作的章節(jié)。
    2008-09-09
  • tensorflow2.0保存和恢復(fù)模型3種方法

    tensorflow2.0保存和恢復(fù)模型3種方法

    今天小編就為大家分享一篇tensorflow2.0保存和恢復(fù)模型3種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論

英吉沙县| 杭锦旗| 延吉市| 廊坊市| 曲松县| 平定县| 万源市| 龙海市| 鄂托克前旗| 阿城市| 延寿县| 新营市| 阳泉市| 娄底市| 博罗县| 手机| 广宗县| 阳泉市| 海淀区| 郧西县| 新和县| 白水县| 扶沟县| 九台市| 长顺县| 福清市| 临沂市| 聊城市| 宁陵县| 山阳县| 深泽县| 温泉县| 东乌珠穆沁旗| 陆良县| 淳化县| 荔波县| 东丽区| 滦南县| 迁西县| 中宁县| 台中县|