當你需要整理 1000 筆商品比價資料時...
想像一個情境:你的老闆今天早上交給你一個任務,他希望你把 PChome、Momo、Yahoo 購物中心上面,所有標題含有「電競筆電」的商品名稱與價格全部抓下來,整理成一份 Excel 報表給他,因為他想要做競品分析。
如果你不會寫程式,你只能認命地打開三個網頁,搜尋「電競筆電」。然後用滑鼠反白第一台筆電的名字,按下 Ctrl+C,切換到 Excel,按下 Ctrl+V;再切回網頁,反白價格,Ctrl+C,切換到 Excel,Ctrl+V。 當你重複這個無聊的動作 10 遍之後,你就會開始懷疑人生。當你做到第 500 遍的時候,天已經黑了,而且你還可能因為眼花而貼錯格子。
這就是為什麼我們需要「網路爬蟲 (Web Scraper)」。
網路爬蟲就像是一隻你養的虛擬蜘蛛,你可以給它一個網址,然後告訴它:「去幫我把網頁裡面所有紅色的字、以及標著錢號 $ 的數字全部咬回來給我」。 它可以在 3 秒內爬完 10 個網頁,並且完美無誤地把幾千筆資料整整齊齊地排好。
在 Python 的生態系中,有兩個最知名的爬蟲神兵利器:
- Requests:負責去敲網頁的門,把網頁的 HTML 原始碼全部下載下來。
- 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進行解析。 網頁的結構如下:
- 每一個商品都被包在一個
<div class="product-item">裡面。- 商品名稱在
<h2 class="title">裡面。- 商品價格在
<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 (阻斷服務攻擊),這可是要負擔刑事責任的!
在撰寫爬蟲時,請務必遵守網路界的不文規定:
- 不要當奧客:在迴圈裡面加上
time.sleep(3),讓爬蟲每抓完一頁就休息 3 秒鐘,不要造成對方伺服器負擔。 - 遵守 Robots.txt:在你要爬的網址後面加上
/robots.txt(例如google.com/robots.txt)。這是一張公告欄,網站主人會在這裡告訴你哪些頁面「歡迎你爬」,哪些頁面「禁止進入」。請做個有道德的 Vibe Coder,遵守主人的規定。
在下一章中,我們將教你如何把這些剛抓下來、冷冰冰的 CSV 數字資料,瞬間轉換成讓老闆驚豔的**「彩色視覺化圖表 (Data Visualization)」**!