Skip to content

百度关键词搜索结果的云爬虫 puppeteer + serverless

Notifications You must be signed in to change notification settings

ITHcc/fun-puppeteer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

前期准备

开始之前请确保如下工具已经正确的安装,更新到最新版本,并进行正确的配置。

Funcraft

Funcraft 是函数计算提供的一种命令行工具,通过该工具,您可以便捷地管理函数计算、API 网关、日志服务等资源。通过一个资源配置文件 template.yml,Funcraft 即可协助您进行开发、构建、部署操作。本文提供安装 Funcraft 的三种方式。

  1. 安装

    • 执行以下命令安装Funcraft

      npm install @alicloud/fun -g

    • 安装完成之后,在控制终端执行fun命令查看版本信息。

      fun --version

  2. 配置Funcraft

    • 执行以下命令

      fun config

    • 按照提示依次配置 Account ID、AccessKeyId、AccessKeySecret、Default Region Name。

Docker

Funcraft 进行依赖编译、安装、本地运行调试等,需要依赖于Docker来模拟本地环境。

Windows

  1. 安装

    根据系统下载并安装 Docker Desktop

  2. 配置国内镜像

    {
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com"
      ]
    }

    在桌面右下角状态栏中右键 docker 图标,修改在 Docker Daemon 标签页中的 json ,把 上面的镜像地址加到"registry-mirrors"的数组里,保存即可。

    Tips: 推荐使用阿里云Docker镜像。

安装依赖

  1. 生成Funcraft的配置文件

    fun config

    按照提示依次配置 Account ID、AccessKeyId、AccessKeySecret、Default Region Name。

  2. 安装依赖

    fun install -d

本地调试函数

在本地调试代码,可以使用如下命令:

$ fun local start
using template: template.yml
HttpTrigger httpTrigger of FunPuppetter/baiduKeywordResult was registered
        url: http://localhost:8000/2016-08-15/proxy/FunPuppetter/baiduKeywordResult
        methods: [ 'POST', 'GET' ]
        authType: ANONYMOUS

浏览器打开http://localhost:8000/2016-08-15/proxy/FunPuppetter/baiduKeywordResult,会自动下载Response

Response:

{"msg":"参数不正确!","code":4005,"data":null}

携带keyword和page参数后Response:

http://localhost:8000/2016-08-15/proxy/FunPuppetter/baiduKeywordResult?keyword=vue&page=3

{
	"msg": "success",
	"data": [
        {
            "title": "vue.js官网",
            "abstract": "Vue.js - The Progressive JavaScript Framework... 订阅我们的周刊 (英文) 你可以在 news.vuejs.org 翻阅往期的 issue,也可以收听 podcast。",
            "redirectUrl": "http://www.baidu.com/link?url=Men7IMCzaXf2qP148hYmJKK54l5fL03Wbya_S4L25_i",
            "url": "https://cn.vuejs.org/",
            "domain": "cn.vuejs.org",
            "keyword": "vue",
            "pageNum": 1,
            "rank": 1
		}, 
        {
            "title": "Vue.js 教程 | 菜鸟教程",
            "abstract": "Vue.js 教程 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。 Vue 只关注视图层, 采用自底向上增量开发的设计。 Vue 的目标是通过...",
            "redirectUrl": "http://www.baidu.com/link?url=WXIdaqC4EhUmm3Vdis5p0BCM3vUo139WwLQCB28LV8p5epqoiZMceQ1AWV_HpjKAb2jaqVpsXyWytUzPrnDqt_",
            "url": "https://www.runoob.com/vue2/vue-tutorial.html",
            "domain": "www.runoob.com",
            "keyword": "vue",
            "pageNum": 1,
            "rank": 2
		},
        {
            "title": "介绍— Vue.js",
            "abstract": "Vue.js - The Progressive JavaScript Framework... Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设...",
            "redirectUrl": "http://www.baidu.com/link?url=RjryFjnGxvreIzhFX1iicF8hHcRbNhkoTTTrFLjsLk4EmqM5ydhCbTR2vye8NBUv",
            "url": "https://cn.vuejs.org/v2/guide/",
            "domain": "cn.vuejs.org",
            "keyword": "vue",
            "pageNum": 1,
            "rank": 3
		}
    	.......
    ],
	"code": 2000
}

一键部署服务

在本地调试代码,可以使用如下命令:

  • 确认yml文件中的配置,选择Y就可以了,使用fun deploy -y部署时可跳过确认

  • 使用nas服务管理依赖

FunPuppetter/baiduKeywordResult函数大小超过50M,需要使用Nas服务来管理依赖。

  • ? Do you want to let fun to help you automate the configuration?

    询问是否使用 Fun 来自动化的配置 NAS 管理依赖,选择Yes

  • ? We recommend using the 'NasConfig: Auto' configuration to manage your function dependencies.

    是否使用NasConfig: Auto配置来管理函数依赖关系, 选择Yes。

    Tips: 可以选择手动配置。函数计算挂载NAS访问。如果你已经手动配置,这里则提示用户选择已经配置的 NAS 存储函数依赖

看到这里就表示部署成功了。

为什么Response会强制下载

因为服务端会为response header中强制添加content-disposition: attachment字段,此字段会使得返回结果在浏览器中以附件的方式打开。此字段无法覆盖,使用自定义域名将不受影响。

配置自定义域名

接下来我们给函数服务配置一个自定义域名,这样Http trigger触发的函数响应就不会再强制下载了。

  1. 登录阿里云函数计算控制台

  2. 打开自定义域名,创建域名

    fun.root2.cn换成你们的域名地址

  3. 解析域名到函数计算的Endpoint

    Endpoint在函数计算控制台/概览的右上角获取。

    打开云解析DNS控制台,选中域名,添加记录

    记录类型选择CNAME,记录值为函数计算的Endpoint

  4. 测试解析是否生效

    如下图则解析成功

添加了新依赖,如何更新?

如果添加了新依赖,只需要重新执行fun nas sync进行同步即可。

如果修改了代码,只需要重新执行fun deploy重新部署即可。

About

百度关键词搜索结果的云爬虫 puppeteer + serverless

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published