美文网首页
W4J音乐热评一Puppeteer设置代理IP

W4J音乐热评一Puppeteer设置代理IP

作者: 爱吃馒头不吃辣 | 来源:发表于2020-06-06 21:44 被阅读0次
    • 当频繁的爬取难免会被网站发现被封锁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就完成了.

    相关文章

      网友评论

          本文标题:W4J音乐热评一Puppeteer设置代理IP

          本文链接:https://www.haomeiwen.com/subject/tjiftktx.html