今日對話:什麼是爬蟲?怎麼從網頁裡找資料?
我的 Prompt(提示詞):
「如果一個網站沒有提供 API,但我想要把它網頁上的標題或內容抓下來,該怎麼做?請用白話文教我什麼是『網路爬蟲』?我們該如何看懂網頁結構?並介紹 BeautifulSoup 套件的作用與基本寫法。」
AI 導師笑著說,爬蟲其實沒有聽起來那麼高深,它的邏輯非常直白:
爬蟲就是讓 Python 模仿你的動作:去那個網址 ➔ 把背後那一整坨密密麻麻的 HTML 原始碼全部下載下來。
網頁的骨架:HTML 標籤
HTML 就像是網頁的「收納箱」。例如 我是標題 或 100元。我們想要的資料,通常都被包在這些帶有特定標籤(Tag)與類別名稱(Class)的箱子裡。
神器 BeautifulSoup 登場!
如果requests是幫我們把整車 HTML 收納箱搬回家的搬家工人,那 BeautifulSoup 就是一把精準的「瑞士刀」與「透視鏡」。
你只要跟它說:「幫我找出所有標籤是 span,而且 class 是 price 的箱子,並把裡面的東西拿出來」,它就會瞬間幫你過濾出乾淨的文字!
步驟一:安裝 BeautifulSoup 套件
這也是第三方套件,所以要在 VS Code 的終端機輸入:
bash
pip install beautifulsoup4
步驟二:建立 day21.py檔案,寫第一隻爬蟲!
我們這次使用專門設計給新手練習爬蟲的國外名言網站 (quotes.toscrape.com) 來進行安全的測試:
python
import requests
from bs4 import BeautifulSoup
#1. 目標網址 (名言佳句練習站)
url = "https://quotes.toscrape.com/"
print("🕷️ 派出 requests 蜘蛛前往抓取網頁...")
response = requests.get(url)
#確保網頁有正常回應 (200)
if response.status_code == 200:
print("✅ 網頁原始碼下載成功!交給 BeautifulSoup 解析...")
#2. 把拿回來的 HTML 原始碼交給 BeautifulSoup 解析
#"html.parser" 是告訴它這是一個 HTML 檔案
soup = BeautifulSoup(response.text, "html.parser")
#3. 開始尋寶!
#觀察網頁原始碼後發現,名言的文字都被包在 標籤裡
#使用 find_all() 一口氣找出所有符合條件的標籤
quotes = soup.find_all("span", class_="text")
print("-" * 40)
print("💡 抓取到的前五句名言:\n")
#4. 用 for 迴圈把它們印出來
#[:5] 代表我們只取串列的前 5 筆資料
for i, quote in enumerate(quotes[:5], 1):
# 使用 .text 屬性,把 HTML 標籤脫掉,只留下裡面的純文字!
print(f"【名言 {i}】 {quote.text}")
print("-" * 40)
else:
print(f"❌ 連線失敗,狀態碼:{response.status_code}")
今天我們結合了 requests 和 BeautifulSoup,成功破解了沒有 API 的網站,直接從 HTML 原始碼中萃取出有價值的數據!