木偶系统要求
Puppeteer System requirements
我今天将一个脚本投入生产并放弃了我的 API,我相信我将不得不使用一个单独的服务器。
那么,对于 1000 个请求/小时,我应该使用什么服务器配置?
重现步骤
在 digitalOcean 上设置更便宜的机器,同时 运行 5 次。
我的服务器:
- Puppeteer 版本:最后一个
- 平台/OS版本:Ubuntu16
- Node.js版本:10
我的代码是运行
async function getContent(url) {
console.log("getContent")
const browser = await puppeteer.launch({ headless: true, args:[`--window-size=${1800},${1200}`, '--no-sandbox', '--disable-setuid-sandbox'] });
const page = await browser.newPage();
await page.goto(url,{waitUntil: 'load', timeout: 0});
var times = 1;
let timer = setInterval(() => {
console.log(times++)
if (times > 10) clearInterval(timer);
}, 1000);
await page.waitFor(10000)
return await page.content();
}
async function searchdata(content, url) {
console.log("searchdata")
const $ = cheerio.load(content);
let imoveis = [];
let paginas;
let quantidadeEncontrada = $(".js-title .js-total-records").text().trim()
if(quantidadeEncontrada<7){
return{
result:false,
message:"Não encontramos um número de amostras maiores do que 8",
quantidadeEncontrada:quantidadeEncontrada,
link:url
};
}
//Não pode ser arrow function porque perdemos o this do elemento :D
$(".results-list > div").each(function () {
if(imoveis.length<quantidadeEncontrada){
// let area = $(this).find(".property-card__container .property-card__details .property-card__detail-area .property-card__detail-value").text();
let valorVenda = $(this).find(".property-card__values .property-card__price").text();
let link = $(this).find(".property-card__header a").attr("href");
valorVenda = valorVenda.replace("R$", "").trim().replace(/\./g, "");
if(valorVenda.trim()*1){
imoveis.push({
valorVenda: parseInt(valorVenda.trim()),
link: "https://www.vivareal.com.br" + link
});
}
// paginas = $(".pagination__wrapper li[data-type]").length
}
});
return {
result: true,
imoveis: imoveis,
amostrasQuantidade:imoveis.length,
paginas: paginas,
quantidadeEncontrada:quantidadeEncontrada * 1,
url:url
}
}
我还在 puppeteer 的回购上创建了一个问题:https://github.com/puppeteer/puppeteer/issues/6199
所以,我在网上找不到任何信息。
我决定在 Google Cloud Functions 上使用它,有 2G RAM
我今天将一个脚本投入生产并放弃了我的 API,我相信我将不得不使用一个单独的服务器。 那么,对于 1000 个请求/小时,我应该使用什么服务器配置?
重现步骤 在 digitalOcean 上设置更便宜的机器,同时 运行 5 次。
我的服务器:
- Puppeteer 版本:最后一个
- 平台/OS版本:Ubuntu16
- Node.js版本:10
我的代码是运行
async function getContent(url) {
console.log("getContent")
const browser = await puppeteer.launch({ headless: true, args:[`--window-size=${1800},${1200}`, '--no-sandbox', '--disable-setuid-sandbox'] });
const page = await browser.newPage();
await page.goto(url,{waitUntil: 'load', timeout: 0});
var times = 1;
let timer = setInterval(() => {
console.log(times++)
if (times > 10) clearInterval(timer);
}, 1000);
await page.waitFor(10000)
return await page.content();
}
async function searchdata(content, url) {
console.log("searchdata")
const $ = cheerio.load(content);
let imoveis = [];
let paginas;
let quantidadeEncontrada = $(".js-title .js-total-records").text().trim()
if(quantidadeEncontrada<7){
return{
result:false,
message:"Não encontramos um número de amostras maiores do que 8",
quantidadeEncontrada:quantidadeEncontrada,
link:url
};
}
//Não pode ser arrow function porque perdemos o this do elemento :D
$(".results-list > div").each(function () {
if(imoveis.length<quantidadeEncontrada){
// let area = $(this).find(".property-card__container .property-card__details .property-card__detail-area .property-card__detail-value").text();
let valorVenda = $(this).find(".property-card__values .property-card__price").text();
let link = $(this).find(".property-card__header a").attr("href");
valorVenda = valorVenda.replace("R$", "").trim().replace(/\./g, "");
if(valorVenda.trim()*1){
imoveis.push({
valorVenda: parseInt(valorVenda.trim()),
link: "https://www.vivareal.com.br" + link
});
}
// paginas = $(".pagination__wrapper li[data-type]").length
}
});
return {
result: true,
imoveis: imoveis,
amostrasQuantidade:imoveis.length,
paginas: paginas,
quantidadeEncontrada:quantidadeEncontrada * 1,
url:url
}
}
我还在 puppeteer 的回购上创建了一个问题:https://github.com/puppeteer/puppeteer/issues/6199
所以,我在网上找不到任何信息。
我决定在 Google Cloud Functions 上使用它,有 2G RAM