如何使用 BeautifulSoup:Python 網頁爬蟲教學

最後更新:May 21, 2026

網頁爬蟲早就不只是少數人才會的技能,現在已經變成銷售、營運和市場研究人員都得會的超能力。隨著網路資料量爆炸性成長——全球資料產量從 2019 到 2023 年幾乎增加了 ——難怪有 現在都把資料視為決策的「核心」。但問題也很明顯:有 表示,處理非結構化資料(像是雜亂的 HTML)是一大挑戰。我看過太多團隊卡在一場又一場複製貼上的馬拉松裡,只為了把網站資訊整理進試算表——相信我,那畫面一點都不優雅。

這時候就輪到 Python 的 BeautifulSoup 上場了。在這篇實作導向教學中,我會帶你一步步了解如何使用 BeautifulSoup 進行網頁爬蟲,並提供一個實用的 Python Beautiful Soup 範例,讓你可以直接套用到自己的商業需求。更棒的是,因為我一直相信「更聰明地工作,而不是更辛苦地工作」,我也會示範如何把 BeautifulSoup 和 ——我們的 AI 驅動網頁爬蟲——結合起來,加快你的工作流程,拿到更乾淨、結構更完整的資料;不管你程式能力如何,都能輕鬆上手。

什麼是 BeautifulSoup?為什麼要用它做網頁爬蟲?

beautifulsoup-web-scraping-overview.png 先從最基本的說起。 是一個 Python 函式庫,可以讓你輕鬆解析 HTML 與 XML 文件。你可以把它想成翻譯機:它會把網頁上那些「標籤大雜燴」整理成一棵可導航的樹狀結構,讓你能輕鬆找到、擷取並操作需要的資料。這個專案目前仍持續維護——beautifulsoup4 4.14.3 也已在 2025 年底於 PyPI 發布——所以你在這裡學到的內容都相當新。無論你是要抓電商網站的商品價格、蒐集新聞標題,還是從商業名錄網站擷取名單線索,BeautifulSoup 都是把網頁轉成結構化、可行動資料的首選工具。

它為什麼這麼受歡迎?首先,它對初學者非常友善。BeautifulSoup 對雜亂 HTML 很寬容(而且說真的,網路上這種東西多得是),加上它的 Python 風格語法,讓你只要幾行程式碼就能從零開始做爬蟲。它也有廣泛支援,下載量龐大、社群活躍——所以如果你卡住了,Google 一下通常就能找到解法。

BeautifulSoup 的常見用途包括:

  • 從電商頁面擷取商品名稱、價格與評分
  • 從新聞網站抓取新聞標題、作者與發布日期
  • 解析表格或名錄(例如公司或聯絡人清單)
  • 從列表網站蒐集電子郵件或電話號碼
  • 追蹤更新(例如價格變動、新職缺等)

如果你的資料存在靜態 HTML 裡,BeautifulSoup 就是你做網頁爬蟲時最可靠的夥伴。

BeautifulSoup 在網頁爬蟲上的獨特優勢

市面上有很多 Python 網頁爬蟲函式庫——那為什麼要選 BeautifulSoup?它和其他工具相比,優勢在這裡:

  • 簡單易學: BeautifulSoup 輕量又好上手。你不需要搭建整套框架,也不用寫一堆樣板程式。它非常適合快速、一次性的爬取任務,或是剛起步的初學者。
  • 容錯性高: 它能處理破損或格式不良的 HTML,這種情況其實比你想像中更常見。
  • 彈性高: 你不會被綁進死板的爬取架構裡。只要把 HTML 餵給它,再擷取你要的資料就行。
  • 整合性佳: BeautifulSoup 和其他 Python 函式庫相容性很好,像 requests(用來抓網頁)、csv(用來存資料)和 pandas(用來分析資料)都能輕鬆搭配。

那它和其他工具比起來怎麼樣?

工具最適合優點缺點
BeautifulSoup靜態 HTML 解析、初學者簡單、設定快、容錯高、彈性好不適合 JavaScript 很重的網站
Scrapy大規模、非同步任務功能強大、可擴充、內建爬取架構學習曲線較陡、設定較多
SeleniumJavaScript/動態內容可與 JS 互動、填表、點按鈕較慢、較重、資源耗用較高

如果你只是剛開始,或需要快速解析靜態頁面,BeautifulSoup 就像網頁爬蟲界的「瑞士刀」()。如果是更複雜或動態的網站,你可以把它和 Selenium 或 Scrapy 搭配使用——但要先學好基本功,BeautifulSoup 會是最好的起點。

為 BeautifulSoup 設定你的 Python 環境

準備好了嗎?以下是環境設定方式:

  1. 安裝 Python: 下載最新版。

  2. 建立虛擬環境(可選,但建議):

    1python -m venv venv
    2source venv/bin/activate  # Windows 上:venv\Scripts\activate
  3. 安裝 BeautifulSoup 與相依套件:

    1pip install beautifulsoup4 requests lxml html5lib
    • beautifulsoup4:主要函式庫
    • requests:用來抓取網頁
    • lxmlhtml5lib:更快/更可靠的 HTML 解析器
  4. 除錯小技巧:

    • 如果你看到「找不到 pip」的錯誤,試試 pip3py -m pip
    • 在 Mac/Linux 上,你可能需要 sudo 權限。
    • 如果你用的是 Windows,請確認 Python 已加入你的 PATH。

要確認設定是否正確,可以跑這段快速測試:

1from bs4 import BeautifulSoup
2import requests
3html = requests.get("http://example.com").text
4soup = BeautifulSoup(html, "html.parser")
5print(soup.title)

如果你看到 <title>Example Domain</title>,就代表一切正常 ()。

Python Beautiful Soup 範例:一步一步來

讓我們看一個真實場景的 python beautiful soup 範例。想像你想從公開新聞網站擷取最新新聞標題,做法如下:

1. 取得網頁

1import requests
2from bs4 import BeautifulSoup
3url = "https://www.bbc.com/news"
4response = requests.get(url)
5html = response.text

2. 解析 HTML

1soup = BeautifulSoup(html, "html.parser")

3. 檢視 HTML 結構

打開瀏覽器的開發者工具(右鍵 → 檢視),找出包含標題的標籤。很多新聞網站的標題都放在帶有特定 class 的 <h3> 標籤裡。

例如,你可能會看到:

1<h3 class="gs-c-promo-heading__title">Headline Title</h3>

4. 擷取資料

1headlines = soup.find_all("h3", class_="gs-c-promo-heading__title")
2for h in headlines:
3    print(h.get_text(strip=True))

這會把頁面上的所有新聞標題都印出來。

5. 將資料存成 CSV

接著把這些標題存起來,方便日後分析:

1import csv
2with open("headlines.csv", "w", newline='', encoding="utf-8") as file:
3    writer = csv.writer(file)
4    writer.writerow(["headline"])
5    for h in headlines:
6        writer.writerow([h.get_text(strip=True)])

這樣你就會得到一個可直接用於 Excel 或 Google Sheets 的 CSV 檔案。

理解 HTML 結構,才能有效擷取資料

在寫任何程式之前,先檢查頁面的 HTML。方法如下:

  1. 打開開發者工具: 在頁面上按右鍵,選擇「檢視」。
  2. 找出資料: 把滑鼠移到元素上,查看哪個標籤包含你要的資訊(例如標題、價格、作者)。
  3. 記下標籤與 class: 留意像 class="product-title"id="main-content" 這類唯一識別碼。
  4. 測試你的選擇器: 用 BeautifulSoup 的 .find().find_all().select() 方法鎖定那些元素。

小訣竅:可以用 soup.prettify() 在 Python 主控台印出較易讀的 HTML 版本。

使用 BeautifulSoup 擷取並整理資料

假設你想從部落格頁面擷取標題與作者:

1articles = soup.find_all("article")
2data = []
3for article in articles:
4    title = article.find("h2").get_text(strip=True)
5    author = article.find("span", class_="author").get_text(strip=True)
6    data.append({"title": title, "author": author})

現在你已經有一個字典清單——非常適合匯出成 CSV 或進一步分析。

你也可以像這樣擷取連結、圖片或任何屬性:

1for link in soup.find_all("a"):
2    print(link.get("href"))

圖片也是一樣:

1for img in soup.find_all("img"):
2    print(img.get("src"))

儲存擷取到的資料:從 Python 到 Excel 或 CSV

資料整理好之後,輸出其實很簡單。以下示範如何用 csv 模組完成:

1import csv
2with open("articles.csv", "w", newline='', encoding="utf-8") as file:
3    writer = csv.DictWriter(file, fieldnames=["title", "author"])
4    writer.writeheader()
5    for row in data:
6        writer.writerow(row)

如果你偏好 pandas,也可以這樣做:

1import pandas as pd
2df = pd.DataFrame(data)
3df.to_csv("articles.csv", index=False)
4df.to_excel("articles.xlsx", index=False)

記得一律使用 UTF-8 編碼,避免出現奇怪的字元問題,尤其是處理國際資料時。

實戰案例:使用 BeautifulSoup 爬取新聞網站資料

我們來看一個實際的 python beautiful soup 範例:從新聞網站爬取文章標題、作者與發布日期。

假設你想從 抓文章資料:

1import requests
2from bs4 import BeautifulSoup
3import csv
4url = "https://edition.cnn.com/world"
5response = requests.get(url)
6soup = BeautifulSoup(response.content, "html.parser")
7articles = soup.find_all("article")
8data = []
9for article in articles:
10    title_tag = article.find("h3")
11    date_tag = article.find("span", class_="date")
12    author_tag = article.find("span", class_="author")
13    title = title_tag.get_text(strip=True) if title_tag else ""
14    date = date_tag.get_text(strip=True) if date_tag else ""
15    author = author_tag.get_text(strip=True) if author_tag else ""
16    data.append({"title": title, "date": date, "author": author})
17with open("cnn_articles.csv", "w", newline='', encoding="utf-8") as file:
18    writer = csv.DictWriter(file, fieldnames=["title", "date", "author"])
19    writer.writeheader()
20    for row in data:
21        writer.writerow(row)

這段程式會抓取最新文章,擷取標題、日期和作者,並存成 CSV——前提是 CNN 目前的標記結構仍與上面相符。大型新聞網站常常會更換 class 名稱與 DOM 結構,所以在正式跑資料前,記得先重新檢查頁面。真正穩定的是結構模式(例如 <article> 容器,再對子標籤使用 find);像 "date""author" 這類 class 名稱只是示意,實際上要依照當下頁面內容調整。

進階工作流程:把 BeautifulSoup 和 Thunderbit 結合

現在,我們來談談如何讓你的爬蟲流程更順暢。 是一款 AI 驅動的網頁爬蟲 Chrome 擴充功能,能幫你省去資料擷取時的猜測。使用 Thunderbit,你可以:

  • 使用「AI 建議欄位」: Thunderbit 會讀取頁面,並自動建議要擷取哪些資料欄位——不必再翻 HTML 或調整選擇器。
  • 爬取子頁面: Thunderbit 可以追蹤連結到子頁(例如單一商品頁或文章頁),補充更多細節,讓資料集更完整。
  • 立即匯出: 一鍵把資料直接送到 Excel、Google Sheets、Airtable 或 Notion。
  • 處理分頁: Thunderbit 可以跨多個頁面爬取資料,甚至包含無限捲動。
  • 排程爬取: 設定定期任務,讓資料保持最新。

這是我很喜歡的一種混合工作流程:

  1. 先用 Thunderbit: 打開目標網站,點擊 Thunderbit 圖示,讓「AI 建議欄位」辨識出正確欄位(例如標題、作者、日期)。
  2. 匯出資料: 下載成 CSV,或直接送到 Google Sheets。
  3. 再用 BeautifulSoup 做客製化處理: 如果你需要更深入的分析(例如文字清理、去重,或和其他資料來源合併),就把匯出的 CSV 載入 Python,並使用 BeautifulSoup 或 pandas 做後處理。

這個組合讓你同時擁有兩者優點:Thunderbit 的速度與 AI 欄位偵測,再加上 BeautifulSoup 針對客製邏輯的彈性。

速度與資料品質:為什麼要把 Thunderbit 和 BeautifulSoup 搭配使用?

thunderbit-beautifulsoup-data-pipeline.png 為什麼要兩個工具一起用?這是我的觀察:

  • 速度: Thunderbit 可以平行爬取數十個頁面(雲端模式下最高可同時 50 個),讓你在幾分鐘內拿到資料,而不是花上幾小時。
  • 資料完整性: Thunderbit 的 AI 能適應版面變動,甚至能從棘手網站中擷取結構化資料,降低欄位遺漏的機率。
  • 降低錯誤: class 名稱一改就壞掉的腳本不再是問題——Thunderbit 的 AI 每次都會重新評估頁面。
  • 客製化後處理: 如果你有進階需求(例如篩選、翻譯,或合併資料集),BeautifulSoup 和 pandas 讓你完全掌控流程。

這種混合方式特別適合:

  • 大規模名單開發: 用 Thunderbit 先抓大量資料,再用 BeautifulSoup 清理和補強。
  • 商品監控: Thunderbit 負責重複性的爬取,BeautifulSoup 則讓你分析趨勢或標記異常。
  • 新聞與內容追蹤: 先用 Thunderbit 快速蒐集文章,再用 Python 做情緒分析或關鍵字擷取。

BeautifulSoup 網頁爬蟲常見問題排除

網頁爬蟲不一定一路順風——以下是幾個常見坑洞,以及解法:

  • 動態內容: 如果網站透過 JavaScript 載入資料(無限捲動、AJAX),BeautifulSoup 單獨是看不到的。這種情況請改用 Selenium 或 Thunderbit 的瀏覽器模式。
  • 反機器人機制: 有些網站會阻擋自動請求。你可以試著設定自訂 User-Agent 標頭、在請求之間加入延遲,或使用 Thunderbit 的雲端爬取來繞過簡單封鎖。
  • HTML 結構變更: 如果你的程式突然壞掉,很可能是網站 HTML 改了。請重新檢查頁面並更新選擇器。Thunderbit 的 AI 也能在這方面幫你即時適應。
  • 資料缺失: 在呼叫 .get_text() 前,先確認元素是否存在。屬性值盡量用 .get() 取代 [],避免 KeyError。
  • 編碼問題: 儲存檔案時使用 UTF-8 編碼,才能正確處理特殊字元。

另外,請務必尊重 robots.txt 和網站服務條款。請負責任地爬取——沒有人喜歡沒禮貌的機器人。

結論與重點整理

在今天這個資料驅動的世界裡,使用 BeautifulSoup 做網頁爬蟲,是你能學到最實用的技能之一。以下是這篇 beautifulsoup 網頁爬蟲教學的重點:

  • BeautifulSoup 是解析靜態 HTML、並用 Python 擷取結構化資料的理想起點。
  • 環境設定 很簡單——只要安裝 Python、pip 和幾個函式庫就行。
  • 檢視 HTML 是鎖定正確資料的關鍵。
  • 匯出成 CSV/Excel,能讓資料立刻用於商業分析。
  • 搭配 Thunderbit 可帶來 AI 欄位偵測、更快的爬取速度與更容易的匯出——非常適合商務使用者與非程式人員。
  • 混合工作流程(Thunderbit 負責大量擷取,BeautifulSoup 負責客製處理)能同時提供最佳速度、資料品質與彈性。

如果你已經準備好升級你的網頁爬蟲能力,建議把這兩個工具都試試:先用簡單的 BeautifulSoup 腳本練習,再看看 能讓你快多少。若想看更多實作指南,也可以到 看看。

祝你爬取順利——願你的資料永遠乾淨、結構清楚,且隨時可用。

試用 Thunderbit AI 網頁爬蟲

常見問題

1. 什麼是 BeautifulSoup?它用來做什麼?
BeautifulSoup 是一個用於解析 HTML 與 XML 文件的 Python 函式庫。它能幫你從網頁中擷取資料,並整理成清單或表格等結構化格式,非常適合用於網頁爬蟲專案。

2. BeautifulSoup 和 Selenium、Scrapy 有什麼不同?
BeautifulSoup 輕量、好上手,適合處理靜態 HTML 頁面。Selenium 更適合爬取動態、JavaScript 很多的網站,而 Scrapy 則是功能完整的框架,適合大規模、非同步爬取。對初學者與快速任務來說,BeautifulSoup 是最佳選擇。

3. 可以把 BeautifulSoup 和 Thunderbit 一起使用嗎?
當然可以。Thunderbit 能用 AI 快速辨識並擷取網頁欄位,而您可以再用 BeautifulSoup 對匯出的資料做客製化後處理或更深入的分析。

4. 使用 BeautifulSoup 做網頁爬蟲時,常見的挑戰有哪些?
常見問題包括處理動態內容、應對反機器人機制,以及適應 HTML 結構變動。使用 Thunderbit 的 AI 功能或瀏覽器模式,可以幫助您克服許多這類挑戰。

5. 要怎麼把 BeautifulSoup 擷取到的資料匯出成 Excel 或 CSV?
您可以使用 Python 內建的 csv 模組,或 pandas 函式庫,把擷取到的資料寫入 CSV 或 Excel 檔案。記得一律使用 UTF-8 編碼,才能處理特殊字元並確保與試算表工具相容。

想自己試試看嗎?下載 ,今天就開始更聰明地爬取資料。更多教學與技巧,歡迎造訪

深入了解

Shuai Guan
Shuai Guan
Thunderbit 執行長|AI 資料自動化專家 Shuai Guan 是 Thunderbit 的執行長,也是密西根大學工程學院校友。憑藉近十年的科技與 SaaS 架構經驗,他專注於將複雜的 AI 模型轉化為實用、免程式碼的資料擷取工具。在這個部落格中,他分享未經修飾、經過實戰驗證的網頁爬蟲與自動化策略洞見,幫助您打造更聰明、以資料驅動的工作流程。當他不在優化資料工作流程時,也會以同樣的細膩眼光投入攝影興趣。
Topics
Python beautiful soup 範例BeautifulSoup 網頁爬蟲教學

試試 Thunderbit

只要 2 下就能抓取潛在客戶與其他資料。AI 驅動。

取得 Thunderbit 完全免費
使用 AI 擷取資料
輕鬆將資料轉移到 Google Sheets、Airtable 或 Notion
PRODUCT HUNT#1 Product of the Week