首頁 > web前端 > js教程 > 如何使用 Puppeteer 進行網頁抓取:初學者友善指南

如何使用 Puppeteer 進行網頁抓取:初學者友善指南

Mary-Kate Olsen
發布: 2025-01-08 00:46:41
原創
936 人瀏覽過

How to Web Scrape with Puppeteer: A Beginner-Friendly Guide

網頁抓取是從網站收集資料的極其強大的工具。透過 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 功能。

  1. 導航至頁面
    page.goto(url) 方法可讓您開啟任何 URL。如果需要,請新增超時設定等選項:
    javascript
    複製程式碼
    wait page.goto('https://example.com', { timeout: 60000 });

  2. 選擇元素
    使用 CSS 選擇器來精確定位頁面上的元素。 Puppeteer 提供以下方法:
    第一個符合的 page.$(selector)
    page.$$(選擇器) 適用於所有符合
    例:
    javascript
    複製程式碼
    const 元素=await page.$('h1');
    const text = wait page.evaluate(el => el.textContent, element);
    console.log(標題: ${text});

  3. 與元素互動
    模擬使用者交互,例如點擊和鍵入:
    javascript
    複製程式碼
    等待 page.click('#submit-button');
    wait page.type('#search-box', 'Puppeteer scraping');

  4. 等待元素
    網頁以不同的速度載入。 Puppeteer 允許您在繼續操作之前等待元素:
    javascript
    複製程式碼
    等待 page.waitForSelector('#dynamic-content');

  5. 截圖
    可視化調試或將資料保存為圖像很容易:
    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)

  1. Puppeteer 免費嗎? 是的,Puppeteer 是開源的並且可以免費使用。
  2. Puppeteer 可以抓取大量 JavaScript 的網站嗎? 絕對地! Puppeteer 執行 JavaScript,非常適合抓取動態網站。
  3. 網頁抓取合法嗎? 這取決於。在抓取之前請務必檢查網站的服務條款。
  4. Puppeteer 可以繞過驗證碼嗎? Puppeteer 可以處理基本的驗證碼挑戰,但進階挑戰可能需要第三方工具。

以上是如何使用 Puppeteer 進行網頁抓取:初學者友善指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板