目錄
用Python解析HTML頁面
HTML 頁面的結構
XPath 解析
CSS 选择器解析
正则表达式解析
首頁 後端開發 Python教學 Python爬蟲之怎麼解析HTML頁面

Python爬蟲之怎麼解析HTML頁面

May 30, 2023 pm 09:41 PM
python html

用Python解析HTML頁面

我們通常需要解析網路爬取的頁面,以取得我們需要的資料。透過分析 HTML 標籤的組合結構,我們可以提取出網頁中所包含的有用資訊。在 Python 中,有三種常見的 HTML 解析方式:正規表示式解析、XPath 解析和 CSS 選擇器解析。

HTML 頁面的結構

了解 HTML 頁面的基本結構是在講解 HTML 解析方式之前的先決條件。當我們在瀏覽器中開啟一個網站,並透過滑鼠右鍵選單選擇「顯示網頁原始碼」選單項目時,就可以看到網頁對應的 HTML 程式碼。 HTML 程式碼通常由標籤、屬性和文字組成。標籤承載頁面顯示的內容,屬性補充標籤訊息,而文字則是標籤所顯示的內容。下面是一個簡單的HTML 頁面程式碼結構範例:

<!DOCTYPE html>
<html>
    <head>
        <!-- head 标签中的内容不会在浏览器窗口中显示 -->
        <title>这是页面标题</title>
    </head>
    <body>
        <!-- body 标签中的内容会在浏览器窗口中显示 -->
        <h2>这是一级标题</h2>
        <p>这是一段文本</p>
    </body>
</html>
登入後複製

在這個HTML 頁面程式碼範例中,<!DOCTYPE html>是文件類型聲明,<html> 標籤是整個頁面的根標籤,<head><body><html>標籤的子標籤,放在<body>標籤下的內容會顯示在瀏覽器視窗中,這部分內容是網頁的主體;放在<head>標籤下的內容不會在瀏覽器視窗中顯示,但是卻包含了頁面重要的元訊息,通常稱之為網頁的頭部。 HTML 頁面大致的程式碼結構如下所示:

<!DOCTYPE html>
<html>
    <head>
        <!-- 页面的元信息,如字符编码、标题、关键字、媒体查询等 -->
    </head>
    <body>
        <!-- 页面的主体,显示在浏览器窗口中的内容 -->
    </body>
</html>
登入後複製

標籤、層疊樣式表(CSS)和 JavaScript 是構成 HTML 頁面的三個基本組成部分。標籤用來承載頁面要顯示的內容,CSS 負責頁面的渲染,而 JavaScript 用來控制頁面的互動式行為。要實現HTML 頁面的解析,可以使用XPath 的語法,它原本是XML 的一種查詢語法,可以根據HTML 標籤的層次結構提取標籤中的內容或標籤屬性;此外,也可以使用CSS 選擇器來定位頁面元素,就跟用CSS 渲染頁面元素是同樣的道理。

XPath 解析

XPath 是在XML(eXtensible Markup Language)文件中尋找資訊的一種語法,XML 跟HTML 類似也是一種用標籤承載資料的標籤語言,不同之處在於XML 的標籤是可擴展的,可以自訂的,而且XML 對語法有更嚴格的要求。 XPath 使用路徑表達式來選取 XML 文件中的節點或節點集,這裡所說的節點包括元素、屬性、文字、命名空間、處理指令、註解、根節點等。

XPath路徑表達式類似檔案路徑語法,可使用「/」和「//」選取節點。選取根節點時,可使用單斜線"/";選取任一位置的節點時,可使用雙斜線"//」。例如,「/bookstore/book」表示選取根節點 bookstore 下的所有 book 子節點,「//title」表示選取任意位置的 title 節點。

XPath 也可以使用謂詞(Predicate)來過濾節點。方括號中的巢狀表達式可以是數字、比較運算子或函數調用,作為謂語。例如,「/bookstore/book[1]」表示選取 bookstore 的第一個子節點 book,「//book[@lang]」表示選取所有具有 lang 屬性的 book 節點。

XPath 的函數包括字串、數學、邏輯、節點、序列等函數,這些函數可以用於選取節點、計算值、轉換資料類型等操作。例如,「string-length(string)」函數可以傳回字串的長度,「count(node-set)」函數可以傳回節點集中節點的個數。

下面我們透過一個例子來說明如何使用 XPath 對頁面進行解析。假設我們有以下的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>
    <book>
      <title lang="zh">Learning XML</title>
      <price>39.95</price>
    </book>
</bookstore>
登入後複製

對於這個 XML 文件,我們可以用如下所示的 XPath 語法取得文件中的節點。

//book//@lang/bookstore/book[1]
路徑表達式#結果
/bookstore
#選取根元素bookstore。注意:如果路徑起始於正斜線( / ),則此路徑總是代表到某元素的絕對路徑!
選取所有 book 子元素,而不管它們在文件中的位置。
選取名為 lang 的所有屬性。
選取 bookstore 的第一個子節點 book。 ############

CSS 选择器解析

通过HTML标签的属性和关系来定位元素的方式被称为CSS选择器。根据 HTML 标签的层级结构、类名、id 等属性能够确定元素的位置。在 Python 中,我们可以使用 BeautifulSoup 库来进行 CSS 选择器解析。

我们接下来会举一个例子,讲解如何运用 CSS 选择器来分析页面。假设我们有如下的 HTML 代码:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>这是页面标题</title>
</head>
<body>
	<div class="content">
		<h2>这是一级标题</h2>
		<p>这是一段文本</p>
	</div>
	<div class="footer">
		<p>版权所有 © 2021</p>
	</div>
</body>
</html>
登入後複製
登入後複製

我们可以使用如下所示的 CSS 选择器语法来选取页面元素。

选择器结果
div.content选取 class 为 content 的 div 元素。
h2选取所有的 h2 元素。
div.footer p选取 class 为 footer 的 div 元素下的所有 p 元素。
[href]选取所有具有 href 属性的元素。

正则表达式解析

用正则表达式可以解析 HTML 页面,从而实现文本的匹配、查找和替换。使用 re 模块可以进行 Python 的正则表达式解析。

下面我们通过一个例子来说明如何使用正则表达式对页面进行解析。假设我们有如下的 HTML 代码:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>这是页面标题</title>
</head>
<body>
	<div class="content">
		<h2>这是一级标题</h2>
		<p>这是一段文本</p>
	</div>
	<div class="footer">
		<p>版权所有 © 2021</p>
	</div>
</body>
</html>
登入後複製
登入後複製

我们可以使用如下所示的正则表达式来选取页面元素。

import re
html = '''
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>这是页面标题</title>
</head>
<body>
	<div class="content">
		<h2>这是一级标题</h2>
		<p>这是一段文本</p>
	</div>
	<div class="footer">
		<p>版权所有 © 2021</p>
	</div>
</body>
</html>
'''
pattern = re.compile(r'
.*?

(.*?)

.*?

(.*?)

.*?
', re.S) match = re.search(pattern, html) if match: title = match.group(1) text = match.group(2) print(title) print(text)
登入後複製

以上代码中,我们使用 re 模块的 compile 方法来编译正则表达式,然后使用 search 方法来匹配 HTML 代码。在正则表达式中,“.*?”表示非贪婪匹配,也就是匹配到第一个符合条件的标签就停止匹配,而“re.S”表示让“.”可以匹配包括换行符在内的任意字符。最后,我们使用 group 方法来获取匹配的结果。

以上是Python爬蟲之怎麼解析HTML頁面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

HTML:結構,CSS:樣式,JavaScript:行為 HTML:結構,CSS:樣式,JavaScript:行為 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web開發中的作用分別是:1.HTML定義網頁結構,2.CSS控製網頁樣式,3.JavaScript添加動態行為。它們共同構建了現代網站的框架、美觀和交互性。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

HTML的未來:網絡設計的發展和趨勢 HTML的未來:網絡設計的發展和趨勢 Apr 17, 2025 am 12:12 AM

HTML的未來充滿了無限可能。 1)新功能和標準將包括更多的語義化標籤和WebComponents的普及。 2)網頁設計趨勢將繼續向響應式和無障礙設計發展。 3)性能優化將通過響應式圖片加載和延遲加載技術提升用戶體驗。

visual studio code 可以用於 python 嗎 visual studio code 可以用於 python 嗎 Apr 15, 2025 pm 08:18 PM

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles