今日對話:如何串接爬蟲與 Pandas 表格?
我的 Prompt(提示詞):
「我想要寫一支爬蟲,去抓取 iThome 鐵人賽或技術文章板塊的『最新文章標題』與『網址連結』。
請教我如何結合 BeautifulSoup 抓取網頁,並把抓到的資料用 Pandas 整理成表格,最後匯出成 CSV 檔。另外,請一定要加上 try-except 防止網路連線錯誤當機!」
AI 導師給了我們一個清晰的「自動化管線 (Pipeline)」拆解圖:
這支程式可以分為四個模組,就像工廠的生產線一樣:
1.連線與防護 (Requests + Try-Except):負責把網頁的 HTML 原始碼載下來,並確保網路斷線時不會崩潰。
2.解析與萃取 (BeautifulSoup):在雜亂的 HTML 程式碼中,精準定位到包著「標題」與「連結」的 HTML 標籤(例如 或 )。
3.整理格式 (List + Dictionary):把爬到的每一筆資料,整理成 {"標題": "...", "連結": "..."} 的字典格式,並通通裝進一個大列表 (List) 裡。
4.產出報表 (Pandas):把整理好的 List 交給 Pandas,一鍵轉成 DataFrame 並輸出 CSV!
我在 VS Code 建立了 day25.py檔案。我們以 iThome 技術問答/文章區 為目標網站,將這四個步驟完美結合:
python
import requests
from bs4 import BeautifulSoup
import pandas as pd
print("🕵️♂️ 啟動爬蟲機器人,正在前往 iThome 抓取最新技術文章...")
print("-" * 50)
url = "https://ithelp.ithome.com.tw/articles?tab=tech"
#加上 User-Agent 偽裝成正常的瀏覽器,避免被網站阻擋
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/115.0.0.0 Safari/537.36"
}
try:
#--- 步驟 1:發送請求 ---
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
#--- 步驟 2:解析網頁 ---
soup = BeautifulSoup(response.text, "html.parser")
#iThome 的文章標題通常包在 class 為 'qa-list__title' 的 標籤裡
articles = soup.find_all("h3", class_="qa-list__title")
#--- 步驟 3:萃取與整理資料 ---
news_data = [] # 準備一個空的列表來裝資料
for article in articles:
title_tag = article.find("a") # 尋找標題裡面的 連結標籤
if title_tag:
title = title_tag.text.strip() # 取得文字並去除頭尾空白
link = title_tag.get("href").strip() # 取得網址連結
#把一筆資料包成字典,塞進列表中
news_data.append({
"文章標題": title,
"文章連結": link
})
#--- 步驟 4:交給 Pandas 產出報表 ---
if len(news_data) > 0:
df = pd.DataFrame(news_data)
file_name = "ithome_tech_articles.csv"
# 輸出 CSV (避免繁體中文亂碼要用 utf-8-sig)
df.to_csv(file_name, index=False, encoding="utf-8-sig")
print(f"✅ 爬取成功!共抓取 {len(df)} 篇文章。")
print(f"📁 報表已自動儲存為:{file_name}")
# 在終端機偷偷預覽前三筆
print("\n👇 資料預覽:")
print(df.head(3))
else:
print("⚠️ 網頁抓取成功,但沒有找到符合的文章標籤。")
#--- 防護網:攔截連線錯誤 ---
except requests.exceptions.RequestException as e:
print("❌ [連線失敗] 無法連上網站,請檢查網路狀態。")
except Exception as e:
print(f"❌ 發生未知錯誤:{e}")
print("-" * 50)
print("🤖 爬蟲任務結束。")
今天完成了一個極度實用的新聞頭條整理器。