CodeGym /課程 /Python SELF TW /使用 BeautifulSoup 方法從 HTML 元素中提取文本和屬性

使用 BeautifulSoup 方法從 HTML 元素中提取文本和屬性

Python SELF TW
等級 32 , 課堂 0
開放

1. 提取文本方法介紹

今天我們要學會怎麼從 HTML 元素中提取寶貴的文本數據和屬性。放下你的刀,因為 使用 BeautifulSoup 處理代碼就像在秋天的果園散步,蘋果在呼喚你去摘。 準備好收穫你的學習成果了嗎?那麼讓我們開始吧!

從 HTML 元素提取文本的方法在我們的列表中排第一。在開始提取文本之前,我們先加載頁面。

Python

import requests
from bs4 import BeautifulSoup

# 加載頁面的 HTML 代碼
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

現在我們已經有了一個 soup 對象,它包含了我們 HTML 文檔的樹形結構。 讓我們從某個標籤元素(比如標題)中提取文本。

方法 .textget_text()

屬性 .text 和對應的方法 get_text() 能讓你獲取元素內的文本內容 (包括它的所有子元素)。

Python

# 從第一個找到的 h1 標題提取文本
h1_tag = soup.find('h1')
print(h1_tag.text) # 或 h1_tag.get_text()

試試看:用之前講過的搜索方法找到其他元素,並從中提取文本。你會驚訝於你能獲得多少信息!

2. 提取屬性值

文本是文本,但有時重要數據隱藏在屬性中,就像口袋裡的護照。 想像一下,你需要知道一個鏈接的地址或獲取圖像的 URL (別問我為什麼需要這樣,也許你想收集貓咪圖片呢)。

提取屬性值

假設我們有一個鏈接元素 <a href="https://example.com">Example</a>。我們如何獲取 href 的值呢?很簡單。

Python

# 提取鏈接
a_tag = soup.find('a')
link = a_tag['href']
print("鏈接:", link)

這段代碼提取了 href 屬性的值。其他任何有用的屬性,你都可以用類似的方式提取它們。

試著提取圖片

提取圖片 URL 同樣簡單。我們來看看這個例子 <img src="image.jpg" alt="貓咪">

Python

# 提取圖片 URL
img_tag = soup.find('img')
image_url = img_tag['src']
print("圖像 URL:", image_url)

使用 BeautifulSoup 的美妙之處在於,它讓我們能夠輕鬆地找到和提取數據, 而不需要操心 HTML 結構的具體運作方式。

3. 提取文本和屬性的範例

該進入實例了。讓我們嘗試一個稍微複雜一點的任務:提取頁面中的所有鏈接, 包括 <a> 標籤中的文本。

範例:提取所有帶文本的鏈接

Python

# 找到所有 a 標籤
a_tags = soup.find_all('a')

# 輸出鏈接和文本
for a_tag in a_tags:
 link = a_tag['href']
 text = a_tag.get_text()
 print(f"文本: {text}, 鏈接: {link}")

如你所見,方法 find_all 非常便捷地找到符合條件的所有元素, 而 for 循環則可以遍歷每一個元素。

4. 錯誤處理

別忘了處理錯誤。有時候 HTML 結構可能並不是你所期望的樣子, 或者某個元素可能缺少預期的屬性。確保你的代碼不會因這種情況而崩潰。

Python

# 提取屬性時的錯誤處理範例
try:
 link = a_tag['href']
except KeyError:
 link = None
 print("屬性 href 未找到!")

這樣可以讓腳本更穩定,不會因一個不起眼的錯誤而停止運行。

5. 真實應用

2019 年,一位俄羅斯企業家分享了他的公司如何通過數據解析達到年營收 2000 萬盧布的故事。 他指出,自動化的信息收集不會限制競爭,反而幫助企業適應市場。

例如,有一位客戶訂購了一個解析器,用於每天從供應商網站收集庫存數據, 這使得該客戶可以及時更新其網上商店的商品種類和價格。 該企業家還強調,儘管某些網站試圖增加解析的難度, 現代技術能有效繞過這些障礙,為企業提供做出戰略決策所需的數據。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION