- 當頻繁的爬取難免會被網(wǎng)站發(fā)現(xiàn)被封鎖IP,這個時候代理IP就顯得很重要.
- 畢竟,魔高一尺,道高一丈.知己知彼,百戰(zhàn)不殆.??
阿布云HTTP隧道
- 經(jīng)過百般篩選,我最終選擇阿布云服務,詳細信息可點擊查看.
- 選擇其中的
HTTP隧道(動態(tài)版),動態(tài)版HTTP隧道會為每個請求從IP池中挑選一個隨機IP。
- 也就是說我們的每次爬取都將從一個隨機ip發(fā)出請求。
- HTTP隧道基于HTTP協(xié)議,支持HTTP/HTTPS協(xié)議的數(shù)據(jù)接入。
- 平臺在云端維護一個全局IP池供HTTP隧道使用,池中的IP會不間斷更新,以保證IP池中有足夠多的IP供用戶使用。
購買隧道服務
- 進入到管理頁面,選擇
HTTP隧道=>動態(tài)版,點擊右上角選購隧道
- 首先選擇時間單位,可小時,天,月,周,季,年.我一般選擇時,2個小時足以.
- 隧道數(shù)為1即可,但下面的請求數(shù)建議按照并發(fā)數(shù)來設(shè)置,比如并發(fā)的瀏覽器示例為5,設(shè)置請求數(shù)為5,因為他會默認2個請求數(shù),這樣就7個.
- 保證每個瀏覽器示例使用的ip不沖突.
- 隨用隨買,賊方便,購買完成后會需要
通行證書和通行密鑰兩個參數(shù),保留好我們接下來會使用.
隧道服務使用方法
- 需要登陸到HTTP隧道服務器,一般是
http://http-dyn.abuyun.com:9020這個地址.
- 這就需要用到我們上面提到的
通行證書和通行密鑰
- 改造一下我們的代碼.
const puppeteer = require('puppeteer');
const mapLimit = require('async/mapLimit');
const initPuppeteerPool = require('./genericPool');
let musicId = [1407551413, 1303289043, 1417862046];
//設(shè)置通行證書和同行密鑰,格式一定是要username和password
let agencyIp = {
username: 'HG*32T**34*8Q*VD',
password: 'CC4*79*1*15*AE*C'
}
const pool = initPuppeteerPool({
puppeteerArgs: {
timeout: 15000,
ignoreHTTPSErrors: true,
devtools: true,
headless: false,
args: [
'-–disable-dev-shm-usage',
'-–disable-setuid-sandbox',
'-–no-first-run',
'--no-sandbox',
'-–no-zygote',
'-–single-process',
//設(shè)置HTTP隧道服務地址
'--proxy-server=http://http-dyn.abuyun.com:9020'
]
}
})
mapLimit(musicId, 3, (item, callback) => {
(async () => {
let info = await selectInfo(item);
callback(null, info);
})();
}, (err, results) => {
console.log(results);
});
async function selectInfo(id) {
return new Promise(async (resolve, reject) => {
const page = await pool.use(async browser => {
const page = await browser.newPage();
//使用通行證書和通行密鑰登錄服務器
await page.authenticate(agencyIp);
await page.goto(`https://music.163.com/#/song?id=${id}`);
return page
})
const iframe = await page.frames().find(f => f.name() === 'contentFrame');
const musicComment = await iframe.$('.cmmts.j-flag');
let commentList = await iframe.evaluate((e) => {
let comment = Array.from(e.getElementsByClassName('cnt f-brk'));
return comment.map((item) => item.innerText).filter((item, index) => index <= 5);
}, musicComment);
await page.close();
resolve(commentList);
})
}
- 簡單三步,設(shè)置完成,要想驗證一下是否成功.
- 先不設(shè)置代理,
headless設(shè)置false顯示瀏覽器,在打開的瀏覽器中,百度搜過ip查看一下默認ip.
- 本機IP: 123.1*9.17.6 北京市北京市 聯(lián)通
- 再設(shè)置上代理,保持
headless設(shè)置不變,查看ip地址.
- 本機IP: 120.2.5.0 河北省保定市 聯(lián)通
- 多試幾次會發(fā)現(xiàn),設(shè)置的ip都是隨機的.
- 至此我們的設(shè)置代理ip就完成了.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。