返回部落格

什麼是網頁抓取Web Scraping?原理、流程與合規實踐

網頁抓取是把網頁內容自動取得並轉換為結構化資料的過程。本文講清靜態與動態頁面的區別、工具選擇、完整實施流程及robots.txt和個人資料合規邊界。

網頁抓取(Web Scraping)是透過程式取得網頁內容,再從 HTML、介面回應或瀏覽器渲染結果中擷取所需欄位,並整理成表格、JSON 或資料庫記錄的過程。常見用途包括價格監測、公開商品資訊彙整、輿情研究、SEO 稽核、徵才資訊分析和內部資料遷移。

網頁抓取不是簡單的「複製貼上自動化」。一個可靠的專案至少要處理存取權限、頁面結構、動態渲染、分頁、去重、限速、異常重試、資料品質和隱私合規。能否在技術上存取某個頁面,也不等於有權收集、保存或再利用其中的全部資料。

Web Scraping與網路爬蟲有什麼區別?

兩者經常混用,但關注點不同:

  • **網路爬蟲(Web Crawler)**側重發現和遍歷 URL,例如從首頁沿連結持續尋找新頁面;
  • **網頁抓取(Web Scraping)**側重從目標頁面中擷取欄位,例如商品名、價格、庫存狀態和更新時間;
  • 一個完整系統通常先爬取 URL,再抓取頁面,最後清洗和儲存資料。

搜尋引擎就是典型的爬取與處理系統。現代網頁還可能需要執行 JavaScript 後才能看到完整內容。商業資料採集的規模通常小得多,但「發現頁面、取得內容、解析欄位、儲存結果」的基本鏈路相似。

網頁抓取的基本工作原理

一個抓取任務通常經過六個環節。

1. 明確資料目標

先定義真正需要的欄位、更新頻率、覆蓋範圍和用途。例如,價格監測未必需要使用者評論者的姓名;SEO 稽核只需要標題、狀態碼和 canonical 標籤,也無需保存頁面全部正文。

目標越明確,越容易控制請求量、儲存成本和個人資料風險。

2. 取得頁面

對於伺服端直接回傳完整 HTML 的靜態頁面,一般 HTTP 用戶端通常足夠。對於依賴 JavaScript 載入內容、需要點擊或捲動的動態頁面,可能要使用真實瀏覽器自動化工具進行渲染。

但在引入瀏覽器前,應先檢查網站是否提供官方 API、資料匯出、RSS、站點地圖或公開資料集。這些管道通常更穩定,也更容易符合使用條款。

3. 解析與定位元素

取得 HTML 後,程式會用 CSS 選擇器或 XPath 定位內容。Scrapy 選擇器官方文件說明,選擇器能夠從 HTML 中擷取節點,Scrapy 回應物件直接提供 .css().xpath() 等介面。

選擇器應依賴穩定語義,例如資料屬性、結構化資料或明確的容器層級,盡量避免依賴隨頁面改版頻繁變化的隨機類別名稱。

4. 清洗與標準化

網頁文字往往混有空格、貨幣符號、單位和在地化格式。清洗階段需要統一:

  • 字元編碼與換行;
  • 日期、時區和數字格式;
  • 貨幣與計量單位;
  • 相對 URL 與絕對 URL;
  • 缺失值、重複記錄和異常值。

原始值與清洗值最好分別保留,方便發生爭議或規則變化時追溯。

5. 儲存與版本管理

少量資料可寫入 CSV 或試算表,持續任務更適合資料庫或物件儲存。除業務欄位外,還應保存來源 URL、抓取時間、回應狀態、資料版本和解析器版本。這樣才能判斷某個變化來自網站、解析規則還是抓取失敗。

6. 監控與維護

網頁會改版,欄位會移動,介面會變化。生產抓取應監控成功率、空值率、重複率、回應時間、HTTP 狀態碼和單位時間請求量。某欄位突然全部為空時,應暫停任務並檢查,不要把空值直接覆蓋正常歷史資料。

靜態頁面、動態頁面與介面該怎麼選?

優先使用官方API或匯出

官方 API 通常提供穩定欄位、分頁和權限機制。只要許可、配額和費用滿足需求,它通常比解析網頁更可靠。

靜態HTML適合輕量抓取

如果「檢視網頁原始碼」就能看到目標資料,可用 HTTP 用戶端加 HTML 解析器。它啟動快、資源佔用低,適合公開清單、文件和內容頁。

動態頁面才考慮瀏覽器自動化

如果內容在腳本執行後出現,或者必須完成授權範圍內的點擊、篩選和捲動,才考慮 Playwright 等瀏覽器工具。Playwright BrowserType 文件展示了啟動或連線瀏覽器的自動化介面。

瀏覽器自動化消耗更多 CPU 和記憶體,頁面選擇器也更容易受改版影響。因此不要把它作為所有專案的預設方案,更不應藉它繞過登入權限、驗證碼或存取控制。

如何開始一個網頁抓取專案?

步驟一:確認許可和替代管道

檢視網站服務條款、API 條款、robots.txt、版權聲明和資料許可。若涉及登入後內容、付費內容、個人資料或大規模商業使用,應由法務或資料保護負責人確認依據。

robots.txt 是網站向自動用戶端表達抓取規則的標準機制。RFC 9309明確說明,它用於服務擁有者控制爬蟲如何存取資源,但不是存取授權機制。也就是說,允許抓取並不自動授予內容版權或個人資料處理權;禁止規則也不應被當作需要「技術繞過」的障礙。

步驟二:抽樣檢查頁面結構

選擇不同分頁、分類和邊界情況的 10—20 個頁面,確認欄位是否都在相同位置。特別檢查無價格、缺圖、已下架、多規格、跨語言和登入過期等情況。

步驟三:設計資料結構

給每個欄位定義名稱、型別、是否必填、清洗規則和唯一鍵。例如商品資料可包含:來源 URL、平台商品 ID、標題、目前價格、幣種、庫存狀態和採集時間。

步驟四:先做小規模原型

用少量頁面驗證選擇器、分頁、編碼、去重和錯誤處理。不要在選擇器尚未穩定時直接跑全站。

步驟五:增加友善限速

設定合理請求間隔、並發上限、逾時和指數退避;遇到 429 Too Many Requests 或持續 5xx 時主動降速或暫停。快取已經取得且短期不變的頁面,避免重複請求。能按更新時間增量抓取,就不要每天全量重抓。

步驟六:上線監控與停止條件

為異常狀態設定停止條件,例如驗證碼突然出現、登入失效、空值率飆升、結構變化或伺服器錯誤持續增加。自動化系統應該在不確定時停下來等待人工確認,而不是不斷重試。

robots.txt應該怎麼看?

robots.txt 通常位於網站根目錄的 /robots.txt。規則按 user-agent 分組,並透過 allowdisallow 描述路徑。Google 對 robots.txt 的解釋還強調,規則僅適用於對應主機、協定和連接埠,路徑區分大小寫。

需要注意:

  • robots.txt 不是密碼牆,也不應用來存放秘密 URL;
  • 它主要表達爬取偏好,不等同於內容授權;
  • 具體網站條款、契約、智慧財產權和資料保護義務仍需單獨評估;
  • 即使沒有 robots.txt,也不代表可以無限並發或收集任何資料;
  • 專案應使用可識別的 user-agent 和聯絡方式,而不是偽裝成一般使用者逃避治理。

網頁抓取有哪些合規風險?

個人資料

公開可見不等於可以無限制處理。如果資料能直接或間接識別個人,收集方仍可能承擔告知、合法依據、保存期限、安全和權利回應義務。

歐盟委員會對 GDPR 原則的說明列出了合法、公平與透明、目的限制、資料最小化、保存期限、準確性、安全性和問責等原則。面向歐盟個人的資料專案,應只收集實現明確目的所必需的欄位,並設定刪除或複核期限。

著作權與資料庫權利

事實資料和頁面表達可能受到不同保護,大量複製正文、圖片、評論或資料庫內容的風險高於只記錄必要事實欄位。是否可以再發布、訓練模型或商業轉售,需要結合司法轄區、許可和使用方式判斷。

契約與存取控制

網站條款可能限制自動存取、資料再利用或帳號共享。不得繞過登入、付費牆、驗證碼、頻率限制或其他技術存取控制。若專案必須取得受限資料,應先取得明確授權。

對網站服務的影響

過高並發會增加對方成本並影響正常使用者。限速、快取、增量更新、錯峰執行和明確停止條件既是工程品質要求,也是基本的服務禮儀。

如何讓瀏覽器自動化任務更可控?

當抓取目標確實需要瀏覽器渲染,或涉及多帳號、多環境、需要團隊協作時,任務的可追溯性和權限控制就變得關鍵。可考慮把這些瀏覽器操作組織成可稽核、可管理的流程:

  • 按客戶或專案把瀏覽器環境分組隔離,減少 Cookie 與工作階段混用;
  • 只給執行成員必要的權限,避免共享帳號密碼;
  • 用操作日誌記錄誰在何時啟動了哪項任務;
  • 對必須渲染的頁面設定小批次佇列和並發上限,保持請求強度可控;
  • 在測試環境驗證選擇器後,再逐步擴大授權範圍內的任務;
  • 接入內部排程時保留逾時、限速與人工停止機制。

需要注意的是,任何瀏覽器自動化工具都不能把未經允許的資料採集變成合規行為,也不應用於繞過驗證碼、封禁、付費牆或平台限制。開始自動化前,應先確認資料來源、權限和用途。需要管理授權瀏覽器工作流程時,可選用合適的瀏覽器自動化管理工具建立測試環境。

常見問題

Web Scraping合法嗎?

沒有適用於所有國家、網站和資料型別的統一答案。需要同時考慮網站條款、存取方式、版權、資料庫權利、個人資料、商業競爭和當地法律。高風險或大規模專案應諮詢專業法律顧問。

robots.txt允許就可以隨便抓嗎?

不可以。robots.txt 是抓取規則,不是版權許可、契約豁免或個人資料處理授權。

抓靜態頁面還是用無頭瀏覽器?

能透過官方 API 或靜態 HTML 獲得資料時優先使用輕量方式;只有目標內容確實依賴 JavaScript 或授權互動時,才使用瀏覽器自動化。

如何避免頁面改版導致髒資料?

保存來源與時間戳,設定欄位驗證和空值率告警,對解析規則做版本管理,並在異常時停止寫入而不是覆蓋歷史資料。

總結

Web Scraping 的核心不是「把頁面抓下來」,而是以可控、可驗證、可維護的方式把網頁資訊轉成結構化資料。一個成熟流程會優先使用官方介面,尊重 robots.txt 和服務條款,控制請求強度,最小化個人資料,並為結構變化和異常狀態設計停止機制。

當權限、資料模型和監控都先於規模擴張,網頁抓取才能真正成為穩定的資料基礎設施,而不是一次性的脆弱腳本。