當你需要整理 1000 筆商品比價資料時...

想像一個情境:你的老闆今天早上交給你一個任務,他希望你把 PChome、Momo、Yahoo 購物中心上面,所有標題含有「電競筆電」的商品名稱與價格全部抓下來,整理成一份 Excel 報表給他,因為他想要做競品分析。

如果你不會寫程式,你只能認命地打開三個網頁,搜尋「電競筆電」。然後用滑鼠反白第一台筆電的名字,按下 Ctrl+C,切換到 Excel,按下 Ctrl+V;再切回網頁,反白價格,Ctrl+C,切換到 Excel,Ctrl+V。 當你重複這個無聊的動作 10 遍之後,你就會開始懷疑人生。當你做到第 500 遍的時候,天已經黑了,而且你還可能因為眼花而貼錯格子。

這就是為什麼我們需要「網路爬蟲 (Web Scraper)」。

網路爬蟲就像是一隻你養的虛擬蜘蛛,你可以給它一個網址,然後告訴它:「去幫我把網頁裡面所有紅色的字、以及標著錢號 $ 的數字全部咬回來給我」。 它可以在 3 秒內爬完 10 個網頁,並且完美無誤地把幾千筆資料整整齊齊地排好。

在 Python 的生態系中,有兩個最知名的爬蟲神兵利器:

  1. Requests:負責去敲網頁的門,把網頁的 HTML 原始碼全部下載下來。
  2. BeautifulSoup:負責在這堆雜亂無章的 HTML 原始碼中,用放大鏡精準找出你要的特定文字(例如商品名稱、價格)。

爬蟲的第一守則:看懂網頁的「骨架 (HTML)」

在我們放蜘蛛出去咬資料之前,我們必須先告訴蜘蛛「你要咬的東西長什麼樣子」。 請隨便打開一個購物網頁,對著你要抓的商品名稱按下「右鍵」 -> 選擇「檢查 (Inspect)」。 你會看到畫面右邊跳出一大堆密密麻麻的程式碼。不要害怕,這就是網頁的骨架 (HTML)。

你可能會看到類似這樣的東西:

<div class="product-item">
  <h2 class="title">ASUS ROG 頂級電競筆電</h2>
  <span class="price">$45,000</span>
</div>

這時候,你的尋寶地圖就出來了! 你要告訴 Python 爬蟲:「請幫我找出所有帶著 class="product-item" 的大箱子,然後進去把裡面 class="title" 的文字,以及 class="price" 的數字拿出來。」


Vibe Prompt 實戰:一秒產出爬蟲腳本

在過去,要自己寫出 Requests 跟 BeautifulSoup 的爬蟲腳本,你需要一直翻閱英文技術文件,而且如果不小心打錯一個標籤名字,爬蟲就會死當。 現在,我們只要直接跟 AI 描述我們的尋寶地圖就可以了!

【Python 爬蟲自動化 Prompt】 我需要寫一個 Python 爬蟲腳本。 目標網址是:https://example-shop.com/laptops

請使用 requests 抓取網頁,並用 BeautifulSoup 進行解析。 網頁的結構如下:

  1. 每一個商品都被包在一個 <div class="product-item"> 裡面。
  2. 商品名稱在 <h2 class="title"> 裡面。
  3. 商品價格在 <span class="price"> 裡面。

請幫我把這兩項資料抓出來,然後利用 pandas 套件,把這些資料存成一個名為 laptops_price.csv 的檔案。 請附上完整的 Try-Catch 錯誤處理與中文註解。如果遇到網頁阻擋爬蟲 (例如 HTTP 403),請在 requests 裡面加上模擬瀏覽器的 User-Agent 標頭。

AI 產出的神級爬蟲腳本:

import requests
from bs4 import BeautifulSoup
import pandas as pd

def scrape_laptops():
    url = 'https://example-shop.com/laptops'
    # 偽裝成真實的 Google Chrome 瀏覽器,避免被網站封鎖
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }

    try:
        print("開始爬取網頁資料...")
        # 1. 去敲門並下載網頁內容
        response = requests.get(url, headers=headers)
        response.raise_for_status() # 檢查是否有報錯 (如 404)

        # 2. 把下載下來的雜亂原始碼,交給 BeautifulSoup 整理
        soup = BeautifulSoup(response.text, 'html.parser')

        # 3. 找出所有 class="product-item" 的大箱子
        items = soup.find_all('div', class_='product-item')
        
        data_list = []

        # 4. 把箱子打開,一個一個拿出我們要的寶物
        for item in items:
            title_tag = item.find('h2', class_='title')
            price_tag = item.find('span', class_='price')
            
            # 如果都有抓到,就把文字清乾淨並存起來
            if title_tag and price_tag:
                title = title_tag.text.strip()
                price = price_tag.text.strip()
                data_list.append({"商品名稱": title, "價格": price})

        # 5. 交給 Pandas 大神,一鍵轉成 CSV 報表
        df = pd.DataFrame(data_list)
        df.to_csv('laptops_price.csv', index=False, encoding='utf-8-sig')
        print(f"✅ 爬蟲任務完成!共抓取了 {len(data_list)} 筆資料,已存成 laptops_price.csv")

    except Exception as e:
        print(f"🚨 爬蟲執行失敗:{e}")

# 執行函式
scrape_laptops()

爬蟲的道德與法律界線 (Robots.txt)

當你學會了這項強大的技能後,你可能會想:「太爽了!我要寫一個迴圈,每秒鐘去抓 100 次對手公司的網站,把他們的所有機密資料全部爬光!」

請立刻停止這個念頭! 如果你的爬蟲頻率太高,對方的伺服器會因為承受不住壓力而當機。在法律上,這可以被判定為 DDoS (阻斷服務攻擊),這可是要負擔刑事責任的!

在撰寫爬蟲時,請務必遵守網路界的不文規定:

  1. 不要當奧客:在迴圈裡面加上 time.sleep(3),讓爬蟲每抓完一頁就休息 3 秒鐘,不要造成對方伺服器負擔。
  2. 遵守 Robots.txt:在你要爬的網址後面加上 /robots.txt (例如 google.com/robots.txt)。這是一張公告欄,網站主人會在這裡告訴你哪些頁面「歡迎你爬」,哪些頁面「禁止進入」。請做個有道德的 Vibe Coder,遵守主人的規定。

在下一章中,我們將教你如何把這些剛抓下來、冷冰冰的 CSV 數字資料,瞬間轉換成讓老闆驚豔的**「彩色視覺化圖表 (Data Visualization)」**!



網路爬蟲:讓 Python 幫你收集資料

當你需要的資料沒有提供 API 時,爬蟲就是你的解決方案。Python 有豐富的爬蟲工具——從簡單的 requests+BeautifulSoup 到動態的 Playwright。

爬蟲的基本流程

1. 發送 HTTP 請求(requests)
2. 解析 HTML 內容(BeautifulSoup)
3. 擷取需要的資料(CSS Selector / XPath)
4. 儲存到 CSV 或資料庫

靜態 vs 動態網頁

| 類型 | 特徵 | 工具 | |:----|:----|:----| | 靜態網頁 | HTML 直接包含資料 | requests + BeautifulSoup | | 動態網頁 | 資料由 JavaScript 載入 | Playwright / Selenium | | API 回傳 | 直接回傳 JSON | requests |

實戰範例

import requests
from bs4 import BeautifulSoup

url = "https://example.com/products"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

for product in soup.select(".product-item"):
    name = product.select_one(".product-name").text.strip()
    price = product.select_one(".price").text.strip()
    print(f"{name}: {price}")

下一章預告:資料視覺化

爬蟲收集好資料後,下一步是讓資料說話——用 Matplotlib 和 Seaborn 做出老闆一看就懂的圖表。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!