Agentic Research
首頁/工具/Web Fetch 與網頁抓取在 Agent 中的應用

Web Fetch 與網頁抓取在 Agent 中的應用

2026/05/106 分鐘Bryan Chan最後更新 2026/05/10
這篇屬於工具主題PuppeteerAgent

先讀這些

這篇文章在學習路徑上假設你已經讀過下列內容。

Web Fetch 在三層中的角色

框架用途方式
Hermes Agent背景資訊搜集Python requests / fetch_url
OpenClaw任務中抓取網頁MCP Puppeteer / fetch_url
Claude Code通過 OC 間接使用不直接抓取

靜態頁面抓取(輕量)

# Python fetch(Hermes 背景搜集用)
import requests
from bs4 import BeautifulSoup

resp = requests.get("https://example.com/article")
soup = BeautifulSoup(resp.text, "html.parser")
text = soup.get_text()

動態頁面抓取(MCP Puppeteer)

需要 JavaScript 渲染的頁面用 Puppeteer MCP:

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["@anthropic-ai/mcp-server-puppeteer"]
    }
  }
}

典型場景

場景用什麼例子
抓取 AI 新聞摘要Hermes + requests每日搜集
查詢 HKEX 公告OpenClaw + Puppeteer/sdd 流程中
驗證外連結是否失效腳本 + requests建置時檢查

先判斷靜態還是動態

選錯方式是最常見的浪費來源。輕量抓取速度快、成本低,但拿不到 JavaScript 渲染後的內容;瀏覽器抓取能處理動態頁面,但資源開銷大、速度慢。判斷順序建議如下。

  1. 先用輕量方式抓一次,檢查回應內容是否已包含目標資料。
  2. 若目標資料不在 HTML 原始碼中(例如由前端框架在載入後填入),改用瀏覽器渲染。
  3. 若頁面需要互動(點擊、捲動、登入)才顯示資料,才升級到完整的瀏覽器自動化。
方式優點限制
requests 加解析器快、開銷小、易平行拿不到渲染後內容
瀏覽器渲染能處理動態與互動慢、耗資源、易受版面變動影響
官方 API穩定、欄位明確需授權、可能有配額

只要能取得授權,官方 API 永遠優先於抓取。抓取適合沒有 API 或 API 不敷使用的情況,屬於補充手段。


合規、禮貌與反爬的取捨

抓取前要先確認對方網站的使用條款與 robots 規則,並避免對來源造成壓力。

  • 設定合理的請求間隔,不要在短時間內密集打同一站。
  • 帶上可識別的 User-Agent,方便對方辨識與聯絡。
  • 尊重 robots 規則與網站聲明的抓取限制。
  • 遇到限流或封鎖時,採用指數退避重試,而不是持續重打。
  • 大量抓取前先評估是否需要授權或付費方案。
  • 注意個人資料與版權:只取需要的部分,不要把整站複製保存。

反爬機制常見於動態網站,可能包括驗證碼、行為偵測與指紋識別。處理這類機制的正確方向是改用官方管道或降低頻率,而不是繞過防護。繞過防護既不可靠,也容易帶來法律與聲譽風險。


內容清理與保存

抓回來的 HTML 通常混雜導覽列、廣告、頁尾與腳本,直接餵給模型既浪費 token 也降低準確度。常見做法是:

  • 抽出正文區塊,丟棄樣板內容(可依標籤結構或已知的正文容器判斷)。
  • 移除多餘空白與重複段落,保留標題層級以便理解結構。
  • 保留來源 URL 與抓取時間,方便日後回溯與引用。
  • 對需要引用的內容保留原文,不要只留摘要,避免日後無法核對。
  • 設定回應大小上限,避免抓到超大檔案拖垮流程。

另一個關鍵是逾時與錯誤處理:沒有逾時的抓取會卡住整條流程;沒有區分「頁面不存在」與「暫時失敗」的錯誤處理,會讓重試策略失去意義。


驗證方式與常見錯誤

驗證方式

  • 對已知會渲染內容的頁面做一次對照,確認輕量方式拿不到、瀏覽器方式拿得到。
  • 檢查抓取結果是否包含正文關鍵字,確認沒抓到空殼頁。
  • 測試逾時與失敗路徑,確認錯誤訊息清楚且不會靜默通過。
  • 驗證連結檢查腳本能正確區分失效連結與暫時無法連線。
  • 抽查保存的內容是否附有來源與時間戳。

常見錯誤

  • 對所有頁面都用瀏覽器渲染,浪費資源又拖慢流程。
  • 抓取沒有設定逾時,遇到慢站整條流程卡死。
  • 忽略 robots 規則與條款,或對來源過度請求。
  • 沒有保留來源與時間,日後無法引用或核對。
  • 只抓一次就假設資料最新,沒有考慮快取與更新頻率。
  • 把抓到的整頁內容原封不動塞進提示,稀釋了關鍵資訊。
  • 連結檢查把暫時性網路錯誤誤報為失效。

檢查清單

  • 已確認目標頁面是否需要 JavaScript 渲染。
  • 已優先評估是否可用官方 API 取代抓取。
  • 已確認條款與 robots 規則允許抓取。
  • 已設定請求間隔、User-Agent 與退避重試。
  • 已設定逾時與明確的錯誤分類。
  • 已抽出正文並移除樣板內容。
  • 每筆結果都保留來源 URL 與抓取時間。
  • 已測試渲染、逾時、失效連結等關鍵路徑。

相關文章

在這條路徑上的下一步