likes
comments
collection
share

用node爬到了表情包,超级简单

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

我们有时候看到网上很多好看的表情包图片, 如果一张一张的去下载的话,需要下载很久很久, 这时候我们就需要用到爬虫技术了,node也是可以进行一些简单的爬虫的,像下载图片这种还是轻轻松松的

注意: 切记不要利用改技术去获利哦,针对学习使用, 也不要频繁爬取学习。

主要技术

  • node
  • eggjs
  • cheerio

如果你不知道怎么创建egg项目的话请看这篇文章:前端也可以写后台,node-eggjs

安装cheerio

npm i cheerio

分析

我们在看到自己想要爬取的网站时,切记要打开F12去分析网站。

  • 先去查看Fetch/XHR,看接口是否会返回参数(有些网站数据是公开的,直接转发接口以及携带相关的参数即可)
  • 如果接口数据不是公开的我们就只有通过页面去抓取我们想要的数据了,但是这种比较麻烦一些,也是比价常见的,比较数据公开的很多人也是会加密的

分析以后,我们就可以开始准备写代码了。我这里直接说第二种;因为第一种对大家来说太简单了

代码实现

我们通过Doc查看到展示的页面是哪一个链接以后,我们就可以开始根据相关链接获取到页面了,然后通过cheerio将页面解析出来,并通过相关的代码得到我们想要的数据。

主要是通过cheerio得到标签里面的一些属性,如果你会jquery的话,那你会更加的得心应手。

如下代码:爬取的首页

    async setMall() {
        const { ctx } = this;
        const url = 'https://www.****.com/';
        const pageIndex = Math.floor(Math.random() * ua.length);
        if (!url) {
        return ctx.body = {
            code:201,
            data:[],
            msg:'请输入链接'
        }
        };
        try {
        const { data } = await ctx.curl(url,{
            method:'GET',
            headers:{
            'User-Agent':ua[pageIndex],
            }
        });
        // toString是为了解析出buffer数据
        const pageXml = data.toString();
        let slideshow = [];
        // // decodeEntities参数是为了解决cheerio获取的中文乱码
        const $ = cheerio.load(pageXml, { decodeEntities: false });
        /**
         * type=1:轮播图;2:列表
         */
        $('.imglist li img').each(function(index) {
            const img = $(this).attr('src');
            if (index <= 5) {
            slideshow.push({img,type:1});
            }else {
            slideshow.push({img,type:2});
            }
        });
    
        $('.imglist li a').each(function(index) {
            const url = $(this).attr('href');
            slideshow[index].url = url;
        });

        let classify = [];
        $('.widget .tagcloud a').each(function(index) {
            const text = $(this).text();
            const url = $(this).attr('href');
            classify.push({text,url});
        });

        ctx.body = {
            code:200,
            slideshow:slideshow.filter(v=>v.type == 1),
            list:slideshow.filter(o=>o.type == 2),
            classify,
            msg:'成功'
        };
        } catch (error) {
        ctx.body = {
            code:201,
            data:error,
            msg:'获取失败'
        };
        }

    }

效果: 部分参数

{"code":200,"slideshow":[{"img":"https://img.***.com/006CXrEjly1hdcdhms3hsj305g05gweg.jpg","type":1,"url":"https://www.***.com/**/417124"},],"msg":"成功"}

以上呢!就是node爬虫的大致方法了。如果你感兴趣的话,可以去尝试以下;

大家在爬取的时候一定不要太多频繁了,切记、切记。大家练习练习技术即可

如果您喜欢我的文章或者该文章对你有帮助,您也可以关注我的公众号:【前端雾恋

往期文章