iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
生成式 AI

一起來打造 PTT 文章智慧問答系統!系列 第 11

【Day 11】使用 Celery + Redis 建立非同步排程 - 實作 Celery Beat

  • 分享至 

  • xImage
  •  

Hi大家好,
這是我參加 iT 邦幫忙鐵人賽的第 1 次挑戰,這次的主題聚焦在結合 Python 爬蟲、RAG(檢索增強生成)與 AI,打造一套 PTT 文章智慧問答系統。在過程中,我會依照每天進度上傳程式碼到 GitHub ,方便大家參考學習。也歡迎留言或來信討論,我的信箱是 gerryearth@gmail.com


在昨天成功建立並測試了 Celery 任務之後,今天我們要進一步讓爬蟲「自動化」起來!

透過 Celery Beat 的定時排程功能,我們可以讓系統按照設定的時間間隔,自動去 PTT 指定的版面抓取文章,不需要人工手動觸發。

這樣一來,不管是每小時監控熱門看板,還是每天定時更新資料,都能輕鬆完成。接下來就一步步帶你完成設定吧!


今日目標

  • 設定定時排程(使用 Celery Beat)

請先建立名稱為 celery_app 的新資料夾,並在資料夾中建立 __init__.py ,讓該資料夾被視為一個 package ,這樣 Python 解譯器就可以將它當作模組來匯入和使用。
並且把前面已經寫好的 scraper.py 放進資料夾中,統一管理 celery 相關任務。

昨天測試沒問題的話就來在 scraper.py 建立 celery 的排程任務吧!

from ptt_rag_dev.celery import app

@app.task()
def period_send_ptt_scrape_task():
    board_list = ['Gossiping', 'NBA', 'Stock', 'LoL', 'home-sale']
    for board in board_list:
        ptt_scrape(board)

這裡我打算爬五個指定版面,當然也可以自己設計喔!
幾天後這裡將會使用 chain 串接多個任務。

將 Celery 任務載入 Django 設定

任務寫好了還必須設定 Celery 任務佇列系統的配置,具體來說是指定匯入哪些模組,並安排定時任務,所以請在 celery.py 最後加上:

app.conf.imports = [
    "celery_app.scraper",
]

app.conf.beat_schedule = {
    'scrape-every-hour': {
        'task': 'celery_app.scraper.period_send_ptt_scrape_task', # 指定任務位置
        'schedule': 3600, # 定時3600秒
    }
}

app.conf.imports 用來設定 Celery 應該要匯入哪些模組(modules)來尋找任務(tasks)
app.conf.beat_schedule 用來設定定時任務,設定每隔3600秒跑一次 period_send_ptt_scrape_task

測試

到這邊差不多較告一個段落了,我們可以測試一下能不能正常運作。
首先使用 Docker 部屬:

docker-compose up -d --build

https://ithelp.ithome.com.tw/upload/images/20250609/20172834s4HHKJkCzx.png

接下來進去各個容器是否正常運作,沒意外的話每隔一小時就會自動爬蟲,將 PTT 文章存入資料庫。

由於定時任務一開始不會執行,會等到定時時間到了才執行,可以暫時把3600秒改為60秒進行測試。

因為我們之前沒有在 Docker 上遷移資料庫,因此在 Docker 啟用的時候必須記得遷移資料庫!

先進入 Docker 的 django_web ,再遷移資料庫:

docker exec -it django_web /bin/bash
python manage.py makemigrations
python manage.py migrate

測試結果

https://ithelp.ithome.com.tw/upload/images/20250811/20172834HSL7XD8S23.png


明日預告【Day 12】監控與除錯 - 記錄爬蟲執行 Log 並儲存至資料庫
下一篇將補上每次爬蟲的執行紀錄,包括任務時間、結果與錯誤訊息,方便後續監控與除錯。


上一篇
【Day 10】使用 Celery + Redis 建立非同步排程 - 建立 Celery 設定與任務
下一篇
【Day 12】監控與除錯 - 記錄爬蟲執行 Log 並儲存至資料庫
系列文
一起來打造 PTT 文章智慧問答系統!13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言