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

最後更新於 July 21, 2026
How to use BeautifulSoup Python web scraping tutorial title with illustrated people and data flow graphics

網頁爬蟲早就不是工程師專屬的技能,如今對銷售、營運、市場研究人員來說,它幾乎成了一項人人該會的本事。網路上的資料量正在爆炸式膨脹——全球資料產量從 2019 到 2023 年間幾乎暴增了 193%——也難怪有 81% 的公司 現在都把資料當成決策的「核心」。但問題同樣明顯:有 95% 的組織 坦言,處理像雜亂 HTML 這種非結構化資料,是一大頭痛。我看過太多團隊困在一場又一場的複製貼上馬拉松裡,只為了把網站上的資訊搬進試算表——那畫面真的不太好看。

用 AI 從任何網站擷取資料 Get Started Free

這時候,Python 的 BeautifulSoup 就該登場了。這篇教學走的是實作路線,我會帶你一步步把 BeautifulSoup 用來做網頁爬蟲,並附上一個你可以直接搬去套用到自家業務的 Python Beautiful Soup 範例。而且我向來覺得與其埋頭硬做,不如把工具用巧,所以也會示範怎麼把 BeautifulSoup 和 Thunderbit——我們家的 AI 網頁爬蟲——搭在一起,讓你的流程更快、拿到的資料更乾淨、結構更整齊;不論你的程式底子如何,都能輕鬆跟上。

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

beautifulsoup-web-scraping-overview.png 先從最基礎的講起。BeautifulSoup 是一個 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 簡單又百搭,幾乎什麼場面都應付得來 (medium.com)。碰到更複雜或動態的網站,可以再把它跟 Selenium 或 Scrapy 配著用——但要先把基本功練好,BeautifulSoup 絕對是最好的起點。

幫 BeautifulSoup 把 Python 環境準備好

環境設定的步驟如下:

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

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

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

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

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

想確認設定有沒有弄好,跑這段快速測試就知道:

from bs4 import BeautifulSoup
import requests

html = requests.get("http://example.com").text
soup = BeautifulSoup(html, "html.parser")
print(soup.title)

只要你看到 <title>Example Domain</title>,就代表一切就緒 (Thunderbit Blog)。

Python Beautiful Soup 範例:一步一步帶你做

下面示範一個貼近真實情境的 python beautiful soup 範例。假設你想從公開新聞網站抓出最新標題,做法是這樣:

1. 取得網頁

import requests
from bs4 import BeautifulSoup

url = "https://www.bbc.com/news"
response = requests.get(url)
html = response.text

2. 解析 HTML

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

3. 檢視 HTML 結構

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

舉例來說,你可能會看到:

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

4. 擷取資料

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

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

5. 把資料存成 CSV

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

import csv

with open("headlines.csv", "w", newline='', encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["headline"])
    for h in headlines:
        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 擷取並整理資料

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

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

現在你手上就有一份字典清單——拿去匯出成 CSV 或進一步分析都很合適。

連結、圖片或任何屬性也能照樣抓,像這樣:

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

圖片同理:

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

把擷取到的資料存起來:從 Python 到 Excel 或 CSV

資料整理好之後,輸出其實很輕鬆。下面示範怎麼用 csv 模組搞定:

import csv

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

如果你比較習慣 pandas,也可以這樣做:

import pandas as pd

df = pd.DataFrame(data)
df.to_csv("articles.csv", index=False)
df.to_excel("articles.xlsx", index=False)

記得一律用 UTF-8 編碼,免得跑出奇怪的亂碼,處理跨國資料時尤其要注意。

實戰案例:用 BeautifulSoup 爬新聞網站

我們來實際走一遍 python beautiful soup 範例:從新聞網站抓出文章標題、作者與發布日期。

假設你想從 CNN 抓文章資料:

import requests
from bs4 import BeautifulSoup
import csv

url = "https://edition.cnn.com/world"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

articles = soup.find_all("article")
data = []

for article in articles:
    title_tag = article.find("h3")
    date_tag = article.find("span", class_="date")
    author_tag = article.find("span", class_="author")
    title = title_tag.get_text(strip=True) if title_tag else ""
    date = date_tag.get_text(strip=True) if date_tag else ""
    author = author_tag.get_text(strip=True) if author_tag else ""
    data.append({"title": title, "date": date, "author": author})

with open("cnn_articles.csv", "w", newline='', encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=["title", "date", "author"])
    writer.writeheader()
    for row in data:
        writer.writerow(row)

這段程式會抓出最新文章,撈出標題、日期和作者,再存成 CSV——前提是 CNN 現在的標記結構還跟上面一樣。大型新聞網站常常換 class 名稱跟 DOM 結構,所以正式跑資料前,記得先回頭把頁面重新檢查一次。真正穩定的是結構模式(例如用 <article> 當容器,再對子標籤呼叫 find);至於 "date""author" 這些 class 名稱只是示意,實際還是要照當下頁面的內容去調整。

進階工作流程:BeautifulSoup 加上 Thunderbit

接著談談怎麼讓你的爬蟲流程更順。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 AI 網頁爬蟲

速度與資料品質:為什麼 Thunderbit 要搭 BeautifulSoup?

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

  • 速度: Thunderbit 能平行爬取數十個頁面(雲端模式下最多同時 50 個),讓你幾分鐘就拿到資料,而不是耗上好幾個小時。
  • 資料完整性: Thunderbit 的 AI 能跟著版面變動調整,連難搞的網站也能撈出結構化資料,大幅降低欄位漏掉的機率。
  • 減少錯誤: class 名稱一改就掛掉的腳本,不再是你的煩惱——Thunderbit 的 AI 每次都會重新評估頁面。
  • 客製後處理: 如果你有進階需求(例如篩選、翻譯,或合併資料集),BeautifulSoup 和 pandas 能讓你完全掌控整個流程。

這種混合做法特別適合:

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

BeautifulSoup 網頁爬蟲常見問題排除

試用 Thunderbit Chrome 擴充功能 用 AI 在 2 次點擊內爬取任何網站。 Get Started Free

網頁爬蟲不見得一路順遂——以下是幾個常踩的坑,以及對應的解法:

  • 動態內容: 如果網站是靠 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 網頁爬蟲 能讓你快上多少。想看更多實作指南,也可以到 Thunderbit Blog 逛逛。

把這些方法用熟,乾淨、結構清楚、隨時能用的資料就會變成日常。

試用 Thunderbit AI 網頁爬蟲 Get Started Free

常見問題

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 編碼,才能正確處理特殊字元,也才跟試算表工具相容。

想自己動手試試嗎?下載 Thunderbit 的 Chrome 擴充功能,今天就開始更聰明地爬資料。想看更多教學與技巧,歡迎逛逛 Thunderbit Blog

延伸閱讀

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
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week