建立程式 save_to_db.py
在project資料夾新增一個檔案,貼上以下程式碼:
# save_to_db.py
import sqlite3
import csv
import argparse
def init_db(dbname="crawler.db"):
conn = sqlite3.connect(dbname)
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS links (
id INTEGER PRIMARY KEY AUTOINCREMENT,
text TEXT,
url TEXT UNIQUE
)
""")
conn.commit()
return conn
def save_csv_to_db(csvfile, dbname="crawler.db"):
conn = init_db(dbname)
cur = conn.cursor()
with open(csvfile, newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
try:
cur.execute("INSERT OR IGNORE INTO links (text, url) VALUES (?, ?)",
(row["text"], row["url"]))
except Exception as e:
print("⚠️ 插入失敗:", e)
conn.commit()
conn.close()
print(f"✅ {csvfile} 已存入 {dbname}")
def list_links(dbname="crawler.db", limit=20):
conn = sqlite3.connect(dbname)
cur = conn.cursor()
cur.execute("SELECT id, text, url FROM links LIMIT ?", (limit,))
for row in cur.fetchall():
print(f"[{row[0]}] {row[1]} - {row[2]}")
conn.close()
if __name__ == "__main__":
ap = argparse.ArgumentParser(description="將 CSV 存進 SQLite,並可查詢")
ap.add_argument("--csv", help="要匯入的 CSV 檔名")
ap.add_argument("--list", action="store_true", help="列出資料庫前幾筆")
ap.add_argument("--db", default="crawler.db", help="SQLite 資料庫名稱")
args = ap.parse_args()
if args.csv:
save_csv_to_db(args.csv, args.db)
if args.list:
list_links(args.db)
使用方式
1.把昨天產生的 clean_links.csv 存進 SQLite:
python save_to_db.py --csv clean_links.csv
2.列出前 20 筆:
python save_to_db.py --list
會看到類似:[1] 技術文章 - https://ithelp.ithome.com.tw/articles?tab=tech [2] 2025 鐵人賽 - https://ithelp.ithome.com.tw/2025ironman/ ...
實作:
今日重點
SQLite 是 Python 內建的資料庫,不需要額外安裝。
用 INSERT OR IGNORE 可以避免重複資料。
有了資料庫,你可以用 SQL 做更複雜的查詢(例如搜尋包含「Python」的標題)。