Initial commit: HBR 文章爬蟲專案

- Scrapy 爬蟲框架,爬取 HBR 繁體中文文章
- Flask Web 應用程式,提供文章查詢介面
- SQL Server 資料庫整合
- 自動化排程與郵件通知功能

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-03 17:19:56 +08:00
commit f524713cb6
35 changed files with 6719 additions and 0 deletions

180
資料庫設定說明.md Normal file
View File

@@ -0,0 +1,180 @@
# 資料庫設定說明
## 資料庫連線資訊
- **資料庫類型**: MySQL / MariaDB
- **主機位址**: mysql.theaken.com
- **埠號**: 33306
- **資料庫名稱**: HBR_scraper
- **使用者名稱**: A101
- **密碼**: Aa123456
## 快速開始
### 1. 安裝依賴套件
```bash
pip install -r requirements.txt
```
### 2. 測試資料庫連線
執行測試腳本來驗證資料庫連線並建立必要的資料表:
```bash
python test_db_connection.py
```
此腳本會執行以下測試:
1. 測試基本資料庫連線
2. 建立 HBR_scraper 資料庫(如果不存在)
3. 測試連接到 HBR_scraper 資料庫
4. 建立資料表結構articles, tags, article_tags
5. 驗證資料表是否建立成功
### 3. 執行爬蟲
測試完成後,可以執行爬蟲,資料會自動儲存到資料庫:
```bash
cd hbr_crawler
scrapy crawl hbr
```
## 資料表結構
### articles文章主表
| 欄位 | 類型 | 說明 |
|------|------|------|
| id | BIGINT | 主鍵,自動遞增 |
| title | VARCHAR(500) | 文章標題 |
| url | VARCHAR(1000) | 文章網址(唯一索引) |
| author | VARCHAR(200) | 作者名稱 |
| publish_date | DATETIME | 發布日期 |
| summary | TEXT | 文章摘要 |
| is_paywalled | TINYINT(1) | 是否為付費文章 |
| category | VARCHAR(100) | 文章分類 |
| content | TEXT | 文章內容 |
| created_at | TIMESTAMP | 建立時間 |
| updated_at | TIMESTAMP | 更新時間 |
| crawled_at | DATETIME | 爬取時間 |
### tags標籤表
| 欄位 | 類型 | 說明 |
|------|------|------|
| id | BIGINT | 主鍵,自動遞增 |
| name | VARCHAR(100) | 標籤名稱(唯一索引) |
| created_at | TIMESTAMP | 建立時間 |
### article_tags文章標籤關聯表
| 欄位 | 類型 | 說明 |
|------|------|------|
| id | BIGINT | 主鍵,自動遞增 |
| article_id | BIGINT | 文章 ID外鍵 |
| tag_id | BIGINT | 標籤 ID外鍵 |
| created_at | TIMESTAMP | 建立時間 |
## 資料處理邏輯
### 重複文章處理
- 系統會依據 URL 檢查文章是否已存在
- 如果文章已存在,會更新現有記錄(更新 `crawled_at` 時間戳和所有欄位)
- 如果文章不存在,會插入新記錄
### 標籤處理
- 標籤採用正規化設計tags 表 + article_tags 關聯表)
- 系統會自動建立新標籤(如果不存在)
- 使用標籤快取機制,避免重複查詢資料庫
## 環境變數設定(可選)
如果需要透過環境變數設定資料庫連線資訊,可以設定:
```bash
export DB_HOST=mysql.theaken.com
export DB_PORT=33306
export DB_USER=A101
export DB_PASSWORD=Aa123456
export DB_NAME=HBR_scraper
```
系統會優先使用環境變數,如果沒有設定則使用 `settings.py` 中的預設值。
## 查詢資料範例
### 查詢所有文章
```sql
SELECT * FROM articles ORDER BY crawled_at DESC;
```
### 查詢特定分類的文章
```sql
SELECT * FROM articles WHERE category = 'management' ORDER BY publish_date DESC;
```
### 查詢付費文章
```sql
SELECT * FROM articles WHERE is_paywalled = 1;
```
### 查詢文章及其標籤
```sql
SELECT
a.id,
a.title,
a.url,
GROUP_CONCAT(t.name) as tags
FROM articles a
LEFT JOIN article_tags at ON a.id = at.article_id
LEFT JOIN tags t ON at.tag_id = t.id
GROUP BY a.id, a.title, a.url;
```
### 查詢特定標籤的文章
```sql
SELECT DISTINCT a.*
FROM articles a
INNER JOIN article_tags at ON a.id = at.article_id
INNER JOIN tags t ON at.tag_id = t.id
WHERE t.name = '領導力';
```
## 故障排除
### 連線失敗
1. 檢查網路連線
2. 確認資料庫主機位址和埠號正確
3. 確認使用者名稱和密碼正確
4. 檢查防火牆設定
### 資料表建立失敗
1. 確認使用者有 CREATE TABLE 權限
2. 檢查 SQL 檔案路徑是否正確
3. 查看錯誤日誌了解詳細錯誤訊息
### 資料插入失敗
1. 檢查資料庫連線是否正常
2. 確認資料表結構是否正確建立
3. 檢查資料格式是否符合資料表定義
## 注意事項
- 資料庫連線資訊已寫入 `settings.py`,請勿將此檔案提交到公開版本控制系統
- 建議使用環境變數或設定檔管理敏感資訊
- 定期備份資料庫
- 監控資料庫空間使用情況