什么是Node?
官方描述:Node.js® is an open-source, cross-platform JavaScript runtime environment.
翻译过来就是:Node.js 是一个开源的、跨平台的 JavaScript 运行环境。
当我们谈论 Node.js 时,可以把它想象成一种能让你用 JavaScript 运行在服务器上的技术。这可能会让你感到奇怪,因为通常我们认为 JavaScript 是在网页上执行的脚本语言。
简而言之,Node.js 是一个让 JavaScript 能够在服务器端运行的平台。这给开发者提供了一个强大而灵活的工具,可以用同一种语言编写前端和后端的代码。
Node 优点总结如下:
- JavaScript 在服务器上运行: 以前,JavaScript 主要用于网页上的交互。但是,Node.js 让JavaScript可以在服务器上运行,执行像处理文件、连接数据库、发送电子邮件等服务器端任务。
- 事件驱动和非阻塞 I/O: Node.js 使用事件驱动和非阻塞I/O的方式来处理请求。这意味着它可以同时处理多个请求,而不必等待一个请求完成后再处理下一个。这使得 Node.js 非常高效。
- 构建可伸缩的网络应用: 由于其异步非阻塞的特性,Node.js 非常适合构建实时的、可伸缩的网络应用,比如聊天应用、在线游戏等。
- 包管理工具 npm: Node.js 附带了一个名为 npm 的包管理工具,它使得在项目中使用和分享代码变得非常容易。开发者可以轻松地安装、更新和分享代码包。
- 社区支持: Node.js 有一个庞大的开发者社区,这意味着你可以轻松地找到大量的开源代码、工具和资源,从而更快地构建你的应用。
总的来说,Node.js 是一个强大的工具,它使得用 JavaScript 构建全栈应用变得更加容易和高效。
Node.js 官方网站(中文版):www.nodejs.com.cn/
npm 包管理工具
npm 是 Node.js 自带的包管理工具,由于 Node 的内置模块仅提供了一些底层的 API,导致在基于内置模块进行项目开发时,效率太低,所以第三方模块(包)基于内置模块,封装出了更高级更方便的 API,极大提高了开发效率,npm 是世界上最大的开源库生态系统之一,拥有数以百万计的包,供我们程序员使用。
我们可以在浏览器打开 npm 官方网站 www.npmjs.com/
在搜索框中我们可以根据自己的需求,查找自己需要的包。
我们拿 glob 包做个演示:
这个页面会介绍这个包的功能以及代码实现样例。如果我们想使用这个包,应该先下载到自己的文件夹下,我们找到右边的 Install
窗口,复制这行代码,来到终端粘贴运行 npm i glob
,然后就能在文件夹下看到新增了两个 json
文件和一个 node_modules
文件夹,这里面存放了我们的包信息,然后就能在我们的入口文件(index.js
)中导入包了。
如果下载包速度过慢,可能会导致超时下载失败,可以选择换源操作。下面我来介绍一种换源操作:
1. 查看源
首先我们先看看源指向哪里:
js
npm config get registry
不出所料应该是默认是指向 https://registry.npmjs.org/
即官方源。
2. 更换源
我们可以选择任意国内源即可(其中部分源可能已经失效)。
淘宝 NPM 镜像:registry.npm.taobao.org
阿里云 NPM 镜像:npm.aliyun.com
腾讯云 NPM 镜像:mirrors.cloud.tencent.com/npm/
华为云 NPM 镜像:mirrors.huaweicloud.com/repository/...
网易 NPM 镜像:mirrors.163.com/npm/
中科院大学开源镜像站:mirrors.ustc.edu.cn/
清华大学开源镜像站:mirrors.tuna.tsinghua.edu.cn/
换完源我们再进行 npm i glob
下包操作,应该就能够解决这个问题了。
Node 爬虫
步入正题。
今天我们爬取的是豆瓣的 Top250 电影信息,首先我们来到豆瓣电影Top250网页。
1.选择需要爬取的页面元素
我们可以根据自己的需求,在检查页面查找自己想要爬取的内容,这里我们用爬取电影名
、评分
和图片
举例
2.导入模块
我们在一个空文件夹下创建一个 index.js 文件,这里我们需要导入三个模块:https
、fs
和 cheerio
,其中https
、fs
是 Node 内置模块,cheerio
是第三方模块,需要手动从 npm 中导入。
https
模块的主要作用是用于处理 HTTPS 请求,下图是 node 官方文档,详细介绍了用法及实现。(https 安全超文本传输协议 | Node.js API 文档)
fs
内置模块,用于读写文件,下图是 node 官方文档,详细介绍了用法及实现。(fs 文件系统 | Node.js API 文档)
cheerio
模块用于在服务器端使用 jQuery 语法解析 HTML,下图是 nmp 官方文档,详细介绍了用法及实现。(cheerio - npm)
3.代码实现:
js
const https = require('https'); // 引入 https 模块
const cheerio = require('cheerio'); // 引入 cheerio 模块
const fs = require('fs'); //引入文件系统模块
// 发起 HTTPS 请求,获取豆瓣Top250电影页面的 HTML 内容
https.get('https://movie.douban.com/top250',(res)=>{
let html = ''
// 监听 'data' 事件,当接收到数据时触发,拼接数据到 html 变量
res.on('data',(chunk)=>{
html += chunk; //强行把十六进制转换成十进制页面代码
})
// 监听 'end' 事件,当数据接收完毕时触发
res.on('end',()=>{
// 使用 cheerio.load() 方法加载 HTML 内容,返回一个类似 jQuery 的对象
const $ = cheerio.load(html);
// 用于存储电影信息的数组
const result = []
// 使用 cheerio 选择器遍历每个电影条目
$('li .item').each(function(){
// 从当前电影条目中提取标题、评分和图片链接
const title = $('.info .title',this).text() //标题
const star = $('.info .bd .rating_num',this).text() //评分
const pic = $('.pic img',this).attr('src') //图片
// 将提取的信息组成对象并添加到结果数组中
result.push(
{
title,
star,
pic
}
)
})
// 将结果数组以 JSON 格式写入文件
fs.writeFile('./list.json', JSON.stringify(result),(err,data)=>{
if(err){
throw err
}
console.log('文件写入成功!');
})
})
})
4.成果展示
最后
当你成功运行这段 Node.js 代码时,你已经迈出了使用 JavaScript 后端应用的一大步。
希望这篇文章能够为你提供了一个简单而实用的入门指南,让你更了解 Node.js,并激发了你深入学习的兴趣。如果你有任何疑问或想要了解更多,不要犹豫,加入社区,查阅文档,与其他开发者交流,共同成长。
已将学习代码放入Gitee,欢迎大家学习指导!!!
技术小白记录学习过程,有错误或不解的地方还请评论区留言,如果这篇文章对你有所帮助请 "点赞 收藏+关注" ,感谢支持!!