Python HTML模塊詳解:從基礎到實戰

一、模塊體系全景圖

Python生態中處理HTML的工具可分為三大層級:

  1. 標準庫基礎層:html模塊 + html.parser
  2. 第三方增強層:BeautifulSoup(搭配解析器)
  3. 專業級工具層:lxml + requests-html

二、標準庫核心模塊詳解

1. html模塊:HTML安全衛士

核心功能三板斧

# 實體編碼(防XSS攻擊)
user_input = "<script>alert('黑客攻擊')</script>"
safe_content = html.escape(user_input)  # 轉義為&lt;script&gt;...# 屬性轉義(安全生成HTML)
class HTMLGenerator:@staticmethoddef create_tag(tag, content, **attrs):safe_attrs = {k: html.escape(str(v)) for k,v in attrs.items()}return f"<{tag} {attrs}>{html.escape(content)}</{tag}>"# 實體解碼(處理爬取數據)
raw_data = "&lt;div&gt;測試內容&lt;/div&gt;"
decoded_data = html.unescape(raw_data)  # 還原為<div>測試內容</div>

2. html.parser:輕量級解析器

事件驅動解析模型

from html.parser import HTMLParserclass LinkExtractor(HTMLParser):def __init__(self):super().__init__()self.links = []def handle_starttag(self, tag, attrs):if tag == 'a':for attr in attrs:if attr[0] == 'href':self.links.append(attr[1])# 使用示例
parser = LinkExtractor()
parser.feed('<a href="/home">首頁</a><a href="/about">關于</a>')
print(parser.links)  # 輸出:['/home', '/about']

三、第三方庫對比與選型指南

工具適用場景性能安裝依賴
html.parser簡單靜態頁面解析無需安裝
BeautifulSoup復雜HTML結構提取★★★pip install bs4
lxml大規模數據處理★★★★pip install lxml
requests-html動態頁面渲染(含JS執行)★★★pip install requests-html

動態頁面處理方案對比

# requests-html方案(推薦)
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://dynamic.site')
r.html.render()  # 自動執行JS# Selenium方案(復雜場景)
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://complex.site')
driver.find_element(By.ID, 'content').text

四、實戰案例:豆瓣電影數據抓取

標準庫實現方案

from html.parser import HTMLParser
import urllib.requestclass DoubanParser(HTMLParser):def __init__(self):super().__init__()self.movies = []self.in_title = Falsedef handle_starttag(self, tag, attrs):if tag == 'div' and ('class', 'info') in attrs:self.in_title = Truedef handle_data(self, data):if self.in_title:self.movies.append(data.strip())self.in_title = False# 執行抓取
url = 'https://movie.douban.com/top250'
with urllib.request.urlopen(url) as response:html = response.read().decode('utf-8')parser = DoubanParser()
parser.feed(html)
print(f"獲取到{len(parser.movies)}部電影")

BeautifulSoup優化版

from bs4 import BeautifulSoup
import requestsdef scrape_douban():soup = BeautifulSoup(requests.get(url).text, 'lxml')movies = [{'title': item.find('span', class_='title').text,'rating': item.find('span', class_='rating_num').text}for item in soup.find_all('div', class_='item')]return movies

五、性能優化與安全實踐

1. 編碼規范建議

# 統一轉義策略
def safe_html(content):return html.escape(content, quote=True)  # 轉義所有特殊字符# 屬性值處理(防注入)
def safe_attr(value):return html.escape(str(value), quote=False)  # 不轉義引號

2. 異常處理機制

try:parser.feed(html_content)
except HTMLParseError as e:logging.error(f"HTML解析失敗: {str(e)}")# 降級處理方案fallback_parser = HTMLParser()fallback_parser.feed(html_content)

3. 動態內容處理流程

發起請求
是否動態頁面?
執行JS渲染
直接解析
提取DOM結構
數據清洗

六、版本更新與兼容性

  • Python 3.12+:html.parser性能提升30%
  • BeautifulSoup 4.12:新增CSS選擇器支持
  • lxml 4.9.3:修復XPath內存泄漏問題

七、學習資源推薦

  1. 官方文檔
  2. 動態網頁抓取實戰
  3. 反爬蟲對抗指南

通過本文的系統學習,您將掌握從基礎HTML處理到復雜動態頁面解析的完整技能鏈。實際開發中建議根據具體場景選擇工具,并嚴格遵守目標網站的robots.txt協議。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90967.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch常用Tensor形狀變換函數詳解

PyTorch常用Tensor形狀變換函數詳解 在PyTorch中&#xff0c;對張量&#xff08;Tensor&#xff09;進行形狀變換是深度學習模型構建中不可或缺的一環。無論是為了匹配網絡層的輸入要求&#xff0c;還是為了進行數據預處理和維度調整&#xff0c;都需要靈活運用各種形狀變換函數…

自主智能Agent如何重塑工作流自動化:技術、經濟與未來展望

自主智能Agent的崛起與工作流自動化的范式革命2025年7月&#xff0c;當OpenAI向付費用戶推出具備網頁瀏覽和代碼執行能力的ChatGPT Agent時&#xff0c;工作流自動化領域迎來了一場靜默但徹底的革命。這款不再滿足于簡單問答的智能體&#xff0c;在一個安全的虛擬計算機環境中運…

技術架構、行業應用、工具鏈整合、挑戰應對及未來趨勢五大模塊,引用多個權威來源數據與開源項目實現細節。

以下是一份關于AI技術落地的實戰經驗總結報告&#xff0c;結合代碼示例、可視化圖表與行業案例&#xff0c;內容分為技術架構、行業應用、工具鏈整合、挑戰應對及未來趨勢五大模塊&#xff0c;引用多個權威來源數據與開源項目實現細節。AI技術落地實戰指南&#xff1a;從架構設…

第 9 篇:神經網絡初探——當AI擁有了“大腦”,世界從此不同

《人工智能AI之機器學習基石》系列⑨ 專欄核心理念: 用通俗語言講清楚機器學習的核心原理,強調“洞察 + 技術理解 + 應用連接”,構建一個完整的、富有啟發性的知識體系。

音頻焦點 Android Audio Focus 進階

舊焦點處理 示例調用鏈: requestAudioFocus() → propagateFocusLossFromGain_syncAf() → handleFocusLossFromGain()。 系統事件(如來電)→ 強制焦點變化 → handleFocusLossFromGain()。 函數 propagateFocusLossFromGain_syncAf 焦點持有者發生的焦點丟失通知 主要功能…

MFC UI對話框

文章目錄對話框模態對話框創建銷毀關閉CDialog::OnCancel()EndDialog()CDialog::DestroyWindow()非模態對話框創建銷毀關閉delete this對話框 模態對話框 ??阻塞父窗口??&#xff0c;強制用戶先處理對話框。關閉前父窗口無法響應事件。 創建 推薦&#xff1a;非指針方式…

RabbitMQ--@RabbitListener及@RabbitHandle

兩者區別 在 Spring AMQP 中&#xff0c;RabbitListener 和 RabbitHandler 是處理 RabbitMQ 消息的核心注解&#xff0c;但職責和使用場景完全不同。以下從 定義、區別、場景、示例 逐層解析&#xff1a;一、核心定義1. RabbitListener作用&#xff1a;標記 方法或類 為 Ra…

【基于CKF的IMM】MATLAB例程,CV和CT兩個模型下的IMM,二維,濾波使用CKF(容積卡爾曼濾波),附下載鏈接

本程序實現了基于交互多模型&#xff08;IMM&#xff09;容積卡爾曼濾波&#xff08;CKF&#xff09;的多模型融合定位方法&#xff0c;并與純CV?CKFCV-CKFCV?CKF&#xff08;勻速模型&#xff09;和CT?CKFCT-CKFCT?CKF&#xff08;勻角速度轉彎模型&#xff09;方法對比。…

AI資訊日報 - 2025年07月28日

AI資訊日報 | 2025年07月28日 周一 今日核心要點 精華提煉 技術突破 ? 騰訊混元&#xff1a;開源發布、3D技術 ? 書生Intern&#xff1a;開源發布、多模態 企業動態 ? AI工具集&#xff1a;協同創作、視頻生成 數據概覽分類數量重點關注技術突破2 條開源發布、3D技術企業動態…

大語言模型 LLM 通過 Excel 知識庫 增強日志分析,根因分析能力的技術方案(1):總體介紹

文章大綱 1. 核心目標 2. 系統總體架構 3. Google Cloud 端到端方案(含無 RAG & RAG 雙模式) 3.1 無 RAG:Function-Calling 查表模式 3.2 RAG:托管式向量檢索 4. 開源輕量級方案 5. 數字孿生聯合驗證(實驗性) 6. 知識圖譜增強(Neo4j) 7. 監控與持續優化(CometLLM)…

Deepseek + browser-use 輕松實現瀏覽器自動化

在數字化時代&#xff0c;瀏覽器應用廣泛&#xff0c;瀏覽器自動化可大幅提升效率。Deepseek 是強大的智能語言模型&#xff0c;能精準解析復雜指令&#xff0c;browser - use 是專注瀏覽器操作的工具&#xff0c;提供豐富 API 接口&#xff0c;支持主流瀏覽器的各類自動化操作…

開疆智能ModbusTCP轉Profient網關連接西門子PLC與川崎機器人配置案例

本案例是西門子PLC與川崎機器人通過Profient轉ModbusTCP網關進行通訊轉換的配置案例&#xff0c;西門子作為profinet主站&#xff0c;機器人作為ModbusTCP服務器。配置過程&#xff1a;機器人配置川崎機器人控制器提供了RS232、以太網的通信接口&#xff0c;同時也可通過加裝選…

Docker多主機網絡連接:實現跨主機通信

Docker 是一種流行的容器化平臺&#xff0c;它可以幫助開發人員更方便地構建、發布和管理應用程序。在 Docker 中&#xff0c;容器是獨立運行的應用程序包裝&#xff0c;包含了運行所需的所有文件、庫和環境變量。Docker 提供了多種網絡連接方式&#xff0c;使得容器之間可以進…

OSPF筆記

一、OSPF基礎1、技術背景&#xff08;RIP中存在的問題&#xff09;RIP中存在最大跳數為15的限制&#xff0c;不能適應大規模組網周期性發送全部路由信息&#xff0c;占用大量的帶寬資源路由收斂速度慢以跳數作為度量值存在路由環路可能性每隔30秒更新2、OSPF協議特點沒有跳數限…

kotlin基礎【3】

Kotlin Playground: Edit, Run, Share Kotlin Code Online 資料&#xff1a;kotlin實戰 第一章 data class Person(val name: String,val age:Int?null)//允許接受以age為空&#xff0c;當為空將它賦值為null,如果不這么寫直接寫age:Int?是否可以fun main(args:Array<St…

Java-數構二叉樹

1.樹 1.1概念 樹是一種非線性的數據結構&#xff0c;它是由n個有限節點組成一個具有層次關系。這種結構有以下特點&#xff1a; 一個特殊的結點&#xff0c;稱為根節點&#xff0c;根節點沒有前驅節點除根節點以外&#xff0c;其余節點分成M個互不相交的集合。每個集合又是一…

編程中水合的理解

在編程中&#xff0c;水合&#xff08;Hydration&#xff09; 是一個常見概念&#xff0c;尤其在 前端開發 和 服務端渲染&#xff08;SSR&#xff09; 場景中頻繁出現。它的核心含義是&#xff1a;將靜態內容“激活”為交互式動態內容。1. 水合的本質簡單理解&#xff1a;水合…

使用ffmpeg轉碼h265后mac默認播放器不支持問題

由于mac自帶錄屏是mov并且文件特別大&#xff0c;我使用ffmpeg轉碼視頻為h265使用如下命令ffmpeg_command [ffmpeg_path,"-i", input_path,"-c:v", "libx265","-preset", "veryslow","-map_metadata", "0&q…

支持MySQL、PostgreSQL和Redis集群部署,1Panel開源面板v2.0.5版本發布

2025年7月24日&#xff0c;現代化、開源的Linux服務器運維管理面板1Panel正式發布v2.0.5版本。在這一版本中&#xff0c;1Panel新增數據庫集群部署、郵件告警和主從節點靈活切換三項功能&#xff0c;聚焦為企業級運維場景提供更優使用體驗。 1Panel v2.0.5版本是1Panel開源面板…

GaussDB 數據庫架構師修煉(九) 邏輯備份實操

1 邏輯備份定義 邏輯備份是指與業務有關的對象進行備份&#xff0c;這個對象包括表、表的數據、視圖、索引、過程、函數等等。GaussDB支持邏輯備份的工具為gs_dump、gs_restore&#xff0c;以下舉例說明。 2 創建舉例數據 以下創建testdb庫&#xff0c;創建test1模式&#xf…