当前位置: 代码迷 >> 综合 >> 搭建以 serverless 为后台服务的疫情热搜快应用
  详细解决方案

搭建以 serverless 为后台服务的疫情热搜快应用

热度:7   发布时间:2023-12-12 14:08:52.0

来源:vivo快应用

作者:@author dadong

 

鉴于疫情带来的影响,因宅在家里太久,于是结合 nodejs puppeteer cheerio 等技术工具,打造了一个以 serverless 为后台服务的疫情热搜快应用;本篇文章即以 SCF 为例,介绍开发一个前端以快应用为载体,后端以 serverless 为支撑的项目过程,及一些踩坑历程的分享。

 

起源

今年疫情的影响越来越大,已经成为一个世界性的问题,疫情的发展时刻牵动每个人的心,正好也是因为疫情,今年让作为加班狗的我突然重温“放寒假”的感觉。宅在家里太久就想搞点事情做,于是就萌发了搞个疫情热搜应用的念头。说干就干,经过两天构思,两天开发,踩了不少坑之后,一个疫情热搜快应用就诞生了。

 

构思

先说技术点

后端:nodejs puppeteer cheerio

前端:快应用(当然小程序也没问题)

 

 

再说说采用这几个技术的原因

  • nodejs:本身呢,我作为一个前端,用这个写服务端是很合情合理的吧!

     

  • puppeteer:为什么选择这个库呢?首先当然是为了爬取数据,那么有的小朋友就要说了,爬取数据还有其他的库呀?为什么非要用他呢?没错,一开始我用的是crawler,然而这个库并不能爬取单页应用,这是踩的第一个坑,后面会详细讲。然后就选择了puppeteer,他是谷歌官方出品的一个通过 DevTools 协议控制 headless Chrome 的 Node 库,浏览器可以的,他都可以,爬取单页应用自然不在话下。

     

  • cheerio:为服务端设计的轻量级 jQuery 核心实现,用来过滤选取爬取到的页面数据的。

     

  • 快应用:作为小程序家族里的一个特例,唯一个用原生组件渲染的框架,性能自然比其他小程序不知高到哪里去了,只要是在国内厂商生产的安卓机器,基本都能运行。

 

 

然后说说 serverless

serverless 技术的诞生,让开发者可以更加专注于业务,而不必考虑系统的运维和系统性能的伸缩,以往我们要开发部署一个应用,一般需要准备一台服务器,配置好对应的项目环境,部署好对应的项目。这个过程中,需要注意的环节很多,一个地方出问题,就会导致整个应用不可用。而通过 serverless 架构,我们只需要把核心代码上传到服务提供商,然后就啥都不用管了,应用遵循运行才计费的原则,还可以自动拓展,不用担心流量突然增大导致服务不可用。适合不熟悉运维操作的开发人员部署自己的项目。

 

最后说说整个项目的架构和实现方法

  • 通过 nodejs 加 puppeteer 抓取解析百度疫情热搜数据

  • 把项目部署到函数计算服务提供商平台(这里我采用的是腾讯云的 SCF,免费额度和阿里的函数计算一样)

  • 通过配置 API 网关,把服务暴露出来

  • 开发一个快应用调用服务展示数据

     

实践

说完了技术架构和构思,下面正式开始介绍开发实践的过程:

 

准备开发环境

这里以腾讯云的 SCF 服务为例,其他云平台其实也都大同小异。

 

1.安装腾讯云 SCF-CLI 命令行工具

pip install scf # 这个工具是python写的,所以需要开发机器有python环境,且版本需要在python2.7以上

 

2.安装腾讯云 serverless 的 vscode 插件

如果你懒得配置 python 环境,比较喜欢可视化的操作,可以选择安装 vscode 的插件

插件市场搜索安装 Tencent Serverless Toolkit for VS Code

 

以上两个工具任选一种安装好了就行。

 

初始化项目

用 SCF 命令行方式初始化一个项目,vscode 插件方式就不说了,可视化操作按提示操作。

scf init -r nodejs8.9 --name virus-search # 初始化一个项目名为virus-search的项目,运行环境是nodejs8.9

 

初始化好了项目,项目结构是下面这个样子的:

└── virus-search ├── README.md ├── index.js // 入口文件 └── template.yaml // 项目配置文件

 

截止到我写这篇文章为止,不管是 SCF 命令行还是 vscode 插件,创建项目的 nodejs 版本最高均只支持到了 8.9。这里特别拎出来说是因为腾讯云实际上已经支持了 node10.15 的运行环境,不过开发工具还没开放。

 

安装项目依赖

接下来安装要用到的项目依赖

npm install puppeteer cheerio --save

 

pupeteer 会安装 chromium,这个包有 130+MB,建议把 npm 换成 cnpm 或者替换淘宝源,这样会快很多。

 

安装好了依赖,项目结构变成了这样

└── virus-search 

 ├── README.md

 ├── node_modules/ 

 ├── package.json

 ├── index.js // 入口文件 

 └── template.yaml // 函数配置文件

 

编写爬虫逻辑

这里数据来源我选择了百度的疫情全民热搜,这个页面长这个样子:

 

我想要的数据就是这个页面热搜榜单了,在 Chrome 中打开,用 devtools 查看页面

  相关解决方案