likes
comments
collection
share

从基础到实践:掌握Node.js后端开发与实现豆瓣电影爬虫项目

作者站长头像
站长
· 阅读数 29

前言

欢迎步入编程与技术探索的奇妙之旅!在这个数字时代,编程已成为解锁创新、解决复杂问题的关键。今天,我们将携手踏入Node.js的疆域,这一JavaScript的服务器端王者,不仅打破了前后端的界限,还以其轻盈高效的姿态,引领着现代Web开发的新潮流。紧接着,我们将搭乘“爬虫”号探险船,深入数据的海洋——以豆瓣电影为目的地,学习如何巧妙地自动化收集并分析互联网上的宝贵信息。这不仅是一次技术的磨练,更是一场对信息自由探索的激情之旅。准备好了吗?让我们一起启航,用代码编织梦想,揭开数据背后的秘密。

首先

了解相关知识

Node.js 与 NPM

  • Node.js:它不仅让JavaScript能够运行在服务端,还因其非阻塞I/O和事件驱动的特性,非常适合构建高性能的网络应用。对于后端开发,特别是处理大量并发请求和实时数据交互的应用,Node.js是一个流行的选择。
  • NPM (Node Package Manager) :它是随Node.js一起安装的包管理器,极大地便利了JavaScript开发者的包依赖管理和项目构建过程。通过npm i命令(或更现代的npm install)可以安装项目所需的外部库或框架,如request-promisecheerio,这些包能帮助开发者快速实现功能,无需从零开始编写所有代码。

首先打开代码相关路径的控制台,输入下方代码

npm i request-promise
npm i cheerio

这两个包的作用为:request-promise负责网络请求部分,获取网页数据,而cheerio则在数据到达后,扮演“数据挖掘工”的角色,高效地从HTML源码中筛选和提取出所需要的信息。

好了,一个简单爬虫项目的相关知识已经完毕,让我们来进入代码部分。

代码

先引入我们下载好的包

// 引入request-promise cheerio
const request = require('request-promise');
const cheerio = require('cheerio');

创建main方法来解决我们的需求

// 定义一个异步主函数main,作为程序的入口
async function main(){
    // 程序员思维的体现:将任务分解为小步骤
    // 伪代码描述了整个逻辑流程

    // 定义了目标URL,指向豆瓣电影排行榜页面
    const URL = "https://movie.douban.com/chart";

    // 使用request-promise(或类似库)发送HTTP GET 请求获取豆瓣电影排行榜页面的HTML内容
    const html = await request({
        url: URL
    });

    // 使用cheerio来解析HTML,模拟DOM操作
    let $ = cheerio.load(html);

    // 选取包含电影条目的CSS选择器
    const movieNodes = $('#content .article .item');

    // 初始化一个数组来存储解析后的电影信息
    const movieList = [];

    // 遍历每个电影节点,提取信息并加入到movieList
    for(let i = 0; i < movieNodes.length; i++){
        // 提取每个电影信息的函数getMovieInfo
        movieList.push(getMovieInfo(movieNodes[i]));
    }

    // 输出最终解析得到的电影列表
    console.log(movieList);
}

以上代码其实已经为我们爬取完了数据,但其实还是长篇大论,接下来要解析爬到的数据,获取关键要素,例如标题title、图片pic、详情info及评分rating_nums。而这部分由getMovieTnfo函数完成

const getMovieInfo = function(node) {
    let movieInfo = {}; // 初始化一个空对象用于存放电影信息
    
    // 使用cheerio加载当前电影节点到内存中,以便进行DOM操作
    let $$ = cheerio.load(node);
    
    // 提取电影标题
    let title = $$('.pl2 a').text(); // 获取包含在class为'pl2'的a标签内的文本
    // 提取电影封面图片链接
    let pic = $$('.nbg img').attr('src'); // 获取class为'nbg'的img标签的src属性,即图片链接
    // 电影简介等附加信息
    let info = $$(' .pl').text(); // 获取所有class为'pl'的元素的文本内容
    // 评分
    let rating_nums = $$('.rating_nums').text(); // 获取class为'rating_nums'的元素内的文本,通常是评分
    
    // 将提取的信息填充到movieInfo对象中
    movieInfo.title = title;
    movieInfo.pic = pic;
    movieInfo.info = info;
    movieInfo.rating_nums = rating_nums;
    
    // 返回整理好的电影信息对象
    return movieInfo;
}

最后调用main函数,输出以JSON数组格式的电影列表。

最后

在这个数字化旅程的探索中,我们不仅触及了Node.js后端开发的精髓,领略了异步编程的魅力,还深入实践了网络爬虫技术,亲手从浩瀚的互联网海洋中捕捞取了宝贵的数据珍珠——豆瓣电影信息。每一步都凝聚着技术的智慧,每一行代码都铺就了通向创新的道路。

如今,随着main函数的圆满执行,电影列表的JSON跃然屏上,不仅展现了信息的组织之美,更是对技术应用的一次胜利礼赞歌。记住,每一次尝试与实践都是通往大师之路的坚实步伐,每一次解析与封装都是对复杂世界的优雅解读。 从基础到实践:掌握Node.js后端开发与实现豆瓣电影爬虫项目 让我们以此为契机,继续在编程的世界里扬帆远航,不断深化对技术的理解,拓宽知识的边界。未来,不论是深化后端的逻辑,优化前端的体验,或是探索数据的深邃,愿我们都能以今日所学,筑基,创造更多价值,点亮数字世界的璀璨星光。

旅程至此,未完待续,期待在未来的代码行间,我们再次相逢,共赴技术的盛宴。编码不息,创新不止,我们同在。再见,为了下一场智慧的冒险,我们整装待发。

转载自:https://juejin.cn/post/7370993837303316518
评论
请登录