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:
180
資料庫設定說明.md
Normal file
180
資料庫設定說明.md
Normal 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`,請勿將此檔案提交到公開版本控制系統
|
||||
- 建議使用環境變數或設定檔管理敏感資訊
|
||||
- 定期備份資料庫
|
||||
- 監控資料庫空間使用情況
|
||||
|
||||
|
||||
Reference in New Issue
Block a user