問題:傳統爬蟲抓不到 JS 動態渲染的資料
目標網站 https://www.tvmao.com/program/CCTV-CCTV6-w3.html 的節目表(時間、標題)由 JavaScript 非同步請求嵌入,直接用 file_get_contents 或 cURL 只能拿到初始 HTML,看不到真實資料。
解決思路:從「模擬瀏覽器」到「直接呼叫 API」
方案一:無頭瀏覽器
- 工具:Puppeteer (Node.js)、Playwright、Selenium + ChromeDriver。
- 原理:真實執行 JS,等待網路請求完成後再抓取 DOM。
- 優點:通用性強,應對複雜 SPA 應用。
- 缺點:資源消耗大、速度慢、部署較繁瑣。
方案二:分析網路請求,直接呼叫後端 API(推薦)
- 開啟瀏覽器開發者工具 F12 → Network 面板。
- 篩選 XHR / Fetch,重新整理頁面。
- 找到回傳節目表 JSON 的請求 URL、參數、Header。
- 在 PHP 中用 cURL 模擬該請求(帶上必要的
Referer、User-Agent、Cookie 等)。
- 解析 JSON 直接取得結構化資料,無需解析 HTML。
方案三:使用現成的「無頭瀏覽器服務」
實戰建議
優先嘗試方案二,效能最好且穩定。若網站加密簽名、混淆參數難以逆向,再退而求其次用方案一或三。參考大神經驗:PHP 爬蟲處理非同步載入的完整案例。