信譽(yù)好的東莞網(wǎng)站建設(shè)網(wǎng)站收錄查詢代碼
背景介紹
現(xiàn)代爬蟲(chóng)技術(shù)中,模擬人類(lèi)行為已成為繞過(guò)反爬蟲(chóng)系統(tǒng)的關(guān)鍵策略之一。無(wú)論是模擬用戶點(diǎn)擊、滾動(dòng),還是鼠標(biāo)的軌跡移動(dòng),都可以為爬蟲(chóng)腳本帶來(lái)更高的“偽裝性”。在眾多的自動(dòng)化工具中,Puppeteer作為一個(gè)無(wú)頭瀏覽器控制庫(kù),以其強(qiáng)大的功能和靈活的 API 贏得了開(kāi)發(fā)者的青睞。
本文將深入探討 Puppeteer 如何通過(guò)X 和 Y 坐標(biāo)精準(zhǔn)實(shí)現(xiàn)鼠標(biāo)移動(dòng),并結(jié)合實(shí)際案例展示如何采集小紅書(shū)網(wǎng)站的內(nèi)容。在此過(guò)程中,我們還將運(yùn)用代理 IP 技術(shù)、設(shè)置 cookie 和 user-agent,模擬一個(gè)更加“真實(shí)”的用戶環(huán)境。
問(wèn)題陳述
在爬取小紅書(shū)等具備強(qiáng)大反爬能力的網(wǎng)站時(shí),僅簡(jiǎn)單發(fā)送 HTTP 請(qǐng)求已不足以滿足需求。網(wǎng)站可能會(huì)通過(guò)以下方式檢測(cè)爬蟲(chóng):
- 缺乏真實(shí)用戶行為(鼠標(biāo)移動(dòng)、點(diǎn)擊、鍵盤(pán)輸入等)。
- 請(qǐng)求 IP 地址異常頻繁,導(dǎo)致觸發(fā)封禁機(jī)制。
- 瀏覽器指紋(如 User-Agent 或 Cookie)不符合常規(guī)。
這就要求我們?cè)诖a中實(shí)現(xiàn):
- 模擬人類(lèi)鼠標(biāo)移動(dòng):基于 X 和 Y 坐標(biāo)的動(dòng)態(tài)軌跡。
- 代理 IP 技術(shù):隱藏爬蟲(chóng)的真實(shí) IP。
- 自定義請(qǐng)求頭:包括 User-Agent 和 Cookie。
- 完整采集流程:以小紅書(shū)為例,成功抓取頁(yè)面內(nèi)容。
解決方案
Puppeteer 的鼠標(biāo)移動(dòng) API
Puppeteer 提供了 page.mouse.move(x, y, options)
方法來(lái)實(shí)現(xiàn)鼠標(biāo)移動(dòng)。結(jié)合一定的隨機(jī)性,我們可以模擬真實(shí)用戶的鼠標(biāo)行為,避免直線軌跡暴露爬蟲(chóng)的本質(zhì)。
實(shí)現(xiàn)代理 IP
使用代理 IP 技術(shù)能夠有效地繞過(guò) IP 限制。本文將參考爬蟲(chóng)代理的服務(wù),通過(guò)配置代理服務(wù)器的地址、端口、用戶名和密碼,讓 Puppeteer 的請(qǐng)求看起來(lái)更真實(shí)。
案例分析:采集小紅書(shū)
以下是完整的代碼實(shí)現(xiàn),包含代理 IP、Cookie、User-Agent 的設(shè)置,以及鼠標(biāo)移動(dòng)的模擬。
const puppeteer = require('puppeteer');// 配置代理IP信息 億牛云爬蟲(chóng)代理 www.16yun.cn
const proxy = {host: '代理服務(wù)器域名', // 替換為16yun爬蟲(chóng)代理提供的域名port: '代理服務(wù)器端口', // 替換為16yun爬蟲(chóng)代理提供的端口username: '用戶名', // 替換為16yun爬蟲(chóng)代理提供的用戶名password: '密碼', // 替換為16yun爬蟲(chóng)代理提供的密碼
};// 自定義 Cookie 和 User-Agent
const cookies = [{name: 'test_cookie',value: 'test_value',domain: 'xiaohongshu.com',path: '/',},
];
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36';(async () => {// 啟動(dòng) Puppeteer,并設(shè)置代理const browser = await puppeteer.launch({headless: false, // 可設(shè)置為 true 來(lái)啟用無(wú)頭模式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-Agentawait page.setUserAgent(userAgent);// 設(shè)置 Cookieawait page.setCookie(...cookies);// 打開(kāi)小紅書(shū)主頁(yè)await page.goto('https://www.xiaohongshu.com', {waitUntil: 'networkidle2',});// 模擬鼠標(biāo)移動(dòng)console.log('模擬鼠標(biāo)移動(dòng)...');await page.mouse.move(100, 100); // 從點(diǎn) (100, 100) 開(kāi)始await page.waitForTimeout(500); // 等待 500 毫秒await page.mouse.move(200, 200, { steps: 20 }); // 平滑移動(dòng)到點(diǎn) (200, 200)// 獲取頁(yè)面內(nèi)容const content = await page.evaluate(() => document.body.innerText);console.log('頁(yè)面內(nèi)容:', content);// 關(guān)閉瀏覽器await browser.close();
})();
代碼解析
- 代理 IP 配置:通過(guò) Puppeteer 的
--proxy-server
參數(shù)以及page.authenticate
方法,完成代理 IP 的配置。 - Cookie 和 User-Agent:模擬瀏覽器的指紋數(shù)據(jù),避免爬蟲(chóng)身份暴露。
- 鼠標(biāo)移動(dòng)模擬:采用
mouse.move
方法,通過(guò)動(dòng)態(tài)坐標(biāo)和步數(shù)實(shí)現(xiàn)平滑移動(dòng),模仿人類(lèi)操作。 - 頁(yè)面內(nèi)容抓取:成功獲取小紅書(shū)頁(yè)面的文本內(nèi)容。
結(jié)論
通過(guò)結(jié)合 Puppeteer 的強(qiáng)大功能,我們不僅實(shí)現(xiàn)了對(duì) X 和 Y 坐標(biāo)的鼠標(biāo)軌跡模擬,還在代碼中整合了代理 IP 技術(shù)、Cookie 和 User-Agent 的設(shè)置。這些手段有效提升了爬蟲(chóng)的偽裝性,使其能夠成功應(yīng)對(duì)小紅書(shū)等具有強(qiáng)大反爬機(jī)制的網(wǎng)站。
下一步是什么? 你可以嘗試進(jìn)一步優(yōu)化鼠標(biāo)軌跡,使其更加隨機(jī),或結(jié)合鍵盤(pán)輸入模擬,實(shí)現(xiàn)更加全面的行為偽裝。技術(shù)無(wú)止境,挑戰(zhàn)才剛剛開(kāi)始!