最近几天,在用puppeteer做爬虫,爬一爬谷歌应用商店,爬一爬各种js动态加载的网站。看着电脑上爬下来的内容越来越多,感觉很满足。
虽然puppeteer很爽,但是其工作原理决定了它的效率并不会非常高。。。
比如说我想把谷歌商店的所有插件都爬下来,下载一个大概需要两三秒的时间,全部爬完需要挺长时间的。当然这个两三秒是有很大的优化空间的,但是我害怕谷歌封我IP,就没处理….
我想着长期运行这些爬虫,那就肯定不能只在本地跑,必须部署到服务器上才比较省心。但是我只有一个1G内存的小鸡服务器,这个puppeteer又是个吃内存的大户,跑这个有点吃力。
所以我就打算用腾讯云的云函数去部署,先用puppeteer实现一个简单的截图功能。
下面就是部署的过程:
新建一个项目
打开云函数的控制台,然后新建一个云函数,如下图,语言node,我用的是比较新的版本:
填写函数名字、选择模板之后,点击下一步。
提交方法选择在线编辑
把这段代码复制到index.js文件中:
‘use strict’;const puppeteer = require(‘puppeteer’);const fs = require(‘fs’);exports.main_handler = async (event, context, callback) => {const browser = await puppeteer.launch({args: [‘–no-sandbox’]});const page = await browser.newPage();await page.goto(‘https://www.google.com’);await page.screenshot({path: ‘/tmp/example.png’});await browser.close();let img = fs.readFileSync(‘/tmp/example.png’);let data = {isBase64Encoded: true,statusCode: 200,headers: {‘content-type’: ‘image/png’},body: img.toString(‘base64’),};return data;};
上面的代码的功能是打开谷歌的首页,然后截个图。
另外,腾讯云函数的node 10.15以上版本自带puppeteer,不用自己安装。这就省去了非常多的麻烦!
这要是我为啥要用云函数部署puppeteer的主要原因。
启动
点击测试,稍等一下,就会看到控制台的输出结果了。
如果第一次失败了,不妨再试一次。可能是网络不稳定。
end