掌握使用 Beautiful Soup 進行網頁爬蟲:完整教學指南

最後更新於 July 21, 2026
掌握使用 Beautiful Soup 進行網頁爬蟲:完整教學指南

做商業決策的人現在幾乎都同意一件事:決策要建立在資料上。超過 81% 的公司現在都認為,資料應該是商業決策的核心。真正的問題出在後半段——你想要的那份資料,通常沒有現成 API 可以拿。競爭對手的價格頁、產業名錄的聯絡人、論壇裡的使用者回饋,這些都攤在網路上,卻沒有一個窗口讓你整包下載。網頁爬蟲就是補這個缺口用的。 ChatGPT Image Nov 10, 2025, 11_51_29 AM (1).png 在所有做法裡,Beautiful Soup 大概是最常被推薦給「想自己掌控每個細節」的那一群人。我這幾年在 SaaS 與自動化領域看過的案例,從十人新創到 Fortune 500,都有人靠它把「要是有這份資料就好了」變成每週固定產出的報表。這篇會談三件事:Beautiful Soup 為什麼一直沒被淘汰、怎麼從安裝一路寫到匯出 CSV,以及它跟 Thunderbit 這類 AI 工具之間該怎麼分工。

Beautiful Soup 到底解決什麼問題

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

Beautiful Soup 是 Python 的 HTML/XML 解析函式庫。它不負責下載網頁,也不負責跑 JavaScript,它只做一件事:把一坨字串形式的 HTML 變成可以用標籤、class、id 查詢的物件樹。專案至今仍在維護,beautifulsoup4 4.14.3 在 2025 年底已於 PyPI 發布,所以下面的流程對應的是現行版本,不是十年前的舊寫法。

它受歡迎的原因說白了就這幾點:

  • 入門成本低。 就算 Python 只寫過幾支小腳本,一個下午也能把第一支爬蟲跑起來。API 命名直覺,官方文件的範例密度很高。
  • 吃得下爛標記。 真實網站的 HTML 很少乾淨,標籤沒關、巢狀錯亂都是常態,Beautiful Soup 對這些狀況相當寬容。
  • 控制權在你手上。 它不會替你猜要抓什麼。抓哪個欄位、怎麼清洗、清完之後接到哪裡,全部由你決定。這是主廚刀和食物調理機的差別——多花點工,但每一刀都準。
  • 好接其他工具。 它就是個 Python 套件,前面接 requests 抓頁面,後面接 pandas 做分析,遇到需要跑 JS 的網站再串 Selenium,中間沒有黑盒子。

一篇社群指南給它的評語是:「Beautiful Soup 是一個可靠、彈性高、而且容易使用的網頁爬蟲工具,無論新手還是高手都很適合。」在爬蟲工具動不動就被一個怪標籤打死、或門檻高到要先讀完一本書的環境裡,這個評價不算低。

商業上真正用得到的場景

爬蟲不是資料迷的興趣,它已經是不少公司日常營運的一環。下面整理幾個最常見的用法,以及對應的產出:

使用情境Beautiful Soup 的幫助實際效益 / ROI 範例可擷取的資料類型
競爭對手價格監控抓取商品列表、價格與庫存資訊價格優化後帶來 4% 的銷售成長商品名稱、價格、庫存量
開發潛在客戶從名錄或 LinkedIn 擷取聯絡資訊原本要花好幾週的人工研究,幾分鐘就能完成;銷售漏斗中的潛在客戶更多姓名、電子郵件、電話號碼
市場研究與情緒分析蒐集評論、社群貼文或新聞文章即時掌握客戶情緒與競爭對手動態評論文字、評分、標題
工作流程自動化定期將資料拉進內部工具內部資料庫能自動保持更新,不必再人工查找產品規格、公開紀錄等

規模也不小:72% 的大型企業現在會抓取網站來做競爭情報,而 85% 的電商公司會抓競爭對手的價格與促銷資訊。換句話說,這已經不是要不要做的問題,而是做得順不順的問題。 ChatGPT Image Nov 10, 2025, 11_43_05 AM (1).png 自己寫程式還有一個容易被忽略的好處:網站改版時,你改幾行選擇器就能讓資料繼續進來,不必等供應商排修復時程。維護成本是你自己的,主導權也是你自己的。

Beautiful Soup 與 Thunderbit:分工怎麼切

先講清楚立場:Beautiful Soup 很好用,但有些需求就是不該用寫程式來解。行銷同事下午要一份競品清單,你不會想先幫他開發環境。這種時候 Thunderbit 這類工具比較合適——它是 AI 驅動、免程式碼的網頁爬蟲 Chrome 擴充功能,面向的是要結果、不要流程的商務使用者。

兩者的差異用一張表看最快:

功能Beautiful Soup(Python)Thunderbit(免程式碼 AI)
安裝與學習安裝函式庫、撰寫 Python 程式碼。對會寫程式的人來說門檻不高安裝 Chrome 擴充功能,不需要寫程式。對非工程背景的人幾乎零學習成本
自訂彈性幾乎無上限——可透過程式碼完全掌控受限於內建功能(AI 欄位建議、範本、基本轉換)
速度與規模預設單執行緒;但可透過額外努力擴充高度自動化擴充——雲端模式可平行抓取數十個頁面
動態內容處理面對大量 JavaScript 的網站時,需要 Selenium 或類似工具內建瀏覽器環境;可處理許多 JS 驅動網站、無限捲動等
反機器人與封鎖需手動處理——自己加代理、輪換 User-Agent、應對 CAPTCHA由系統代管——以真實瀏覽器或雲端模式執行並輪換;內建避開封鎖策略
維護成本網站 HTML 變動時,爬蟲通常需要手動更新大多數情況下幾乎免維護——AI 可適應不少變化,團隊也會更新熱門網站範本
資料匯出需自行寫程式輸出 CSV/Excel,或搭配 pandas一鍵匯出到 CSV、Excel、Google Sheets、Airtable、Notion
適合族群開發者、資料工程師、技術分析師需要快速取得資料的非技術商務使用者(業務、行銷、營運)

判斷標準其實很單純:需求會反覆調整、欄位邏輯複雜、要跟既有資料流串接,寫 Beautiful Soup;一次性的、時間壓力大的、交件對象不是工程師,用 Thunderbit。實務上運作得比較順的團隊多半兩邊都留著,臨時需求走擴充功能,長期管線走程式碼。

想看更細的拆解,可以參考 Thunderbit 的完整比較指南

免費試用 Thunderbit AI 網頁爬蟲

從安裝到匯出:完整跑一遍

接下來走一次完整流程。每一步都附程式碼,非工程背景的人照著貼也能跑起來。

第 1 步:安裝 Beautiful Soup 與必要函式庫

前提是機器上有 Python。beautifulsoup4 本身只需要 Python 3.7 以上,不過建議直接裝目前仍有上游安全支援的版本,省得之後為了環境問題卡住。打開終端機或命令提示字元:

pip install beautifulsoup4
pip install requests

出現權限錯誤的話,加上 --user,或改用虛擬環境。裝完之後開 Python shell 驗證:

import bs4
import requests

沒有跳錯誤訊息,就可以往下走。

第 2 步:用 Python 抓取網頁

Beautiful Soup 不負責下載,抓頁面是 requests 的工作。建立 scrape.py

import requests

url = "https://example.com/some-page"
response = requests.get(url)
print(response.status_code)

回傳 200 代表這一步沒問題。實際要排程跑的腳本,記得加上逾時與錯誤處理,不然遇到一次連線失敗整支就掛了:

try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"無法擷取該頁面:{e}")
    exit()

到這裡,整份 HTML 已經在 response.text 裡面。

第 3 步:用 Beautiful Soup 解析 HTML 內容

把字串交給解析器,變成可查詢的結構:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'html.parser')

之後就能用標籤、class 或 ID 找元素。假設要抓一頁商品列表:

product_elements = soup.find_all('div', class_='product-item')
for prod in product_elements:
    name = prod.find('h2').get_text(strip=True)
    price = prod.find('span', class_='price').get_text(strip=True)
    print(name, price)

選擇器怎麼決定?在瀏覽器上對目標欄位按右鍵、選「檢查」,直接讀出它的標籤和 class 名稱最快。

第 4 步:擷取並整理資料

抓下來的欄位幾乎不會直接可用,常見的清洗動作有這幾種:

  • 去掉前後空白: element.get_text(strip=True)
  • 移除多餘字元: price.replace("$", "").replace(",", "")
  • 補缺漏值: 元素找不到時用 if-else 給預設值,不要讓程式直接噴錯。
  • 轉型別: 數字用 float(),日期用 datetime.strptime(),之後才好排序和計算。

建議一邊抓一邊整理成字典清單,匯出時會省事很多:

data = []
for prod in product_elements:
    name = prod.find('h2').get_text(strip=True) if prod.find('h2') else ""
    price = prod.find('span', class_='price').get_text(strip=True) if prod.find('span', class_='price') else ""
    data.append({"name": name, "price": price})

第 5 步:將資料匯出到 Excel 或 CSV

Python 內建的 csv 模組就夠用了:

import csv

with open("output.csv", mode="w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["name", "price"])
    writer.writeheader()
    writer.writerows(data)

已經在用 pandas 的話,兩行搞定:

import pandas as pd
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)

到這一步,你手上就是一份能分析、能丟給同事的試算表。

實戰:把電視價格追蹤做出來

把前面的零件組起來看一個完整案例。情境是市場分析師要追某個電商網站的電視價格。

流程拆成四段:

  1. 逐頁爬商品列表。
  2. 每個商品抓名稱、價格,以及詳細頁連結。
  3. 進詳細頁補評分與庫存狀態。
  4. 全部寫進 CSV。

分頁的部分長這樣:

import time

page = 1
all_data = []
while True:
    url = f"https://example.com/tvs?page={page}"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    product_divs = soup.find_all('div', class_='product-item')
    if not product_divs:
        break
    for prod in product_divs:
        name = prod.find('h2').get_text(strip=True)
        price = prod.find('span', class_='price').get_text(strip=True)
        detail_url = prod.find('a', class_='details')['href']
        # 抓取詳細頁
        detail_resp = requests.get(detail_url)
        detail_soup = BeautifulSoup(detail_resp.text, 'html.parser')
        rating = detail_soup.find('span', class_='rating').get_text(strip=True) if detail_soup.find('span', class_='rating') else ""
        stock = detail_soup.find('div', id='availability').get_text(strip=True)
        all_data.append({"name": name, "price": price, "rating": rating, "stock": stock})
    page += 1
    time.sleep(1)  # 禮貌一點!

匯出照第 5 步做即可。這個「列表頁抓連結、詳細頁補欄位」的骨架,換到房仲物件、求職網站、供應商名錄都能沿用,改的只有選擇器。

分頁與無限捲動的處理方式

分頁到處都是——搜尋結果、商品清單、論壇串文。用 Beautiful Soup 手動處理的邏輯就兩件事:在 HTML 裡找到「下一頁」連結或頁碼,然後迴圈跑到沒有下一頁為止。

url = "http://quotes.toscrape.com"
while url:
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, 'html.parser')
    # 解析 quotes...
    next_button = soup.find('li', class_='next')
    url = next_button.find('a')['href'] if next_button else None
    if url:
        url = "http://quotes.toscrape.com" + url

無限捲動就麻煩一點。頁面沒有下一頁連結,內容是捲到底才由 JavaScript 追加的。做法有兩條:打開瀏覽器開發者工具找出背後的 AJAX 端點,直接對那個端點要資料,乾淨又快;或者用 Selenium 開真實瀏覽器模擬捲動,慢一些,但不必逆推 API。

不想碰這一段的話,Thunderbit 會自動偵測點擊式分頁和無限捲動,切換對應選項就能平行抓完所有頁面,不用寫程式。頁數多的任務,省下來的時間相當可觀。

用 Thunderbit AI 擷取多頁資料

上線前該守的幾條紀律

網頁爬蟲最佳實務 Get Started Free

以下幾點都是踩過才記得住的:

  • 先看 robots.txt 和服務條款。 技術上抓得到,不等於該抓。只碰公開、非敏感的資料。
  • 控制請求頻率。 請求之間插 time.sleep()。連續高頻打同一個網域,被擋是遲早的事。
  • 設合理的標頭。 User-Agent 要像真實瀏覽器,不要用預設值直接上。
  • 假設網站一定會改版。 選擇器寫得寬鬆一點,關鍵欄位加上找不到時的處理分支。
  • 程式架構顧一下。 拆成函式、變數名稱寫清楚、關鍵邏輯留註解。三個月後回來改的人多半還是你。
  • 先小規模測試。 一頁確認無誤之前,不要直接開 10,000 頁。

更多細節可以看 Thunderbit 的最佳實務指南

兩種工具混著用的流程

如果團隊同時要速度和彈性,我通常會這樣安排:

  1. 收集階段交給 Thunderbit 幾分鐘內抓下數百到數千筆紀錄,匯出成 CSV、Excel 或 Google Sheets。
  2. 加工階段交給 Python 與 Beautiful Soup: 清洗、補欄位、跟其他資料集交叉比對,例如把 HTML 說明欄裡的規格拆出來。
  3. 把兩段接成排程: Thunderbit 負責讓資料保持新鮮,Python 負責讓資料變得可用。

分工的邏輯是把「取得」和「加工」拆開,各自用最省力的工具。因為匯出格式都是標準的 CSV 或試算表,中間銜接不需要額外開發。

小結

用 Beautiful Soup 做網頁爬蟲,換來的是完整的控制權:抓什麼、怎麼清、清完接到哪裡,每一段都是你決定的。它對新手友善、彈性夠大,在商業場景裡已經被驗證很多年。代價是環境、反爬和後續維護都得自己扛。

反過來說,有些需求就是不值得為它寫程式。Thunderbit 這種 AI 驅動、免程式碼的做法,在時間壓力大或使用者不會寫程式的場合更實際。真正的答案通常不是二選一,而是清楚知道哪個需求該走哪條路。

要開始的話,先挑一個結構單純的網站,用 Beautiful Soup 完整跑一遍上面五個步驟,手感很快就有了。想看更多教學、工具比較和實際案例,可以到 Thunderbit Blog 找。

常見問題

1. Beautiful Soup 適合網頁爬蟲新手嗎?
適合。它的學習曲線平緩、文件範例多,是 Python 新手或第一次寫爬蟲的人最常被推薦的起點。

2. Beautiful Soup 可以解決哪些商業問題?
競爭對手價格監控、潛在客戶開發、市場研究,以及重複性的資料蒐集自動化,在沒有 API 可用的情況下特別有價值。

3. 什麼時候該用 Thunderbit,而不是 Beautiful Soup?
不想寫程式就要快速拿到資料、目標網站有複雜分頁或無限捲動、或是需要直接匯出到 Excel、Sheets、Notion 的時候。對非技術人員和快速驗證想法的場合尤其合適。

4. 可以在同一個流程中同時使用 Thunderbit 和 Beautiful Soup 嗎?
可以。常見做法是先用 Thunderbit 收原始資料,再用 Beautiful Soup 和 Python 做後續處理與補強,速度和彈性都顧到。

5. 在商業情境下使用 Beautiful Soup 的最佳實務是什麼?
遵守網站條款、控制請求頻率、設定合理的標頭、預留版面變動的空間、把程式結構寫清楚。擴大規模前一定要先小量測試,法律與道德規範也要持續留意。

免費試用 Thunderbit AI 網頁爬蟲 Get Started Free

Shuai Guan
Shuai Guan
Thunderbit 執行長|AI 資料自動化專家 Shuai Guan 是 Thunderbit 的執行長,畢業於密西根大學工程學院。憑藉近十年在科技與 SaaS 架構領域的經驗,他專注於把複雜的 AI 模型轉化為實用、免程式碼的資料擷取工具。在這個部落格中,他分享經過實戰驗證、毫無保留的網頁爬取與自動化策略見解,幫助你打造更聰明、以數據驅動的工作流程。當他不在優化資料流程時,也會把同樣的細膩與專注投入到攝影興趣中。
Topics
Beautiful soupWeb scraping

試用 Thunderbit

只要 2 次點擊,就能抓取潛在客戶與其他資料。由 AI 驅動。

取得 Thunderbit 免費
使用 AI 擷取資料
輕鬆將資料傳送到 Google Sheets、Airtable 或 Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week