企業(yè)網站建設技術小程序開發(fā)系統(tǒng)
介紹
在現代的爬蟲技術中,Puppeteer 因其強大的功能和靈活性而備受青睞。Puppeteer 是一個用于控制 Chromium 或 Chrome 瀏覽器的 Node.js 庫,提供了豐富的 API 接口,能夠幫助開發(fā)者高效地處理動態(tài)網頁數據。本文將重點講解 Puppeteer 的 evaluate 函數,結合代理 IP 技術,演示如何采集目標網站(如界面新聞)上的文章標題和摘要。
界面新聞作為中國具有影響力的原創(chuàng)財經新媒體,其市場特點體現在內容聚合開放生產、發(fā)力短視頻與直播、綜合服務功能提升以及助力社會治理意識加強等方面。界面新聞通過開放平臺,掌握用戶數據,提升內容生產和傳播的精準性,同時,短視頻和直播已成為其內容生產力的重要組成部分,增強了新聞報道的即時性。此外,界面新聞客戶端在版本迭代過程中,業(yè)務邊界不斷拓展,服務功能愈加凸顯,逐漸向“新聞+政務+服務+商務”的綜合性平臺轉型。
從新聞熱點的角度來看,界面新聞客戶端中信息內容同質化依舊明顯,原創(chuàng)優(yōu)質內容供應不足,但重要時政新聞、突發(fā)事件能夠獲得大多數媒體的關注。因此,使用 Puppeteer 的 evaluate 函數和代理 IP 技術采集界面新聞的文章標題和摘要時,可以更精準地定位到這些熱點新聞,為用戶提供更加豐富和深入的財經新聞內容。同時,代理 IP 技術的應用可以有效地規(guī)避網站的反爬蟲機制,提高數據采集的成功率和穩(wěn)定性。
通過 Puppeteer 的 evaluate 函數,開發(fā)者可以在頁面的上下文中執(zhí)行 JavaScript 代碼,從而獲取頁面中的特定數據,如文章標題和摘要。結合代理 IP 技術,可以在不同的地理位置模擬用戶訪問,減少被目標網站封禁的風險,這對于采集界面新聞這類高質量財經新聞內容尤為重要。通過這種方式,可以為界面新聞的用戶提供更加豐富和深入的財經新聞內容,滿足他們對高質量信息的需求。
技術分析
Puppeteer 的 Evaluate 函數
evaluate
是 Puppeteer 的核心函數之一。通過該函數,開發(fā)者可以在瀏覽器上下文中執(zhí)行 JavaScript 代碼,直接操作 DOM 樹,從而提取網頁中的數據。
核心使用步驟包括:
- 在瀏覽器中打開頁面。
- 使用
page.evaluate
在頁面上下文執(zhí)行自定義腳本,獲取需要的數據。 - 將數據從瀏覽器上下文傳遞到 Node.js 腳本。
代理 IP 的使用
由于頻繁的爬蟲行為可能會被目標網站檢測并封禁 IP 地址,因此引入代理 IP 是非常必要的。我們以爬蟲代理服務為例,通過設置代理服務器的域名、端口、用戶名和密碼,安全穩(wěn)定地采集網頁數據。
實現細節(jié)
在代碼中,我們將使用以下技術和工具:
- 設置代理 IP:使用爬蟲代理服務。
- 自定義 Cookie 和 User-Agent:模擬真實用戶行為,降低被目標網站封禁的風險。
- 數據存儲:將提取的文章標題和摘要存儲到本地文件中。
以下是完整實現代碼。
實現代碼
const puppeteer = require('puppeteer');// 配置IP代理服務參數 億牛云爬蟲代理 www.16yun.cn
const PROXY_HOST = "PROXY.16yun.cn"; // 16yun代理服務器
const PROXY_PORT = "12345"; // 端口
const PROXY_USERNAME = "代理用戶名"; // 例如:yourUsername
const PROXY_PASSWORD = "代理密碼"; // 例如:yourPassword// 配置目標網站和輸出文件
const TARGET_URL = "https://www.jiemian.com";
const OUTPUT_FILE = "articles.json";(async () => {// 啟動瀏覽器并設置代理const browser = await puppeteer.launch({headless: true, // 無頭模式args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}` // 配置代理]});const page = await browser.newPage();// 設置代理的認證信息await page.authenticate({username: PROXY_USERNAME,password: PROXY_PASSWORD});// 設置 User-Agent 和 Cookieawait page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36");await page.setCookie({name: "exampleCookie",value: "exampleValue",domain: ".jiemian.com"});try {// 打開目標頁面await page.goto(TARGET_URL, { waitUntil: "networkidle2" });// 使用 evaluate 函數提取數據const articles = await page.evaluate(() => {const data = [];const articleElements = document.querySelectorAll(".news-item"); // 根據界面新聞的 DOM 結構選擇器articleElements.forEach((item) => {const title = item.querySelector(".news-item-title")?.innerText?.trim();const summary = item.querySelector(".news-item-summary")?.innerText?.trim();if (title && summary) {data.push({ title, summary });}});return data;});// 將數據寫入文件const fs = require("fs");fs.writeFileSync(OUTPUT_FILE, JSON.stringify(articles, null, 2), "utf-8");console.log(`數據已成功保存到 ${OUTPUT_FILE}`);} catch (error) {console.error("爬取過程中發(fā)生錯誤:", error);} finally {// 關閉瀏覽器await browser.close();}
})();
結論
本文詳細介紹了如何利用 Puppeteer 的 evaluate
函數操作網頁數據,結合代理 IP 和用戶模擬技術,實現了從界面新聞上采集文章標題和摘要的功能。通過這種方法,開發(fā)者不僅可以高效地處理動態(tài)網頁,還能有效規(guī)避 IP 限制等問題。
如果您需要更穩(wěn)定的采集體驗,建議搭配高質量的代理服務如爬蟲代理,確保采集任務的高效完成。未來,隨著爬蟲技術和反爬策略的不斷發(fā)展,我們也應積極學習并應用新技術,提升數據采集的能力和效率。