當你需要整理 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)」**!

解鎖完整教學內容

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