30行代码使用node搞一个简单爬虫

前言

随着前端在工作中承担的职责不断扩大,node也成了前端进阶的必备技能,那么今天我们就来搞搞node。看完这篇文章,你将学到:

   - node一些插件库的认识和使用
   - 如何用node做一个简单的爬虫

好了,话不多说,接下来我们就用node搞点好玩的,兄弟萌,干就完了。

目标

做事情之前一定要目标明确,先规划一下我们要干点什么。

最近想下载点电影看看,去电影天堂去看的话,一页一页翻很是麻烦。并且众所周知程序员是一个很懒的群体,那么我们能不能通过写几行代码,把电影名称都爬下来,有想看的的直接去网站再搜索下载,答案当然是可以的。

既然目标已经确定了,下面就开始了。

代码实现

首先我们进入首页随便点进一部电影的详情,发现他的地址是https://www.dy2018.com/i/1018...
30行代码使用node搞一个简单爬虫_第1张图片

emmmmmm,好像明白了什么,再点进其他电影的详情地址是https://www.dy2018.com/i/1018...
30行代码使用node搞一个简单爬虫_第2张图片

那我们现在找到了它的规律,是依靠xxxxx.html来对电影进行编号访问的,那么我们接下来要做的就很简单了,只需要设定一个编号的范围,循环访问这些地址,在输出我们想要的东西就ok了。那么,好戏开场了,给爪巴。

    // 这里请求使用request库
    const originRequest = require('request');
    // 为服务器特别定制的,快速、灵活、实施的jQuery核心实现
    const cheerio = require('cheerio');
    // iconv-lite用于在node当中处理在各种操作系统出现的各种奇特编码,该模块不提供读写文件的操作,只提供文件编码转换的功能
    const iconv = require('iconv-lite');

    // 接下来我们封装一下request方法,减少代码重复,方便之后调用
    function request(url, cb) {
        let options = {
            encoding: null
        }

        originRequest(url, options, cb);
    }

    // 循环请求,获取到相应数据后进行编译拼装 这里我们爬取编号为100533--100563的30部电影名称
    for(let i = 100533; i < 100563; i++) {
        // 定义接口地址
        let url = `https://www.dy2018.com/i/${i}.html`;

        // 进行请求
        request(url, (error, request, body) => {
            // 将返回的内容进行编码
            const html = iconv.decode(body, 'gb2312');
            const $ = cheerio.load(html);

            // 读出我们想要的节点内容
            console.log(`名称:${$(".title_all h1").text()} --- 评分:${$('.rank').text() || 0} 分`);
        })
    }

好了,大功告成 接下来我们运行一下该文件, 输出一下结果:
30行代码使用node搞一个简单爬虫_第3张图片

结语

文章到这里就结束了,是不是很简单呢,觉得有兴趣的小伙伴自己下去玩一下。

你可能感兴趣的:(node.js)