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