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