Node微信公众号开发 cheerio网页抓取和memory-cache缓存模块入门基础知识_公众号使用指南

Node微信公众号开发 cheerio网页抓取和memory-cache缓存模块入门基础知识

模块介绍

本文将介绍三款模块。之所以标题中只出现了两款,是由于目前我的公众号 cron 定时模块暂未使用:

Node微信公众号开发 cheerio网页抓取和memory-cache缓存模块入门基础知识_公众号使用指南

  • cheerio

    插件介绍:Fast, flexible & lean implementation of core jQuery designed specifically for the server.

    通俗易懂大白话:允许 node.js 像 jQurey 那样获取页面 DOM 节点

  • memory-cache

    插件介绍:A simple in-memory cache for node.js

    通俗易懂大白话:就是一个数据缓存模块

  • cron

    插件介绍:一个定时器,允许 node.js 可以按照一定时间规律或者时间节点去执行某项操作

运用以上模块,对我个人的公众号做了如下修改:

  • access_token 存储方式由 fs.writeFile 写入本地文件改为利用缓存
  • 由于 wp-json 会导致原站点安全性降低,故数据获取改用 cheerio 爬取网站内容对象获得

cheerio

安装:

npm install cheerio

用法:

<ul id="fruits">
  <li class="apple">Apple</li>
  <li class="orange">Orange</li>
  <li class="pear">Pear</li>
</ul>

html 页面结构示例如上,模块官方使用基础方式如下

const cheerio = require('cheerio'); // 首先,引入模块
const $ = cheerio.load('<ul id="fruits">...</ul>'); // 直接获取页面 #fruits 节点
// 也可以是这样
$('ul', '<ul id="fruits">...</ul>');
// 又或者是这样
$('li', 'ul', '<ul id="fruits">...</ul>');

官网示例似乎都是使用该模块去创建 DOM 的操作,更多的用法还请参考官网查阅 cheerio

而在这里我需要使用模块去抓取网站的内容,所以我使用的方法如下

const cheerio = require('cheerio'); // 首先,引入模块
const $ = cheerio.load(html) // 获取整个 html 节点
const eleUl = $.find('#fruits')
const appleTxt = $.find('#fruits .apple').text()

这样就可以对于 DOM 节点进行友好的操控了,具体使用方法 jQuery 如出一辙

实例:

我的目标网站 http://www.demo.com的 DOM 结构如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
  <dl>
    <dt>标题1</dt>
    <dd>文章简介1</dd>
  </dl>
  <dl>
    <dt>标题2</dt>
    <dd>文章简介2</dd>
  </dl>
  <dl>
    <dt>标题3</dt>
    <dd>文章简介3</dd>
  </dl>
</body>
</html>

这是我们只需要请求该地址,获取到页面数据后使用 cheerio 对页面有效内容进行提取,从而建立起该网页的数据文档

const request = require('request'); // 引入请求模块
const cheerio = require('cheerio'); // 引入 cheerio 模块
request.get('http://www.demo.com', function (err, res, body) {
    var $ = cheerio.load(html)
    var obj = [] // 空数组,用于存放数据
    $('dl').each((index, element) => { // 循环页面 DOM
        obj.push = { // 生成最终数据对象
			title: $(element).find('dt').text(),
			excerpt: $(element).find('dd').text()
        }
    })    
})

上述代码中最终获得了页面数据 obj 对象

memory-cache

安装:

npm install memory-cache --save

用法:

var cache = require('memory-cache');
cache.put('foo', 'bar'); // 存储缓存
cache.get('foo'); // 使用缓存

基础用法如上,我们也可以进行如下操作

cache.put('houdini', 'disappear', 100, function(key, value) {
    console.log(key + ' did ' + value);
});
// 参数 1 为需存储的缓存名称
// 参数 2 为 houdini 的缓存内容
// 参数 3 为缓存到期时间(该时间是从当前时间开始到过期这段这段时间的用时)
// 参数 4 回调函数

这里对于过期时间需要注意,这里的时间是 从当前时间开始到过期这段这段时间的用时

它不仅如此可以实现存储与读取,更提供了更多的操作可能,简单粗暴,似乎也没有什么更多的解释,官方介绍如下

  • del = function(key)

    删除密钥,返回一个布尔值,指定是否删除密钥

  • clear = function()

    删除所有键

  • memsize = function()

    返回占用缓存空间的条目数

  • debug = function(bool)

    打开或关闭调试

  • hits = function()

    返回缓存命中数(仅在调试模式下监视)

  • misses = function()

    返回缓存未命中的数量(仅在调试模式下监视)

  • keys = function()

    返回所有缓存键

  • exportJson = function()

    返回表示所有缓存数据的 JSON 字符串

  • importJson = function(json: string, options: { skipDuplicates: boolean })

    合并以前调用的所有数据以导出到缓存中

  • Cache = function()

    缓存构造函数

文本英文很差,所以更详细说明还请参考官网查阅 memory-cache

cron

安装:

npm install cron

用法:

var CronJob = require('cron').CronJob; // 引入模块并调用模块 CronJob 方法
var job = new CronJob('* * * * * *', function() { // 创建定时器
	console.log('You will see this message every second');
}, null, true, 'America/Los_Angeles');
job.start(); // 执行定时器

// constructor(cronTime, onTick, onComplete, start, timezone, context, runOnInit, unrefTimeout)
// cronTime [必需] 配置定时任务的时间,可以使用这可以是 cron 语法或 JS Date 对象的形式
// onTick [必需]在指定时间触发的回调
// onComplete [可选] 在作业停止时将触发的回调
// Start [可选]指定是否在退出构造函数之前启动作业,默认情况下,此值设置为 false
// timeZone [可选] -指定执行的时区。这将修改相对于您的时区的实际时间 ,不设置为当前所在时区。设置为Europe/London 为 UTC 0 时区

官方的用法如上,对于其中 cronTime 值, Nodejs 定时执行(node-cron) 给出的解释更为详细,如下

秒:0-59
分钟:0-59
小时:0-23
天:1-31
月份:0-11(1月至12月)
星期几:0-6(周日至周六)

排列顺序

*为通配符
-为时间段连接符
,号为分隔符,可以在某一节输入多个值
/号为步进符

官方示例中 * * * * * * 意思为均通配,导致结果就是每秒都执行

要在每次分钟时间为10的时候执行 * 10 * * * *

执行结果为每天14点05分10秒时执行语句 10 05 14-17 * * *

执行结果为每天14-17点的05分10秒时执行语句 11,22,25 * * * * *

也可以控制间隔多少时间执行(循环)*/3 * * * * * 间隔3秒执行,0 */2 * * * * 间隔两分钟执行

由于没有在公众号上实践,这里就不做更多赘述,还请参考官网查阅 cron


文章已同步我的个人博客:《Node微信公众号 cheerio网页抓取和memory-cache缓存模块》

海计划公众号
(0)
上一篇 2020/03/19 07:12
下一篇 2020/03/19 07:12

您可能感兴趣的内容

  • 如何从零基础成为优秀的Web前端开发人员?零基础入门_前端使用帮助

    你想成为一名Web开发人员,有一个问题,在技术行业还没有经验。你可能上了很多课程并且也写了很多个人项目,但是简历上经验一栏却始终和你没有什么关系。转型到一个新的领域并不是那么容易,你想知道你是否已经准备好了,是否有人会认真的对待你,最重要的是你是否能得到工作。相信我:不要让那些担心阻碍你前进的道路。事实上它没有那么困难,只要你已经确定你已经充分准备好转型了。

    2020/03/23
  • Screen Size入门知识_在线查询不同设备的屏幕尺寸

    Screen Size攻略教程 官方网址:http://screensiz.es/ 简介描述:在线查询不同设备的屏幕尺寸 Screensiz.es is a handy datab…

    2020/03/06
  • Angular是哪个公司的?使用教程_Angular菜鸟教程下载

    Angular是一个基于TypeScript的开源Web应用程序框架,用于在HTML和JavaScript中构建Web应用程序。Angular诞生于2009年,由Misko Hevery 等人创建,后为Google所收购,由Google维护。它最初是作为Google的一个项目启动的,但现在它是开源框架。AngularJS是为了克服HTML在构建应用上的不足而

    2020/03/22
  • 谷歌插件在测试的应用菜鸟教程下载_插件使用攻略

    谷歌小插件因其具有窗口控制、网络请求控制、各类事件监听等功能而被广泛应用在浏览器中。鉴于其强大的功能,团队考虑是否可以将其与测试过程相结合,从而提升测试效率。 一、应用背景介绍1.1 分布式全链路跟踪系统-Hunter随着SOA的普及,各大互联网公司都拥有自己较为成熟的分布式跟踪系统,比如Google的Dapper,Twitter的Zipkin,淘宝的鹰眼

    2020/03/23
  • MagicSuggest教程视频_一个高度灵活的自动提示组合框

    MagicSuggest教程视频 官方网址:http://nicolasbize.com/magicsuggest/ GitHub:https://github.com/Magic…

    2020/03/06
  • a标签调用js的几种方法教程视频_标签小白帮助

    a标签点击事件方法汇总 标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。这里的href=”javascript:;”,其中javascript:是伪协议,它可以让我们通过一个链接来调用javascript函数.而采用这个方式 javascrip

    2020/03/24
  • 响应式网站的设计流程使用攻略_响应式基础入门

    当客户提出产品功能移动化的需求时,虽然响应式站点并不能算是一种纯粹的移动化解决方案,但是,在某些情况下,这种方式是非常值得考虑的。需要先花些心思将原本的网站打造得更具弹性,使其在各种主流移动设备中都拥有尽量优秀的用户体验。响应式网站设计需要考虑以下流程。 第一步:确定需要兼容的设备类型、屏幕尺寸。通过用户研究,了解用户使用的设备分布情况,确定需要兼容的设备类

    2020/03/29
  • 利用 canvas 与 Data URLs 安全地下载一张图片基础指南_canvas基础入门

    利用 canvas 与 Data URLs 安全地下载一张图片基础指南 普通用户下载图片时只需一个「右键另存为」操作即可完成,但当我们做在线编辑器、整个 UI 都被自定义时,要如何…

    2020/03/20
  • js替换字符串中的空格,换行符r或n替换成<br>小白指南_空格入门知识

    为了让回车换行符正确显示,需要将 \n 或 \r\n 替换成
    。同样地,将空格替换存 。这里我们通过正则表达式来替换。//原始字符串
    var string = “欢迎访问!\r\ncnblogs.com 做最好的开发者知识平台”;//替换所有的换行符
    string = string.replace(/\r\n/g,”
    “)
    string

    2020/03/22
  • 聊聊前端工程化攻略教程我对工程化的理解_工程化零基础入门

    我对工程化的理解工程师是个古老的职称了。耳熟能详的有建筑工程师,电器工程师等,往往他们在人们脑海中的印象是刻板,严谨,可靠。随着互联网的发展,软件工程师出现了!他们不用一砖一瓦,也不用尺子电钻,计算机是他们的施工现场,代码是他们的工程部件,键盘之上的指尖跃动是他们的工程活动,在你看不见的地方运行着的一项项服务,操作系统上你看得见的app,网页等是他们的工程产

    2020/04/03
  • React transaction完全解读入门攻略_源码小白帮助

    前言在阅读react源码中,发现其中大量用到了transaction(中文翻译为事务)这个写法,所以单独做一下分析。其实在react中transaction的本质,其实算是一种设计模式,它的思路其实很像AOP切面编程:给目标函数添加一系列的前置和后置函数,对目标函数进行功能增强或者代码环境保护。接下来进行详细说明。初识transaction在日常业务中,经常

    2020/03/23
  • carlo小白基础_为Node程序提供了由Google Chrome浏览器提供支持的丰富渲染功能

    carlo小白基础 GitHub:https://github.com/GoogleChromeLabs/carlo 简介描述:为Node程序提供了由Google Chrome浏览…

    2020/03/06
  • 程序员和用户使用说明_程序员基础知识

    来源:外刊IT评论www.vaikan.com/how-client-use-their-software/我曾经说过,程序员不是一般的人,是具有某种超能里的人。但问题是,程序员往往意识不到自己的这种特异功能,在他们的眼里,会认为自己很普通,跟常人一样,所以,程序员能做到的事情,其他人——比如他们的客户/软件用户——也应该很容易做到。但事实上,由于大部分人—

    2020/04/05
  • CSS命名规范小白教程常用的CSS命名规则_命名菜鸟教程网

    CSS命名规范(规则)常用的CSS命名规则   头:header   内容:content/container   尾:footer   导航:nav   侧栏:sidebar   栏目:column   页面外围控制整体佈局宽度:wrapper   左右中:left  right  center  

    2020/04/03
  • require,exports和module.exports的区别指南教程_区别基础入门

    面试会问require 的运行机制和缓存策略你了解吗?require 加载模块的是同步还是异步?谈谈你的理解exports 和 module.exports 的区别是什么?require 加载模块的时候加载的究竟是什么?require提到 exports 和 module.exports 我们不得不提到 require 关键字。大家都知道 Node.js 遵

    2020/03/26
  • mpvue – 美团点评开源的基于 Vue 的微信小程序前端框架菜鸟攻略_mpvue使用教程

    mpvue 是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。实践案例美团旗下小程序:美团汽车票 和 美团充电,此外,正有一大批小程序正在接入中。快速开始我们精心准备了一

    2020/04/05