云函数爬虫并自动发布公众号推文
云函数爬虫数据并自动发布公众号推文文章
文章目录
- 云函数爬虫数据并自动发布公众号推文文章
- 一、项目简介
- 二、基本流程
- 三、项目配置
- 四、资源网站
- 五、云函数获取数据
- 六、云函数发布公众号文章
- 七、效果展示
- 结语
- 投票
- 相关参考
一、项目简介
身为程序员,最喜欢搞“机”了!最近玩了会公众号,但是又懒得写文章。此外,每天都去网上扒拉各种学习资源,所以就想了一个懒人操作——使用爬虫每天获取数据,并自动将数据发送到公众号推文!这样我就可以躺着学习了,hiahiahia!
二、基本流程
本文章的基本流程如下图所示。
- 首先寻找猎物——资源网站。网上的资源网站很多,比如这个文章介绍的资源网站挺花里胡哨。这里我就以获取ahhhhfs为例。
- 其次爬取数据——使用微信小程序的云函数(js)来进行爬取。需要安装相应模块。
- 最后发布文章——使用云函数将爬到的数据自动生成公众号文章,并保存至草稿箱。
OK!开干!
三、项目配置
- 创建云函数(dddd,这里不再赘述)
- 云函数安装相应的模块
npm install request --save
npm install request-promise
npm install cheerio --save
npm install iconv-lite --save
- 设置每天凌晨5点自动触发云函数
{"permissions": {"openapi": []},"triggers":[{"name":"scrap","type":"timer","config":"0 0 5 * * * *"}]
}
完成基本的配置以后,就可以开始进一步分析了!
四、资源网站
进入资源网站以后,发现其url随页数改变而改变。其中第三页的url如下图所示。
共有96页,最后一页只有7条数据。即共有95*16+7=1527条数据。
这样就可以将相关资源的url全部提取出来,如下图所示。
这里不再赘述详细过程,(本地vscode运行)获取所有url的源码如下:
const request = require('request');//
const iconv = require('iconv-lite');//设置编码格式
const Cheerio = require('cheerio');
var fs = require('fs')
var logger = fs.createWriteStream('ans.txt', {flags: 'a' // 'a' means appending (old data will be preserved)})
const requestPromise = (url) =>{return new Promise((resolve, reject) =>{//先取消原有的编码格式request(url, {encoding:null},function (error, response, body) {if(response.statusCode == 200){//如果原网页编码格式有问题,可以转成ubt8格式的,该括号内utf-8为原网页编码格式(演示使用)const bufs = iconv.decode(body, 'utf-8');const html = bufs.toString('utf-8');//转成utf-8// console.log(html);resolve(html);}else{reject(error);}});})
}
const url = 'https://www.ahhhhfs.com/welfare/recourse/page/'; //for(let i=1;i<=96;i++){requestPromise(url+i).then(res => {var $ = Cheerio.load(res);//成功后用cheerio加载var nodes = $(".entry-media")for(let j=0;j<nodes.length;j++){logger.write(nodes[''+j].children[0].children[0].attribs.href+"\n") }});console.log("第"+i+"页finished!")
}
爬取结果
共获取1527个url。
然后将这些url导入云开发数据库,以便日后每天爬一条具体的数据。
五、云函数获取数据
首先从云数据库获取今天要爬取的url,爬取数据的代码变化不大,主要就是添加了一个dfs的获取数据算法,将网页中的相关文本消息全部爬下来,云函数爬数据相关代码如下。
function dfs(node){if(node=='undefined'){return ""}if(node.type=='text'){return node.data+"\n"}if(node.name=='a'&&node.attribs.href[0]!='#'){return node.attribs.href+"\n"}var str = ""//获取所有孩子节点var nodes=node.childNodesfor(let i=0;i<nodes.length;i++){let s = dfs(nodes[i])if(s!='undefined'){str+=s}}return str
}
//main函数中
//封装成函数
const requestPromise = (url) =>{return new Promise((resolve, reject) =>{//先取消原有的编码格式request(url, {encoding:null},function (error, response, body) {if(response.statusCode == 200){//如果原网页编码格式有问题,可以转成ubt8格式的,该括号内utf-8为原网页编码格式(演示使用)const bufs = iconv.decode(body, 'utf-8');const html = bufs.toString('utf-8');//转成utf-8// console.log(html);resolve(html);}else{reject(error);}});})}
requestPromise(url).then(res => {var $ = Cheerio.load(res);//成功后用cheerio加载var title = $('h1').text()var node = $('article .entry-content')['0']var content = dfs(node)console.log(title,content)
})
六、云函数发布公众号文章
这个算是有点小难搞,毕竟和qi鹅打交道,或多或少都会遇到小坑。
- 首先是请求token
// 获取公众号access_token方法
async function getWechatAccessToken() {let token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=yourAppid&secret=yourSecret'const req = options =>new Promise((resolve, reject) => {request(options, (error, response, body) => {if (error) {reject(error);}resolve(response);});});const result = await req({url: token_url,method: 'GET'});return (typeof result.body === 'object') ? result.body : JSON.parse(result.body);;
}
注意:获取token需要固定云函数的公网ip、延长云函数的超时时间、增加云函数的内存配置,最后在微信公众平台对该ip进行开放。
- 其次将上一阶段爬取的数据进行整合
let article = {"title":title,"author":"热爱分享的熊猫","digest":'每日资源分享!',"content":content,"thumb_media_id":"Ri625hhtBcw-gVmK_XXa8OsW6A8mDluyqZ3SqMcZ2UmW-S1_AOeNG_R5F13DGV2s",//文章封面,需要通过postman获取"need_open_comment":0,"only_fans_can_comment":0
}
- 最后通过云函数来发布公众号文章
由于资金没到位,我的订阅号没有认证,所以只能使用接口来添加草稿,群发功能需要进行认证 300元,群发接口如下。
let token = await getWechatAccessToken()
const addDraft = 'https://api.weixin.qq.com/cgi-bin/draft/add?access_token='+token.access_token
//添加草稿
rp({method: 'POST',url: addDraft,json: true,form: JSON.stringify({"articles": [article]}),headers: {"content-type": "application/json",// "content-Type": "application/x-www-form-urlencoded",// 'User-Agent': 'Request-Promise'// "token": event.token},
})
.then(function(res){console.log(res)
}).catch(err=>{console.log(err)
})
七、效果展示
云函数获取数据
云函数上传文章
公众号推文详细页面
结语
- 需要源码的朋友可以评论哦
- 欢迎关注下面的公众号,影视资源、学习资源、各种强大资源…
- 文章相关内容来源于网络,若侵权请联系
- 未授权不可转载
- 生活不易,希望支持
- 本文数据来源于ahhhhfs网站,链接:https://www.ahhhhfs.com/
投票
你觉得这篇文章有用吗?请投个票吧~
相关参考
javascript爬虫
资源网站
cheerio中文文档
微信官方文档
js读写文件
云函数爬虫并自动发布公众号推文相关推荐
- 微信公众号推文发布方法(内涵详细步骤)
今天又朋友专门发信息咨询微信公众号推文怎么发布以及维护方法,在大不分熟悉微信公众号发文流程的同学看来,其实是非常简单的:但是对于没有接触过这一方面的其他同学来讲,也是一件非常苦恼的事情,没有头绪. ...
- 微信公众号推文发布方法(内含详细步骤)
今天有朋友专门发信息咨询微信公众号推文怎么发布以及维护方法,在大部分熟悉微信公众号发文流程的同学看来,其实是非常简单的:但是对于没有接触过这一方面的其他同学来讲,也是一件非常苦恼的事情,没有头绪. ...
- 微信小程序获取并展示公众号推文
微信小程序获取并展示公众号推文 获取公众号access_token(开发环境) IP白名单设置 获取access_token 小程序前端展示 素材导入云数据库 云函数读取展示 注:笔者是小程序菜鸟,代 ...
- 怎么在CSDN中写微信公众号推文?
简 介: 本文给出了使用CSDN编写微信公众号的推文的过程.为了方便,编写了一些辅助程序以弥补CSDN中的补足,并对从CSDN到MDNICE进行文章格式的转换.通过长期使用,验证了这个过程非常有效. ...
- ➢ 微信公众号运营教程(三)熟悉一些实用的工具 编写第一篇公众号推文
➢ 微信公众号运营教程(三) 熟悉一些实用的工具 & 编写第一篇公众号推文 实用的一些工具 ①浏览器:Google Chrome谷歌浏览器 ②图片素材 首先,我们编写文章的时候,需要一些配图, ...
- 微信公众号推文内可以添加附件了吗?
微信公众号推文内可以添加附件了吗?答案是:是的. 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序"微附件" ...
- 微信公众号推文次数不受限的秘技
微单页Light Press,支持智能推送了,而且可以设置背景图. 微单页Light Press是新功能,应该很多人还没玩转,补课戳这里.打开[微单页Light Press],进入[智慧链接]> ...
- 微信小程序跳转公众号推文
注:笔者是自学小程序,自身开发经验不足,代码肯定存在不规范和不足,该博客参考一下就好 完整项目代码:https://github.com/zim-keavin/wxapp-cloud-demo 实现在 ...
- 导航栏iframe公共样式_中秋节微信公众号推文样式素材推荐
九月即将过半,等待我们的不止是中秋假期,还有公众号推文!一篇好的节日公众号推文,可以带动更多的人阅读,带动更多的人观看,增加更多的曝光,一篇好的推文排版可以给文章增加更多色彩,接下来就给大家分享一些中 ...
最新文章
- 深度学习在图像处理中的应用
- 使用Capture画原理图
- paddle版fnet_google
- 程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦
- 在mysql表中如何变换列和行_在SQL中转换列和行的简单方法?
- c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序
- 不同网段通过静态路由实现互通(强烈推荐)
- 常用SHELL软件命令
- 一个html页面上显示dopost,Java遇见HTML-servlet(一)
- python 解析命令行
- 黑白染色——封锁阳光大学
- 【脑电数据十折交叉验证】实现对数据自动划分训练集与测试集得出平均分类准确率
- Kafka C++客户端库librdkafka详解
- SQL语句中查询数据
- 基于统计的开源翻译系统介绍
- 2048游戏回顾三:自定义Dialog和ProgressBar
- 大众点评信息流基于文本生成的创意优化实践
- 基于CC2430的基础实验6---UART串口实验
- Tableau可视化技巧-让你的图表跟随时间动起来
- mysql怎么定位错误信息_如何快速定位MySQL 的错误日志(Error Log)?