手机版

node.js抓取网页内容(针对微信小程序云开发)

时间:2021-12-05 来源:互联网 编辑:宝哥软件园 浏览:

最近在研究微信小程序的云开发功能。云开发最大的优势是不需要前端搭建服务器,可以利用云的能力编写一个可以从头上线的微信小程序,从而避免了购买服务器的成本。个人尝试从前端到后台开发微信小程序,还是不错的选择。一天就可以推出一个微信小程序。

云开发的优点

云开发为开发者提供了完整的云支持,弱化了后端和运维的概念,无需搭建服务器,利用平台提供的API进行核心业务开发,即可快速上线迭代。同时,这种能力与开发人员已经使用的云服务兼容,而不是相互排斥。

云开发目前提供三种基本能力支持:

云功能:在云端运行的代码,微信私有协议的自然认证,开发者只需要编写自己的业务逻辑代码数据库:一个可以在小程序前端操作,在云端读写的JSON数据库存储功能:直接在小程序前端上传/下载云文件,在云开发控制台中可视化管理,介绍这么多关于云开发的知识,感性的同学可以学习一下。

网页内容抓取

小程序是关于回答问题的,所以问题的来源是一个问题。在网上搜索,贴一个又一个的题目是一种方法,但就是这样重复的工作,估计贴了10年左右就想放弃了。于是我想到了网页抓取。就拿起之前学过的节点。

必备工具:

再见.类似于服务器端JQuery的包。主要用它来分析过滤抓取的内容。节点的fs模块。该模块附带节点,用于读写文件。这用于将解析后的数据写入json文件。Axios(不需要)。用来抓取网站的HTML页面。因为我想要的数据是通过点击网页上的一个按钮来呈现的,所以我不能通过直接访问这个网站来获得它。但是您只能复制所需的内容,将其保存为字符串,并解析该字符串。接下来,您可以使用npm init来初始化一个节点项目,在一路返回之后,您可以生成一个package.json文件。然后npm install -保存axios cheerio以安装cherio和axios包。

关键是使用cheerio实现类似jquery的功能。只需点击你已经抓取的内容cheerio.load(quesitons),然后你就可以根据jquery获取dom并组装你想要的数据。

最后,用fs.writeFile将数据保存在json文件中,就完成了。

具体代码如下:

让axios=require(' axios ');让cherio=require(' cherio ');让fs=require(' fs ');//我的html结构大致如下。有许多数据常量问题=`li ID=' Q1 '样式=' display 3360 list-item;'Div class=' Question Wrapper ' Div class=' Question '抬起头来看,我发现是月光,_ _ _ _ _/Div class=' answer '值='0 '回头看白云低/Div class=' answer '值='1 '再次下沉,我突然想到家/Div class=' answer '值='0 '春天来临时/Div class=' answer '值=' 0 '红掌清波/Div/Div/Li ID=' Q2 ' Div class=' Question Wrapper ' Div class=' Question '/div class='答案' value='1 '我们应该什么时候一起剪西窗蜡烛/div class='答案' value=' 0qu?

ot;> 在天愿做比翼鸟 </div> <div class="answer" value="0"> 世味年来薄似纱 </div> <div class="answer" value="0"> 两岸青山相对出 </div> </div> </li> .......... `; const $ = cheerio.load(quesitons);var arr = [];for (var i = 0; i < 300; i++) { var obj = {}; obj.quesitons = $("#q" + i).find(".question").text(); obj.A = $($("#q" + i).find(".answer")[0]).text(); obj.B = $($("#q" + i).find(".answer")[1]).text(); obj.C = $($("#q" + i).find(".answer")[2]).text(); obj.D = $($("#q" + i).find(".answer")[3]).text(); obj.index = i + 1; obj.answer = $($("#q" + i).find(".answer")[0]).attr("value") == 1 ? "A" : $($("#q" + i).find(".answer")[1]).attr("value") == 1 ? "B" : $($("#q" + i).find(".answer")[2]).attr("value") == 1 ? "C" : "D"; arr.push(obj);}fs.writeFile("poem.json", JSON.stringify(arr), err => { if (err) throw err; console.log("json文件已成功保存!");});

保存到json后的文件格式如下,这样就可以通过json文件上传到云端服务器了。

node.js 抓取网页内容(针对微信小程序云开发)(图1)

注意事项

微信小程序云开发的数据库,上传json文件的数据格式需要注意一下,之前一直提示格式错误,后来才发现,JSON 数据不是数组,而是类似 JSON Lines,即各个记录对象之间使用 n 分隔,而非逗号。所以还需要对node写出来的json文件做一个小处理之后才能上传成功。

版权声明:node.js抓取网页内容(针对微信小程序云开发)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。