我使用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();
});
我做错什么了吗?