Toc
  1. 阿布云HTTP隧道
    1. 购买隧道服务
    2. 隧道服务使用方法
Toc
0 results found
Ihuzb
W4J音乐热评一Puppeteer设置代理IP
  • 当频繁的爬取难免会被网站发现被封锁IP,这个时候代理IP就显得很重要.
  • 毕竟,魔高一尺,道高一丈.知己知彼,百战不殆.🤓

阿布云HTTP隧道

  • 经过百般筛选,我最终选择阿布云服务,详细信息可点击查看.
  • 选择其中的HTTP隧道(动态版),动态版HTTP隧道会为每个请求从IP池中挑选一个随机IP。
  • 也就是说我们的每次爬取都将从一个随机ip发出请求。
  • HTTP隧道基于HTTP协议,支持HTTP/HTTPS协议的数据接入。
  • 平台在云端维护一个全局IP池供HTTP隧道使用,池中的IP会不间断更新,以保证IP池中有足够多的IP供用户使用。

购买隧道服务

  • 进入到管理页面,选择HTTP隧道=>动态版,点击右上角选购隧道
    tcMeYV.md.png
  • 首先选择时间单位,可小时,天,月,周,季,年.我一般选择时,2个小时足以.
  • 隧道数为1即可,但下面的请求数建议按照并发数来设置,比如并发的浏览器示例为5,设置请求数为5,因为他会默认2个请求数,这样就7个.
  • 保证每个浏览器示例使用的ip不冲突.
  • 随用随买,贼方便,购买完成后会需要通行证书通行密钥两个参数,保留好我们接下来会使用.

隧道服务使用方法

  • 需要登陆到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];
//设置通行证书和同行密钥,格式一定是要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',
//设置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);
})
}
  • 简单三步,设置完成,要想验证一下是否成功.
    • 先不设置代理,headless设置false显示浏览器,在打开的浏览器中,百度搜过ip查看一下默认ip.
      • 本机IP: 123.1*9.17.6 北京市北京市 联通
    • 再设置上代理,保持headless设置不变,查看ip地址.
      • 本机IP: 120.2.5.0 河北省保定市 联通
    • 多试几次会发现,设置的ip都是随机的.
  • 至此我们的设置代理ip就完成了.
本文作者:Ihuzb
版权声明:本文首发于Ihuzb的博客,转载请注明出处!