iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
佛心分享-IT 人自學之術

當 Python 初學者遇到 AI:30 天人機協作學習手記系列 第 25 篇

[Day 25] 自動化微專案實戰 (二):結合 BeautifulSoup 與 Pandas,打造每日新聞頭條整理器

  • 分享至 

  • xImage
  •  

今日對話:如何串接爬蟲與 Pandas 表格?

我的 Prompt(提示詞):

「我想要寫一支爬蟲,去抓取 iThome 鐵人賽或技術文章板塊的『最新文章標題』與『網址連結』。
請教我如何結合 BeautifulSoup 抓取網頁,並把抓到的資料用 Pandas 整理成表格,最後匯出成 CSV 檔。另外,請一定要加上 try-except 防止網路連線錯誤當機!」

AI 導師的建議與拆解

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("🤖 爬蟲任務結束。")

今日小結

今天完成了一個極度實用的新聞頭條整理器。


上一篇
[Day 24] 自動化微專案實戰 :結合 API 與防錯機制,打造即時天氣查詢小助理
系列文
當 Python 初學者遇到 AI:30 天人機協作學習手記 共 25 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言