nodejs微信公众号开发——9.爬取网站素材定时推送消息

news/2024/4/27 9:03:25/文章来源:https://blog.csdn.net/weixin_34029680/article/details/89065317

上一篇文章:nodejs微信公众号开发——8.群发消息,介绍了高级群发接口的实现,并通过一个简单例子加以说明。本节的内容可能和微信公众号开发本身关系不大,只是我小项目中涉及到的内容,知识点包含nodejs爬虫和定时模块。(项目github地:https://github.com/Panfen/wem... )

1. nodejs网络爬虫

爬虫是自动获取网页内容的一个有效工具。虽然爬虫程序用Python开发的比较多,用nodejs也是一种不错的选择。我们以爬取飘花电影网为目标,爬取最近三天上线的电影,获取其电影名称电影海报图片电影详情页网页链接ftp下载链接的属性。整合成微信推送的内容。

2.爬虫基本操作

2.1 使用request模块来获取网页内容

request是一个简化HTTP请求操作的模块,功能强大且使用简单,通过GET方法来获取某个URL的内容:

var request = require('request');var URL = 'http://www.piaohua.com/';request.get(URL,function(err,res,body){if(!err && res.statusCode == 200){//输出网页内容console.log(body);}else{console.log('failed to crawl the website!');}
});

图片描述

当然,我们也采用http模块来获取数据:

var request = require('request');var URL = 'http://www.piaohua.com/';http.get(URL,function(res){var html = '';res.on('data',function(data){html += data;});res.on('end',function(){console.log(html);   //输出网页内容});
}).on('error',function(){console.log('failed to crawl the website!');
});

所得结果也是一样的,对比发现使用request的确更为简洁。

2.2 使用cheerio模块来提出网页数据

通过request获取到的是一堆网页代码,我们真正想要的数据跻身于这堆代码中。cheerio是一个jQuery Core的子集,其实现了jQuery Core中浏览器无关的DOM操作API。可以使用与jquery一样的语法来处理元素。

var cheerio = require('cheerio');...if(!err && res.statusCode == 200){var $ = cheerio.load(body);var movieList = $('#iml1').children("ul").first().find('li');var myMovieList = [];movieList.each(function(item){var time = $(this).find('span font').html() ? $(this).find('span font').html() : $(this).find('span').html();//筛选最近三天的电影if((new Date() - new Date(time)) < 259200000){var dom = $(this).find('a').first();var link = URL + $(dom).attr('href');var img = $(dom).find('img').attr('src');var name = $(dom).find('img').attr('alt').substr(22).replace('</font>','');var movie = {name:name,img:img,link:link,time:time,}myMovieList.push(movie);};});console.log(myMovieList);
}

图片描述

这里我们已经成功获取了最近三天电影的对象数组,信息包含了电影名称封面图片详情链接上线时间,和我们预期的要求还差了一个属性:ftp下载链接ftp下载链接在详情页面里面,所以我们需要进一步爬取信息。

if((new Date() - new Date(time)) < 259200000){var dom = $(this).find('a').first();var link = URL + $(dom).attr('href');var img = $(dom).find('img').attr('src');var name = $(dom).find('img').attr('alt').substr(22).replace('</font>','');getftpLink(link,function(ftp){var movie = {name:name,img:img,link:link,time:time,ftp:unescape(ftp.replace(/;/g,'').replace(/&#x/g, "%u"))  //Unicode转中文}myMovieList.push(movie);});                
};

getftpLink函数用以根据详情页链接link获取下载ftp:

function getftpLink(link,callback){request.get(link,function(err,res,body){if(!err && res.statusCode == 200){var $ = cheerio.load(body);var ftp = $('#showinfo').find('table tbody tr td a').html();callback(ftp);}});
}

图片描述

是不是很棒?拿到ftp可以直接用迅雷下载啦。

3. 爬虫定时操作

3.1 使用cron模块来定时执行任务

var cronJob = require('cron').CronJob;var job = new cronJob('f1 f2 f3 f4 f5 f6',function(){//do something
});

f1 f2 f3 f4 f5 f6用以控制时间的选项,其中f1表示秒钟,f2表示分钟,f3表示小时,f4表示一个月中的第几日,f5表示月份,f6表示一个星期中的第几天。各部分的取值含义如下(以f1为例):

  • 当值为 * 时,表示每秒执行一次;
  • 当值为a-b时,表示从第a到第b秒这段时间内执行一次;
  • 当值为*/n时,表示每隔n秒执行一次;
  • 当值为a-b/n时,表示从第a到第b秒这段时间内每隔n秒执行一次;
var cronJob = require('cron').CronJob;var job = new cronJob('00 30 11 * * *',function(){request.get(URL,function(err,res,body){...});
});

这里表示的是每天中午11:30执行一次爬虫操作,获取推送图文的素材。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_851537.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery-鼠标事件及使用unbind移除mouseover、mouseout、mousemove绑定

$item.mouseover(function(){//鼠标滑入... }).mouseout(function(){//鼠标滑出... }).mousemove(function(){//鼠标移动... }); 如上&#xff0c;对dom绑定了鼠标事件&#xff0c;那么如何解除绑定呢&#xff1f;如下设置即可&#xff1a; $item.unbind(mouseover).unbind(m…

阿里云ECS建网站(建站)超详细全套完整图文教程!菜鸟必看!

第一步&#xff1a;如何以最低价格快速买到阿里云服务器&#xff1f; 1.1 如果我是学生&#xff0c;我如何通过&#xffe5;9.9买到价值&#xffe5;117的服务&#xff1f; 答&#xff1a;用&#xffe5;9.9购买云服务器ECS是阿里云学生专属活动。首先&#xff0c;你需要在阿里…

云服务器更换PHP版本升级的问题_升级PHP后_网站打不开

摘要&#xff1a; 升级PHP版本后网站打不开解决办法&#xff0c;切换PHP版本后网站打不开解决办法。 文章前面说一下&#xff0c;本人是小白&#xff0c;写这篇文章是因为自己解决了问题&#xff0c;高兴之余&#xff0c;是因为没有这样的文章写出来&#xff0c;可能是太基础的…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 安装宝塔面板(步骤一)

介绍 我的是百度云的轻量应用服务器LS&#xff0c;新用户可以试用&#xff0c;百度云官网 1. 在服务器上安装宝塔面板 宝塔面板官网&#xff0c;我的服务器系统镜像是 Centos 7&#xff08;别用 Centos 8 宝塔面板会无法安装 Nginx&#xff0c;如果已经安装了 8 那就重装系统…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 部署前端项目(步骤二)

部署前端项目 1. 前端项目打包&#xff08;npm run build&#xff09;&#xff0c;上传打包后的 dist 文件夹到服务器&#xff0c;下面是操作步骤 新建文件夹 health-web &#xff0c;根据自己项目来 打包后的 dist 文件夹内容上传至 新建的 health-web 文件夹内 2. 新建一个…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 部署后端项目(步骤三)

部署后端项目 1. 在宝塔面板的文件中&#xff0c;新建 health-server 文件夹&#xff0c;然后上传后端代码&#xff08;千万不要上传 node_modules 文件夹&#xff09; 需要上传的文件和文件夹 上传成功后的界面 在 health_server 文件夹下&#xff0c;安装 node_modules 文…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 使用mongodb数据库(步骤四)

使用 mongodb 数据库 在软件商店里找到 mongodb &#xff0c;点击修改 mongodb 配置&#xff0c; 允许任何机器都可以访问该数据库 使用 mongodb 客户端 MongoDB Compass 连接服务器数据库 如果刷新页面出现 404&#xff0c;可以通过配置 nginx 解决 location / {try_files …

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- http变成https(步骤五)

1. 介绍 因为微信小程序请求接口需要 https&#xff0c;所以这里把 http 转换为 https 2. 申请 ssl 证书 其他免费证书 https://freessl.cn/ 因为我有百度云账号&#xff0c;这里免费申请了百度云的 ssl 证书&#xff0c;支付成功后还需要申请一下 申请成功后 下载证书&…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 常见问题

一. 接口不通 需要查看是否开启线上配置&#xff0c;默认是开发环境&#xff0c;需要配置一个生成环境&#xff0c;这里 VITE_BASE_API 使用线上地址加端口&#xff0c;也就是马赛克挡住的部分 二. 刷新页面出现404 如果刷新页面出现 404&#xff0c;可以通过配置 nginx 解决…

推荐 | 基于Linux命令行的五个文件下载和网站浏览工具

Linux命令行是GNU/Linux中最神奇迷人的部分&#xff0c;它是非常强大的工具。命令行本身功能多样&#xff0c;多种内建或者第三方的命令行应用使得Linux变得更加健壮和强大。Linux Shell支持多种不同类型的网络应用&#xff0c;无论是BT下载软件&#xff0c;专用下载器或者互联…

使用laravel快速开发网站流程(composer)

一、下载安装composer 1、composer官方下载地址 2、安装 中间的选项可以不用操作忽略掉直接下一步到安装结束 3、完成 cmd中输入composer出现下面的信息证明安装结束 4、配置中文镜像 快速down包 , 不需要的可以忽略这一步 。直接在cmd中输入命令 命令地址 二、laravel应用 …

标题党:如何写出SEO与新媒体平台都吸喜欢的标题!

标题党&#xff0c;这里先简述一下&#xff0c;大部分作者往往将标题党定义为那些利用浮夸标题吸引眼球的写手&#xff0c;基本上文不对题&#xff0c;但实际上我认为“标题党”这个词应该作为中性词。 道理很简单&#xff0c;在任何时期&#xff0c;我们都得承认标题的作用&am…

在线压力测试,测试网站并发量

原文 最近都在折腾这个站点&#xff0c;发现有时内存挺高的&#xff0c;本身使用的就是廉价小内存VPS&#xff0c;所以比较担心站点的稳定性&#xff0c;对运维压测也不是特别熟悉&#xff0c;所以找了两个在线的压力测试网站&#xff0c;小试一下&#xff0c;下面介绍给大家&a…

记录一次垃圾短信网站短链分析

垃圾办信用卡短信数据分析 最近天天收到叫我办理某银行的信用卡的短信&#xff0c;让我们感觉和真的一样&#xff0c;其实&#xff0c;很多都是套路&#xff0c;都是别人拿来套用户的信息的。下面我们来看下短信 常理分析 分析一下下面这条短信&#xff0c;首先乍一看这个短信好…

针对网站漏洞怎么修复区块链漏洞之以太坊

2019独角兽企业重金招聘Python工程师标准>>> 前段时间以太坊升级架构&#xff0c;君士坦丁堡的硬分叉一个升级代号&#xff0c;被爆出含有高危的网站漏洞&#xff0c;该漏洞产生的原因是由于开启了新的协议模式eip1283导致的&#xff0c;也是区块链漏洞当中危害较为…

网站负载均衡

1、什么是负载均衡 负载均衡就是由多台服务器&#xff08;群集&#xff09;对同一个网站提供服务&#xff0c;用户的请求被分配给群集中某台服务器来处理。不同的用户访问同一个网站&#xff0c;但后台提供服务的服务器可能是不同的。当有大量的并发访问时&#xff0c;这种群集…

[译] 用 Workers 让静态网站动态化

原文地址&#xff1a;Using Workers To Make Static Sites Dynamic原文作者&#xff1a;Guest Author译文出自&#xff1a;掘金翻译计划本文永久链接&#xff1a;https://github.com/xitu/gold-miner/blob/master/TODO1/using-workers-to-make-static-sites-dynamic.md译者&…

精选:3个可以下载免费的高质量照片的网站

在您的照片库中加入成千上万张高品质的照片&#xff0c;涵盖各种主题和风格&#xff01;下面列出的网站提供可用于任何项目的图像&#xff0c;没有限制。您不必担心因为一张小图片的版权而导致麻烦。通过这些网站可以改善你的设计项目&#xff0c;这些是网上提供免费的高质量图…

mouseout、mouseover和mouseleave、mouseenter区别

今天在使用鼠标事件时&#xff0c;用错了mouseout&#xff0c;于是做个测试总结。 结论&#xff1a; mouseenter&#xff1a;当鼠标移入某元素时触发。 mouseleave&#xff1a;当鼠标移出某元素时触发。 mouseover&#xff1a;当鼠标移入某元素时触发&#xff0c;移入和移出…