f524713cb626564a1dd0bea6cea9ff5d5d544348
- Scrapy 爬蟲框架,爬取 HBR 繁體中文文章 - Flask Web 應用程式,提供文章查詢介面 - SQL Server 資料庫整合 - 自動化排程與郵件通知功能 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
HBR Taiwan 文章爬蟲系統
這是一個自動化的 HBR Taiwan 文章爬蟲系統,每週一自動爬取最新文章並透過 Gmail 發送 CSV 檔案。
功能特色
- 🕷️ 自動爬取 HBR Taiwan 網站文章
- 📧 每週一自動發送文章清單到指定信箱
- 🔒 支援付費文章識別(不爬取內容)
- 📊 輸出結構化 CSV 格式
- ⚡ 使用 GitHub Actions 免維護伺服器
專案結構
├── hbr_crawler/ # Scrapy 爬蟲專案
│ ├── hbr_crawler/
│ │ ├── spiders/
│ │ │ └── hbr.py # HBR 爬蟲主程式
│ │ ├── items.py # 資料結構定義
│ │ ├── pipelines.py # CSV 輸出管道
│ │ └── settings.py # 爬蟲設定
│ └── scrapy.cfg
├── .github/workflows/
│ └── weekly.yml # GitHub Actions 排程
├── send_mail.py # 郵件發送腳本
├── requirements.txt # Python 依賴
└── README.md
快速開始
1. 安裝依賴
pip install -r requirements.txt
2. 手動測試爬蟲
cd hbr_crawler
scrapy crawl hbr
這會產生 hbr_articles.csv 檔案在專案根目錄。
3. 設定 Gmail 環境變數
export GMAIL_USERNAME='yourname@gmail.com'
export GMAIL_APP_PASSWORD='your-16-digit-app-password'
export MAIL_TO='kaeruzak@gmail.com'
4. 測試郵件發送
python send_mail.py hbr_articles.csv
Gmail App Password 設定
- 前往 Google 帳戶設定
- 安全性 → 兩步驟驗證(需先啟用)
- 應用程式密碼 → 選擇「郵件」
- 複製產生的 16 碼密碼
GitHub Actions 自動化
設定 Secrets
在 GitHub 專案的 Settings → Secrets and variables → Actions 新增:
GMAIL_USERNAME: 您的 Gmail 地址GMAIL_APP_PASSWORD: 16 碼 App PasswordMAIL_TO: kaeruzak@gmail.com
排程設定
系統預設每週一 08:00 (Asia/Taipei) 自動執行,對應 GitHub Actions 的 cron 設定:
schedule:
- cron: "0 0 * * 1" # 週一 00:00 UTC ≈ 台北 08:00
輸出格式
CSV 檔案包含以下欄位:
title: 文章標題url: 文章連結author: 作者publish_date: 發布日期summary: 文章摘要is_paywalled: 是否為付費文章 (1/0)category: 文章分類tags: 標籤(逗號分隔)content: 文章內容(僅非付費文章)
注意事項
- 系統遵守 robots.txt 規則
- 付費文章僅標記為
is_paywalled=1,不爬取內容 - 若網站改版,可能需要調整
hbr.py中的 CSS 選擇器 - 空結果週會跳過寄信(可修改為發送通知)
故障排除
爬蟲無法找到文章
檢查 hbr_crawler/hbr_crawler/spiders/hbr.py 中的 CSS 選擇器是否與網站結構匹配。
郵件發送失敗
- 確認 Gmail App Password 正確
- 檢查環境變數設定
- 確認網路連線正常
GitHub Actions 失敗
- 檢查 Secrets 設定
- 查看 Actions 執行日誌
- 確認 Python 版本相容性
授權
此專案僅供學習和研究使用,請遵守 HBR Taiwan 網站的使用條款。
Description
Languages
Python
64.5%
JavaScript
20.4%
HTML
8.7%
CSS
6.4%