云函数爬虫数据并自动发布公众号推文文章

文章目录

  • 云函数爬虫数据并自动发布公众号推文文章
    • 一、项目简介
    • 二、基本流程
    • 三、项目配置
    • 四、资源网站
    • 五、云函数获取数据
    • 六、云函数发布公众号文章
    • 七、效果展示
      • 结语
      • 投票
      • 相关参考

一、项目简介

身为程序员,最喜欢搞“机”了!最近玩了会公众号,但是又懒得写文章。此外,每天都去网上扒拉各种学习资源,所以就想了一个懒人操作——使用爬虫每天获取数据,并自动将数据发送到公众号推文!这样我就可以躺着学习了,hiahiahia!

二、基本流程

本文章的基本流程如下图所示。

  1. 首先寻找猎物——资源网站。网上的资源网站很多,比如这个文章介绍的资源网站挺花里胡哨。这里我就以获取ahhhhfs为例。
  2. 其次爬取数据——使用微信小程序的云函数(js)来进行爬取。需要安装相应模块。
  3. 最后发布文章——使用云函数将爬到的数据自动生成公众号文章,并保存至草稿箱。

    OK!开干!

三、项目配置

  1. 创建云函数(dddd,这里不再赘述)
  2. 云函数安装相应的模块
npm install request --save
npm install request-promise
npm install cheerio --save
npm install iconv-lite --save
  1. 设置每天凌晨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鹅打交道,或多或少都会遇到小坑。

  1. 首先是请求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进行开放。

  1. 其次将上一阶段爬取的数据进行整合
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
}
  1. 最后通过云函数来发布公众号文章
    由于资金没到位,我的订阅号没有认证,所以只能使用接口来添加草稿群发功能需要进行认证 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读写文件

云函数爬虫并自动发布公众号推文相关推荐

  1. 微信公众号推文发布方法(内涵详细步骤)

      今天又朋友专门发信息咨询微信公众号推文怎么发布以及维护方法,在大不分熟悉微信公众号发文流程的同学看来,其实是非常简单的:但是对于没有接触过这一方面的其他同学来讲,也是一件非常苦恼的事情,没有头绪. ...

  2. 微信公众号推文发布方法(内含详细步骤)

      今天有朋友专门发信息咨询微信公众号推文怎么发布以及维护方法,在大部分熟悉微信公众号发文流程的同学看来,其实是非常简单的:但是对于没有接触过这一方面的其他同学来讲,也是一件非常苦恼的事情,没有头绪. ...

  3. 微信小程序获取并展示公众号推文

    微信小程序获取并展示公众号推文 获取公众号access_token(开发环境) IP白名单设置 获取access_token 小程序前端展示 素材导入云数据库 云函数读取展示 注:笔者是小程序菜鸟,代 ...

  4. 怎么在CSDN中写微信公众号推文?

    简 介: 本文给出了使用CSDN编写微信公众号的推文的过程.为了方便,编写了一些辅助程序以弥补CSDN中的补足,并对从CSDN到MDNICE进行文章格式的转换.通过长期使用,验证了这个过程非常有效. ...

  5. ➢ 微信公众号运营教程(三)熟悉一些实用的工具 编写第一篇公众号推文

    ➢ 微信公众号运营教程(三) 熟悉一些实用的工具 & 编写第一篇公众号推文 实用的一些工具 ①浏览器:Google Chrome谷歌浏览器 ②图片素材 首先,我们编写文章的时候,需要一些配图, ...

  6. 微信公众号推文内可以添加附件了吗?

    微信公众号推文内可以添加附件了吗?答案是:是的. 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序"微附件" ...

  7. 微信公众号推文次数不受限的秘技

    微单页Light Press,支持智能推送了,而且可以设置背景图. 微单页Light Press是新功能,应该很多人还没玩转,补课戳这里.打开[微单页Light Press],进入[智慧链接]> ...

  8. 微信小程序跳转公众号推文

    注:笔者是自学小程序,自身开发经验不足,代码肯定存在不规范和不足,该博客参考一下就好 完整项目代码:https://github.com/zim-keavin/wxapp-cloud-demo 实现在 ...

  9. 导航栏iframe公共样式_中秋节微信公众号推文样式素材推荐

    九月即将过半,等待我们的不止是中秋假期,还有公众号推文!一篇好的节日公众号推文,可以带动更多的人阅读,带动更多的人观看,增加更多的曝光,一篇好的推文排版可以给文章增加更多色彩,接下来就给大家分享一些中 ...

最新文章

  1. 深度学习在图像处理中的应用
  2. 使用Capture画原理图
  3. paddle版fnet_google
  4. 程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦
  5. 在mysql表中如何变换列和行_在SQL中转换列和行的简单方法?
  6. c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序
  7. 不同网段通过静态路由实现互通(强烈推荐)
  8. 常用SHELL软件命令
  9. 一个html页面上显示dopost,Java遇见HTML-servlet(一)
  10. python 解析命令行
  11. 黑白染色——封锁阳光大学
  12. 【脑电数据十折交叉验证】实现对数据自动划分训练集与测试集得出平均分类准确率
  13. Kafka C++客户端库librdkafka详解
  14. SQL语句中查询数据
  15. 基于统计的开源翻译系统介绍
  16. 2048游戏回顾三:自定义Dialog和ProgressBar
  17. 大众点评信息流基于文本生成的创意优化实践
  18. 基于CC2430的基础实验6---UART串口实验
  19. Tableau可视化技巧-让你的图表跟随时间动起来
  20. mysql怎么定位错误信息_如何快速定位MySQL 的错误日志(Error Log)?

热门文章

  1. 地理建模方法概述02
  2. 云服务器Ubuntu安装Phonopy教程
  3. 【论文译文】VQVAE
  4. 2022年武汉中级工程师职称考核认定是怎么认定的呢?
  5. 关于如何训搭建企业自然语自训练库
  6. 美妆是个好生意,帮女神们虚拟试妆的app也会是好生意吗?
  7. [导入]网络收藏夹 地址收集
  8. 软件测试--测试用例以及黑盒测试数据的选择方法
  9. oracle 每月同期对比,两年数据同期对比表_月份对比表格怎么做
  10. windows系统专业版纯净镜像下载