如何使用 Puppeteer 進行網頁抓取:初學者友善指南
網頁抓取是從網站收集資料的極其強大的工具。透過 Puppeteer(Google 的 Node.js 無頭瀏覽器庫),您可以自動執行頁面導航、點擊按鈕和提取資訊的過程,同時模仿人類瀏覽行為。本指南將以簡單、清晰且可操作的方式引導您了解使用 Puppeteer 進行網頁抓取的基本知識。
什麼是傀儡師?
Puppeteer 是一個 Node.js 函式庫,可讓您控制 Google Chrome(或 Chromium)的無頭版本。無頭瀏覽器在沒有圖形使用者介面 (GUI) 的情況下運行,使其速度更快,非常適合抓取等自動化任務。但是,如果您需要直觀地查看正在發生的情況,Puppeteer 也可以在完整瀏覽器模式下運作。
為什麼選擇 Puppeteer 進行網頁抓取?
彈性:Puppeteer 可以輕鬆處理動態網站和單頁應用程式 (SPA)。
JavaScript 支援:它在頁面上執行 JavaScript,這對於抓取現代網頁應用程式至關重要。
自動化能力:您可以執行填寫表格、點擊按鈕甚至截圖等任務。
將代理程式與 Puppeteer 一起使用
抓取網站時,代理商對於避免 IP 禁令和存取地理限制內容至關重要。代理商充當您的抓取工具和目標網站之間的中介,掩蓋您的真實 IP 位址。對於 Puppeteer,您可以透過將代理程式作為啟動參數傳遞來輕鬆整合代理:
javascript
複製程式碼
const browser = wait puppeteer.launch({
args: ['--proxy-server=your-proxy-server:port']
});
代理對於擴展抓取工作特別有用。輪換代理可確保每個請求都來自不同的 IP,從而減少偵測到的機會。住宅代理以其真實性而聞名,非常適合繞過機器人防禦,而資料中心代理速度更快、價格更便宜。選擇符合您的抓取需求的類型,並始終測試效能以確保可靠性。
設定 Puppeteer
開始抓取之前,您需要設定 Puppeteer。讓我們深入了解逐步過程:
第 1 步:安裝 Node.js 和 Puppeteer
安裝Node.js:從官網下載並安裝Node.js。
設定 Puppeteer:開啟終端機並執行以下命令:
重擊
複製程式碼
npm install puppeteer
這將安裝 Puppeteer 和 Chromium,它控制的瀏覽器。
步驟 2:寫出你的第一個 Puppeteer 腳本
建立一個新的 JavaScript 檔案 scraper.js。這將容納您的抓取邏輯。讓我們編寫一個簡單的腳本來打開網頁並提取其標題:
javascript
複製程式碼
const puppeteer = require('puppeteer');
(async () => {
const browser = wait puppeteer.launch();
const page = wait browser.newPage();
// 導覽至網站
等 page.goto('https://example.com');
// 擷取標題
const title = wait page.title();
console.log(頁面標題: ${title});
等待 browser.close();
})();
使用以下命令執行腳本:
重擊
複製程式碼
節點 scraper.js
您剛剛寫了第一個 Puppeteer scraper!
用於抓取的核心 Puppeteer 功能
現在您已經掌握了基礎知識,讓我們來探索一些用於抓取的關鍵 Puppeteer 功能。
導航至頁面
page.goto(url) 方法可讓您開啟任何 URL。如果需要,請新增超時設定等選項:
javascript
複製程式碼
wait page.goto('https://example.com', { timeout: 60000 });選擇元素
使用 CSS 選擇器來精確定位頁面上的元素。 Puppeteer 提供以下方法:
第一個符合的 page.$(selector)
page.$$(選擇器) 適用於所有符合
例:
javascript
複製程式碼
const 元素=await page.$('h1');
const text = wait page.evaluate(el => el.textContent, element);
console.log(標題: ${text});與元素互動
模擬使用者交互,例如點擊和鍵入:
javascript
複製程式碼
等待 page.click('#submit-button');
wait page.type('#search-box', 'Puppeteer scraping');等待元素
網頁以不同的速度載入。 Puppeteer 允許您在繼續操作之前等待元素:
javascript
複製程式碼
等待 page.waitForSelector('#dynamic-content');截圖
可視化調試或將資料保存為圖像很容易:
javascript
複製程式碼
wait page.screenshot({ path: 'screenshot.png', fullPage: true });
處理動態內容
現今許多網站都使用 JavaScript 動態載入內容。 Puppeteer 在這裡大放異彩,因為它執行 JavaScript,允許您抓取頁面原始碼中可能不可見的內容。
範例:擷取動態資料
javascript
複製程式碼
等 page.goto('https://news.ycombinator.com');
等待 page.waitForSelector('.storylink');
const headers = wait page.$$eval('.storylink', links => links.map(link => link.textContent));
console.log('頭條新聞:', 頭條新聞);
處理驗證碼和機器人檢測
有些網站採取了阻止機器人的措施。 Puppeteer 可以幫助繞過簡單的檢查:
使用隱身模式:安裝 puppeteer-extra 外掛:
重擊
複製程式碼
npm install puppeteer-extra puppeteer-extra-plugin-stealth
將其新增至您的腳本:
javascript
複製程式碼
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
模仿人類行為:隨機化滑鼠移動和打字速度等動作,以顯得更加人性化。
輪換用戶代理:根據每個請求更改瀏覽器的用戶代理:
javascript
複製程式碼
wait page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
保存抓取的數據
提取資料後,您可能想要保存它。以下是一些常見的格式:
JSON:
javascript
複製程式碼
const fs = require('fs');
const data = { name: 'Puppeteer', type: 'library' };
fs.writeFileSync('data.json', JSON.stringify(data, null, 2));
CSV:使用像 csv-writer 這樣的函式庫:
重擊
複製程式碼
npm 安裝 csv-writer
javascript
複製程式碼
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
路徑: 'data.csv',
標題:[
{ id: '姓名', title: '姓名' },
{ id: '型別', title: '型別' }
]
});
const 記錄 = [{ name: 'Puppeteer', type: 'library' }];
csvWriter.writeRecords(records).then(() => console.log('CSV 檔案已寫入。'));
道德網路抓取實務
在抓取網站之前,請記住這些道德準則:
檢查服務條款:始終確保網站允許抓取。
尊重速率限制:避免在短時間內發送太多請求。使用 setTimeout 或 Puppeteer 的 page.waitForTimeout() 來間隔請求:
javascript
複製程式碼
等待頁面.waitForTimeout(2000); // 等待2秒
避免敏感資料:切勿抓取個人或私人資訊。
常見問題故障排除
頁面無法正確載入:嘗試新增更長的逾時或啟用完整瀏覽器模式:
javascript
複製程式碼
const browser = wait puppeteer.launch({ headless: false });
選擇器無法運作:使用瀏覽器開發人員工具(Ctrl Shift C)檢查網站以確認選擇器。
被驗證碼阻止:使用隱身插件並模仿人類行為。
常見問題 (FAQ)
- Puppeteer 免費嗎? 是的,Puppeteer 是開源的並且可以免費使用。
- Puppeteer 可以抓取大量 JavaScript 的網站嗎? 絕對地! Puppeteer 執行 JavaScript,非常適合抓取動態網站。
- 網頁抓取合法嗎? 這取決於。在抓取之前請務必檢查網站的服務條款。
- Puppeteer 可以繞過驗證碼嗎? Puppeteer 可以處理基本的驗證碼挑戰,但進階挑戰可能需要第三方工具。
以上是如何使用 Puppeteer 進行網頁抓取:初學者友善指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。
