Files
hbr-crawler/資料庫設定說明.md
DonaldFang 方士碩 f524713cb6 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>
2025-12-03 17:19:56 +08:00

4.2 KiB
Raw Permalink Blame History

資料庫設定說明

資料庫連線資訊

  • 資料庫類型: MySQL / MariaDB
  • 主機位址: mysql.theaken.com
  • 埠號: 33306
  • 資料庫名稱: HBR_scraper
  • 使用者名稱: A101
  • 密碼: Aa123456

快速開始

1. 安裝依賴套件

pip install -r requirements.txt

2. 測試資料庫連線

執行測試腳本來驗證資料庫連線並建立必要的資料表:

python test_db_connection.py

此腳本會執行以下測試:

  1. 測試基本資料庫連線
  2. 建立 HBR_scraper 資料庫(如果不存在)
  3. 測試連接到 HBR_scraper 資料庫
  4. 建立資料表結構articles, tags, article_tags
  5. 驗證資料表是否建立成功

3. 執行爬蟲

測試完成後,可以執行爬蟲,資料會自動儲存到資料庫:

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 關聯表)
  • 系統會自動建立新標籤(如果不存在)
  • 使用標籤快取機制,避免重複查詢資料庫

環境變數設定(可選)

如果需要透過環境變數設定資料庫連線資訊,可以設定:

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 中的預設值。

查詢資料範例

查詢所有文章

SELECT * FROM articles ORDER BY crawled_at DESC;

查詢特定分類的文章

SELECT * FROM articles WHERE category = 'management' ORDER BY publish_date DESC;

查詢付費文章

SELECT * FROM articles WHERE is_paywalled = 1;

查詢文章及其標籤

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;

查詢特定標籤的文章

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,請勿將此檔案提交到公開版本控制系統
  • 建議使用環境變數或設定檔管理敏感資訊
  • 定期備份資料庫
  • 監控資料庫空間使用情況