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

Python解析HTML的常用方法及工具

 更新時(shí)間:2026年04月01日 09:43:17   作者:五步晦暝  
本文介紹了Python解析HTML的五種方法及工具,包括BeautifulSoup、lxml、PyQuery、html.parser和正則表達(dá)式,每種工具的特點(diǎn)、適用場(chǎng)景和示例代碼都有詳細(xì)介紹,并給出了方法對(duì)比、注意事項(xiàng)及性能優(yōu)化建議,需要的朋友可以參考下

以下是 Python 解析 HTML 的常用方法及工具,適用于數(shù)據(jù)提取、網(wǎng)頁抓取等場(chǎng)景:

1. 使用BeautifulSoup+ 解析器(推薦)

特點(diǎn):簡(jiǎn)單易用,支持靈活的節(jié)點(diǎn)遍歷和搜索,依賴第三方解析器(如 lxml、html.parser)。

安裝

pip install beautifulsoup4
# 推薦搭配 lxml 解析器(性能更好)
pip install lxml

示例

from bs4 import BeautifulSoup

html = """
<html>
  <body>
    <div id="content">Hello World</div>
    <a  rel="external nofollow"  rel="external nofollow" >Link</a>
  </body>
</html>
"""

soup = BeautifulSoup(html, 'lxml')  # 使用 lxml 解析器

# 提取元素
div = soup.find('div', id='content')
print(div.text)  # 輸出:Hello World

# 獲取鏈接
link = soup.find('a')['href']
print(link)  # 輸出:https://example.com

# 提取所有 <a> 標(biāo)簽
all_links = soup.find_all('a')
for a in all_links:
    print(a['href'], a.text)

2. 直接使用lxml

特點(diǎn):高性能,支持 XPath 和 CSS 選擇器,適合處理復(fù)雜 HTML。

安裝

pip install lxml

示例

from lxml import etree

html = """
<html>
  <body>
    <div class="item">Apple</div>
    <div class="item">Banana</div>
  </body>
</html>
"""

tree = etree.HTML(html)

# 通過 XPath 提取數(shù)據(jù)
items = tree.xpath('//div[@class="item"]/text()')
print(items)  # 輸出:['Apple', 'Banana']

# 使用 CSS 選擇器
divs = tree.cssselect('div.item')
for div in divs:
    print(div.text)

3. 使用PyQuery(類似 jQuery 語法)

特點(diǎn):語法類似 jQuery,適合熟悉前端開發(fā)的用戶。

安裝

pip install pyquery

示例

from pyquery import PyQuery as pq

html = """
<div class="container">
  <p class="text">Text 1</p>
  <p class="text">Text 2</p>
</div>
"""

doc = pq(html)

# 選擇元素
texts = doc('.text').items()
for item in texts:
    print(item.text())  # 輸出:Text 1, Text 2

# 獲取屬性
container = doc('.container').attr('class')
print(container)  # 輸出:container

4. 標(biāo)準(zhǔn)庫html.parser

特點(diǎn):無需安裝第三方庫,但功能和性能較弱。

示例

from html.parser import HTMLParser

class MyParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Start tag:", tag)
    
    def handle_data(self, data):
        print("Data:", data.strip())

html = "<html><body><h1>Title</h1></body></html>"
parser = MyParser()
parser.feed(html)

# 輸出:
# Start tag: html
# Start tag: body
# Start tag: h1
# Data: Title

5. 正則表達(dá)式(非推薦,慎用)

特點(diǎn):僅適用于簡(jiǎn)單場(chǎng)景,HTML 不規(guī)范時(shí)容易出錯(cuò)。

示例

import re

html = '<a  rel="external nofollow"  rel="external nofollow" >Link</a>'

# 提取鏈接和文本
match = re.search(r'<a href="(.+?)" rel="external nofollow" >(.+?)</a>', html)
if match:
    url = match.group(1)  # https://example.com
    text = match.group(2)  # Link

方法對(duì)比

工具優(yōu)點(diǎn)缺點(diǎn)
BeautifulSoup易用性強(qiáng),支持多種解析器依賴外部庫,性能一般
lxml高性能,支持 XPath/CSS 選擇器學(xué)習(xí)曲線稍高
PyQueryjQuery 風(fēng)格語法,直觀依賴 lxml,生態(tài)較小
html.parser無需安裝第三方庫功能有限,性能差
正則表達(dá)式簡(jiǎn)單快速難以處理復(fù)雜嵌套 HTML

注意事項(xiàng)

  1. 編碼問題:如果 HTML 包含中文,需確保解析器正確處理編碼(如指定 encoding='utf-8')。
  2. 性能優(yōu)化:處理大型 HTML 時(shí),優(yōu)先選擇 lxml。
  3. 動(dòng)態(tài) 網(wǎng)頁:若 HTML 由 JavaScript 動(dòng)態(tài)生成,需結(jié)合 Selenium 或 Playwright 抓取。

以上就是Python解析HTML的常用方法及工具的詳細(xì)內(nèi)容,更多關(guān)于Python解析HTML的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python繪圖模塊matplotlib示例詳解

    python繪圖模塊matplotlib示例詳解

    這篇文章主要介紹了python繪圖模塊matplotlib示例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python NumPy實(shí)現(xiàn)數(shù)組排序與過濾示例分析講解

    Python NumPy實(shí)現(xiàn)數(shù)組排序與過濾示例分析講解

    NumPy是Python的一種開源的數(shù)值計(jì)算擴(kuò)展,它支持大量的維度數(shù)組與矩陣運(yùn)算,這篇文章主要介紹了使用NumPy實(shí)現(xiàn)數(shù)組排序與過濾的方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05
  • Python入門教程5. 字典基本操作【定義、運(yùn)算、常用函數(shù)】

    Python入門教程5. 字典基本操作【定義、運(yùn)算、常用函數(shù)】

    這篇文章主要介紹了Python字典基本操作,包括字典的基本定義、運(yùn)算與常用函數(shù)相關(guān)使用技巧,代碼注釋中備有詳盡說明,便于理解,需要的朋友可以參考下
    2018-11-11
  • python 數(shù)據(jù)提取及拆分的實(shí)現(xiàn)代碼

    python 數(shù)據(jù)提取及拆分的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python 數(shù)據(jù)提取及拆分的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python實(shí)現(xiàn)繁體轉(zhuǎn)為簡(jiǎn)體的方法示例

    Python實(shí)現(xiàn)繁體轉(zhuǎn)為簡(jiǎn)體的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)繁體轉(zhuǎn)為簡(jiǎn)體的方法,涉及Python編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • Tensorflow中TFRecord生成與讀取的實(shí)現(xiàn)

    Tensorflow中TFRecord生成與讀取的實(shí)現(xiàn)

    TFRecord格式的文件存儲(chǔ)形式會(huì)很合理的幫我們存儲(chǔ)數(shù)據(jù),本文主要介紹了Tensorflow中TFRecord生成與讀取的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • parser.add_argument中的action使用

    parser.add_argument中的action使用

    這篇文章主要介紹了parser.add_argument中的action使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python枚舉類定義和使用方法

    Python枚舉類定義和使用方法

    這篇文章主要介紹了Python枚舉類定義和使用方法,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Python入門之布爾值詳解

    Python入門之布爾值詳解

    Python中布爾值(Booleans)表示以下兩個(gè)值之一:True或False。本文主要介紹布爾值(Booleans)的使用,和使用時(shí)需要注意的地方,需要的可以參考一下
    2023-02-02
  • Python進(jìn)階:生成器 懶人版本的迭代器詳解

    Python進(jìn)階:生成器 懶人版本的迭代器詳解

    這篇文章主要介紹了Python進(jìn)階:生成器 懶人版本的迭代器詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

宁蒗| 桂东县| 鄱阳县| 梓潼县| 深水埗区| 嘉峪关市| 通化市| 淮安市| 固镇县| 噶尔县| 古浪县| 乡城县| 英山县| 福泉市| 安福县| 孝义市| 绵竹市| 定襄县| 金堂县| 辽中县| 旬邑县| 浦东新区| 南乐县| 永修县| 桐庐县| 瑞安市| 社会| 常熟市| 尉氏县| 益阳市| 香格里拉县| 拜泉县| 临海市| 兖州市| 邵东县| 筠连县| 卓尼县| 合作市| 永修县| 穆棱市| 阳泉市|