木偶刮得非常慢

时间:2018-09-19 08:42:43

标签: javascript node.js web-scraping puppeteer

我使用Puppeteer抓取网站只是为了从中获取2个数据。问题是它很慢,有时甚至很慢。

问题是,我每次都需要使用一个新的代理,因为我已经被某个网站ip阻止了。但是,使用代理的速度非常慢,特别是如果代理的质量很差(不容易找到好的和免费的代理列表)时。

这是我的代码:

const args = [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-infobars',
        '--window-position=0,0',
        '--ignore-certifcate-errors',
        `--user-agent=${randomAgent}`,
        `--proxy-server=${randomIp}:${randomPort}`
    ];

    const options = {
        args,
        headless: true,
        ignoreHTTPSErrors: true,
        userDataDir: './tmp'
    };

    return puppeteer.launch(options).then(async browser => {
        const page = await browser.newPage();

        await page.setDefaultNavigationTimeout(60000);

        // Display the console.logs made in the virtual browser
        page.on('console', consoleObj => console.log(consoleObj._text));

        await page.goto(URL, {waitUntil: 'networkidle0'});
        await page.waitForSelector('body');
        await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'})

        let result = await page.evaluate( (titleType) => {
            try {
                var data = {
                    videos : [],
                    title: ""
                };
                $('iframe').each(function() {
                    const source = $(this).attr('src');
                    data.videos.push(source);
                });
                if(titleType === "type1") {
                    data.title = $('meta[property="og:title"]').attr('content');
                }
                if(titleType === "type2") {
                    data.title = $('.dc-title').text();
                }
                if(titleType === "type3") {
                    var div = document.getElementById("#scrl");
                    var b = div.getElementsByTagName("b")[0];
                    data.title = b.innerHTML;
                }

                return data;
            } catch(err) {
                console.log(err);
            }
        }, titleType);

        await browser.close();
        return result;

    }).catch(function(error) {
        console.error('Error! ', error);
        process.exit();
    });

我做错什么了吗?

0 个答案:

没有答案