跳到主要內容

發表文章

目前顯示的是 11月, 2025的文章

DE Day 18 公開資料實戰:政府開放資料平台

DE Day 18 公開資料實戰:政府開放資料平台 執行需求:CPU 可跑 。今天進入採集篇的第三篇,把 Day 17 的禮貌爬蟲套件接到「中華民國政府資料開放平臺」( data.gov.tw )的真實目錄。這個平臺收錄了上萬個政府機關產出的開放資料集,依「政府資料開放授權條款第 1 版」釋出。我們會用一支可重現的腳本,把「找資料 → 看 metadata → 確認授權 → 下載 CSV/JSON → 落進 DuckDB」的完整流程做出來。版本基準仍是 2025 年 11 月:Python 3.13、httpx 0.28、DuckDB 1.4、Polars 1.33。 引言 Day 15 與 Day 16 給了爬蟲與動態瀏覽器兩個工具,Day 17 加上了禮貌與工程紀律。今天把它們用在「真實世界的公開資料」上:政府資料開放平臺。這個平臺由國家發展委員會管理,從 2012 年推動至今已累積上萬個資料集,涵蓋交通、氣象、財稅、戶政、警政、統計、環境等領域。對資料工程師來說,這是「真實、可商用、有版本」的來源,比 Kaggle 的練習資料更具實務價值。 今天的目標很具體:用一份可重現的 Python 腳本,去平臺找一份「每日會更新」的資料集(例如空氣品質監測、即時雨量、停水公告),把它每日拉到本地、落地成 Parquet、寫進 DuckDB,並用一段 SQL 確認資料完整性。我們也會談到一個資料工程師必修的倫理議題:「政府資料開放授權條款第 1 版」允許你做什麼、不允許你做什麼、與個資法的界線在哪裡。這不是法律諮詢,但至少把幾個常見誤解講清楚。 在動手前,先說明一個重要前提:本系列的所有範例都「不鎖定單一資料集」。原因是政府平臺的資料集 ID、欄位名稱、檔案 URL 都可能改版,鎖定特定 ID 會讓範例在某天突然失效。所以今天我們教的是「方法」:用平臺的搜尋 API 或瀏覽器查詢頁,找到資料集描述,讀 metadata,確認授權,最後用通用方法下載。你讀完之後可以把方法套到任何資料集。 政府資料開放平臺的結構與授權 先認識平臺的結構。 data.gov.tw 主要由四個部分組成:首頁的搜尋、目錄頁、資料集頁、檔案下載頁。「資料集(dataset)」是多個檔案的集合,例如「空氣品質監測資料」就包含每月、每日、每小時三種檔案。「檔案(resour...

DE Day 16 動態頁面:Playwright 自動化瀏覽器

DE Day 16 動態頁面:Playwright 自動化瀏覽器 執行需求:CPU 可跑 。今天是「資料工程實戰」系列的第十六篇,承接 Day 15 用 requests 與 BeautifulSoup 抓靜態 HTML 的作法。當網頁內容是靠 JavaScript 動態渲染(俗稱 SPA)或需要互動才能取得資料時,requests 拿到的常常是空白殼殼,這時就要派出真正的瀏覽器上場。我們會用 Playwright 1.50(2025 年 11 月的主流版本)示範四種動態場景:等待元素出現、捲動載入、按下分頁、處理登入,並把結果寫進 Day 8 已建好的 DuckDB。 引言 Day 15 我們用 requests 抓公開資料頁,幾行程式就把表格拉回來;但實務上常會碰到 requests 抓回來是空殼的情況——HTML 裡沒有資料、要等 JavaScript 跑完才會塞進去。常見原因有三個:第一,網站用 React、Vue、Angular 等前端框架,內容是執行階段才掛上的;第二,資料透過 XHR 或 fetch 二次呼叫才取得,HTML 只剩骨架;第三,需要捲動到某個位置、按下「載入更多」才會出來新資料。這三種狀況 requests 都不在行,我們需要能「真的把網頁跑起來」的工具。 Playwright 是微軟在 2020 年開源的瀏覽器自動化函式庫,跟 Selenium、Cypress、Puppeteer 同類,但有兩個特點讓它在資料工程領域特別受歡迎:第一,內建等待機制(auto-wait)寫起來直覺,不會滿地雷;第二,支援 Chromium、Firefox、WebKit 三套引擎,可以模擬不同瀏覽器。2025 年 11 月的主流版本是 1.50 世代,安裝指令仍是 pip install playwright 加上 python -m playwright install chromium ,這是 Playwright 1.5x 的固定安裝法。 今天的文章會做五件事:第一,說明 Playwright 與 requests 的差別、何時該用哪一個;第二,安裝並啟動第一個無頭瀏覽器;第三,示範四種動態頁面處理——等待元素、捲動載入、按下分頁、模擬登入;第四,把抓下來的資料寫進 DuckDB 與 Parquet,與 Day 8、Day 9 的...

DE Day 17 爬蟲的禮儀與工程:速率、重試與 robots.txt

DE Day 17 爬蟲的禮儀與工程:速率、重試與 robots.txt 執行需求:CPU 可跑 。今天承接 Day 15 的靜態爬蟲與 Day 16 的動態瀏覽器自動化,把焦點拉回「工程化」與「禮儀」這兩件資料工程必談的事。我們會把昨天寫的 Playwright 範例擴充成「會讀 robots.txt、會節流、會重試、會留下稽核紀錄」的版本,並用真實公開網站(中華民國政府資料開放平臺 data.gov.tw 與 example.com 的 robots.txt)做端到端示範。版本基準沿用系列:Python 3.13、httpx 0.28、Playwright 1.50,皆為 2025 年 11 月的主流世代。 引言 寫爬蟲最常被問到的不是「怎麼寫」,而是「這樣做合法嗎」、「會不會被 ban」、「怎麼不踩到對方擋」。這些問題本質上都不是技術問題,而是工程倫理與法律邊界。資料工程師每天都在跟這條線打交道:抓太多是濫用、抓太少效率差、抓錯資料更麻煩。今天我們把這條線畫清楚,並且把它寫成可重複、可交接、可被審查的程式碼。 這篇會做六件事:第一,介紹 robots.txt 規範與它在台灣 / 國際的法律定位;第二,說明禮貌爬蟲的四個核心原則(節流、識別、重試、稽核);第三,用 urllib 寫一個小型的 robots.txt 解析器,把昨天的 Playwright 範例加上這個能力;第四,設計「節流 + 重試」共用模組,用指數退避(exponential backoff)與抖動(jitter)避免雪崩;第五,把整個流程包成一支 pipelines/day17_etiquette.py ;第六,整理爬蟲相關的台灣法規(個資法、著作權法、資料庫保護)與灰色地帶的實務判斷。 這套禮儀原則不是寫給「倫理學家」看的,而是寫給「每天要交付管線的工程師」看的。一支好爬蟲的標準是「對方伺服器管理員不會想擋你」。換句話說,禮貌不是道德選擇,而是工程品質的延伸。下面我們就把這個品質做出來。 禮貌爬蟲的核心原則 先建立四個原則,再談實作。第一是「節流(throttling)」:不要用滿對方的頻寬。一般建議是每秒 1 到 5 個請求(QPS = 1 到 5);對於公開資料平台,可以再降到每秒 0.5 個。第二是「識別(identification)」:在 User-...