總覽

從一支 .py,到會自己做決定的 Agent

同一個 Airbnb 住宿雷達,三堂課長大三次:第 1 堂用純 Python 每天撈房源、照條件過濾;第 2 堂讓 AI 幫你填條件、逐間判斷、寫早報;第 3 堂交給 Agent 自己決定要搜尋什麼、去看哪幾間的細節。左邊側欄鎖住的兩頁,會在那兩堂用提示詞做出來。

—
目前符合
—
新出現
—
降價
—
已看過
1純 Python這一堂
沒有 AI。一支 .py 就能每天自動撈、照條件篩、標記看過。每一步都是人先寫死的 if/else。
✓行程、預算、房型、必備設施的條件表單
✓每天固定時間排程撈取,新出現/降價提示
✓看過標記、隱藏已看過
→
2加入 AI第 2 堂
第 1 堂全部保留,接上 Gemini:AI 只是流程裡被呼叫的一個函式,流程順序還是程式排的。
+「一句話填條件」:帶爸媽去東京一週、要浴缸
+每間房源的 AI 判斷與分數,軟條件(近車站、有電梯)打勾或打叉
+撈完自動寫一段早報,點推薦直接跳到那間
→
3Agent第 3 堂
第 2 堂全部保留,多一個聊天視窗:流程改由 AI 決定,人只給目標。
+「跟 Agent 聊聊」:用對話下需求、追問
+它會自己搜尋、打開房源看設施、房規與評價
+回覆是 Markdown 表格,點名稱直接開 Airbnb

怎麼開始

1先跑一次 setup.bat:桌面會出現小怪獸捷徑「AIB 教學版」,接著建 venv、裝套件、複製 .env
2雙擊桌面的桌寵(或 start.bat),到「1 純 Python」按「編輯條件」填行程,再按「立即撈取」
3之後每天 08:00 自動撈,新出現與降價會標出來;結果留在 data/results.json

接下來的兩堂

2把 提示詞/第2堂_加入AI.md 整段貼給 Claude Code,它會新增 ai.py、接上撈取流程、打開側欄的「2 加入 AI」
3把 提示詞/第3堂_Agent.md 貼上去,它會新增 agent.py、把功能包成工具、打開「3 Agent」
✓每一堂做完,先照提示詞最後的「驗收」跑一遍,再用 diff 看改了哪些地方
載入中…
—
尚未撈取

做法:打開 ,把整段貼給 Claude Code,等它做完、跑過提示詞最後的驗收清單,這一頁就會打開。

回總覽

這是什麼

「AIB 住宿雷達」教學版的起點:只用 Python 標準庫(airbnb_agent.py 一支程式)+一個網頁(index.html),每天固定時間到 Airbnb 撈符合條件的房源、過濾後顯示在本機網頁。左側欄是整門課的骨架,三堂課各填一頁。

1 純 Python2 加入 AI3 Agent
你怎麼用填表單、按撈取填表單,AI 幫你填、幫你評分對話視窗:講目標、追問
誰決定流程你(程式寫死的 if/else)還是你,AI 是被呼叫的函式AI:自己決定搜幾次、要不要放寬、要不要點進房源
怎麼做出來已經做好提示詞/第2堂_加入AI.md提示詞/第3堂_Agent.md

這支程式怎麼拿到 Airbnb 資料

沒有用 API(Airbnb 不對外開放)。程式像瀏覽器一樣打開搜尋頁,Airbnb 會把第一頁結果的 JSON 整包塞在網頁裡給自己的前端用,程式把它挖出來解析。翻頁靠頁面附的 cursor,每頁之間隨機停 1.5–3 秒;頁數限制 1–5 頁、每天撈一次,避免被防爬擋下。房源的長篇描述與評價全文是前端載入後才拿的,抓不到。

上課用:示範資料與不自動撈取

一間教室三十台電腦同時撈同一個網站,對 Airbnb 來說就是單一 IP 瞬間幾十個請求,很容易整班一起被擋半小時。所以教材裡預設打開兩個開關(都在 .env):

開關作用
AIB_DEMO=1用 demo_results.json 的房源,完全不連 Airbnb。過濾、排序、AI 判斷、Agent 全部照跑,只有「去 Airbnb 拿」那一步被換掉;畫面上會顯示「示範資料」膠囊
AIB_FETCH_ON_START=0程式啟動時不自動補撈,要撈請自己按「立即撈取」

想真的撈:把 AIB_DEMO 那一行前面加 # 註解掉,重開程式即可。老師要重新產生示範資料就先真撈一次,再跑 python airbnb_agent.py --make-demo。

結果列上的「測試撈取」是檢查用的:真的連一次 Airbnb,但只撈 1 頁、什麼都不寫入,用來確認「今天還撈得到嗎」(Airbnb 改版或擋人時會在這裡先看出來),不會動到現有結果與歷史紀錄。

每天自動撈取

程式開著就在「每天自動撈取」設定的時間撈;沒開的話,下次打開發現今天還沒撈會補撈一次。想不開視窗也撈,用 advanced/schedule_daily.bat 登錄 Windows 工作排程器。

資料放哪裡

  • conditions.json:出遊條件(表單存的就是它,第一次啟動自動建立)
  • data/results.json:最近一次撈到的結果;data/seen.json:看過哪些房源、上次價格(判斷 NEW/降價用)
  • data/marks.json:你按過「看過了」的房源