所有分类
  • 所有分类
  • 后端开发
解析 DOM 的第三方模块 cheerio 详细讲解及 API 介绍

解析 DOM 的第三方模块 cheerio 详细讲解及 API 介绍

几个模块详细的讲解及API请到各个链接查阅,demo中只有简单的用法。使用npm管理依赖,依赖信息会存放在package.json中直接看代码实例先创建目录,使用nodejs核心的文件系统非常简单的一个demo,可能也没有那么严谨,不过总是

身为一名热衷于新科技的小白,最近我试着用Node.js做了个网页抓取工具。期间学到一个神奇的插件——cheerio!今天就聊聊我如何借助cheerio大展拳脚,从博客园主页捞了一堆有用信息的经历。

初识cheerio:我的第一印象

//安装用到的第三方模块
cnpm install --save superagent cheerio

开始用cheerio时我啥都不懂,但看到它跟jQuery差不多,简直太神奇了!因为之前学过点jquery,所以立马就懂得怎么玩儿了。cheerio帮我从HTML里挖出想要的东西,对我做网页爬虫项目真是大有用处!

使用npm管理依赖:一个简单的开始

//引入第三方模块,superagent用于http请求,cheerio用于解析DOM
const request = require('superagent');
const cheerio = require('cheerio');
const fs = require('fs');

要用Cheerio前得确定装对没。用npm一行命令帮你把Cheerio加进项目依赖里去,再把依赖信息写入package.json文件。很简单?集中管理依赖让项目维护更省心。

请求与解析:我的爬虫之旅

request.get(url)
      .end(error,res){
      //do something     
}

我要搞定博客园首页的抓取!首先用超能使者(SuperAgent)发个HTTP请求,就能拿到网页的HTML标签。这个超能使者太好用了,不多会儿我就懂得怎么用了。接着,就是利用Cheerio来解构它,把我想要的东西抠出来。这个步骤真的很好玩,看着我的代码一点点把网页变成我能用的结构,真是太有成就感了!

代码实践:我的第一个爬虫脚本

动手编爬虫脚本的时候,我参考了别人的例子,再加了点我自己需要的东西。先用cheerio的load方法翻页看HTML,像用jQuery样式一样选我关心的部分。这样,我就轻松搞定了博客文章的标题啊、内容啊和图片地址。这可真是成就感满满,因为我亲自打造出了个功能全的爬虫!

解析 DOM 的第三方模块 cheerio 详细讲解及 API 介绍

//目标链接 博客园首页
let targetUrl = 'https://www.cnblogs.com/';
//用来暂时保存解析到的内容和图片地址数据
let content = '';
let imgs = [];
//发起请求
request.get(targetUrl)
    .end( (error,res) => {
      if(error){ //请求出错,打印错误,返回
        console.log(error)
        return;
      }
      // cheerio需要先load html
      let $ = cheerio.load(res.text);
      //抓取需要的数据,each为cheerio提供的方法用来遍历
      $('#post_list .post_item').each( (index,element) => {
        //分析所需要的数据的DOM结构
        //通过选择器定位到目标元素,再获取到数据
        let temp = {
          '标题' : $(element).find('h3 a').text(),
          '作者' : $(element).find('.post_item_foot > a').text(),
          '阅读数' : +$(element).find('.article_view a').text().slice(3,-2),
          '推荐数' : +$(element).find('.diggnum').text()
        }
        //拼接数据
        content += JSON.stringify(temp) + 'n';
        //同样的方式获取图片地址
        if($(element).find('img.pfs').length > 0){
          imgs.push($(element).find('img.pfs').attr('src'));
        }
      });
      //存放数据
      mkdir('./content',saveContent);
      mkdir('./imgs',downloadImg);
    })

数据存储:我的爬虫项目的最后一步

搞定数据以后,接下来就得把它们存起来!我用了Node.js的文件系统模块搞定了目录,再用txt文件把复制出来的文本塞进去。对于那些图片,我还是借助了利器superagent帮我下载到设定好的地方。这过程有点绕,不过好在最后我还是妥妥地把所有数据都搬进了硬盘。

测试与反思:我的爬虫项目总结

//创建目录
function mkdir(_path,callback){
  if(fs.existsSync(_path)){
    console.log(`${_path}目录已存在`)
  }else{
    fs.mkdir(_path,(error)=>{
      if(error){
        return console.log(`创建${_path}目录失败`);
      }
      console.log(`创建${_path}目录成功`)
    })
  }
  callback(); //没有生成指定目录不会执行
}

搞定代码后我就跑了一遍试试看,确保各种操作没问题。看着数据乖乖爬下来存好,心里美滋滋的。虽然项目还有不少小毛病,但对学Node.js和网页爬虫来说,这可是个重要进步!

展望未来:我的技术成长之路

//将文字内容存入txt文件中
function saveContent() {
  fs.writeFile('./content/content.txt',content.toString());
}

这次用cheerio的过程让我对网页抓取这块儿有了更深的理解。我觉得只要多学点,多试试,肯定能做出厉害的爬虫程序来。此外,以后我还想接着研究下Node.js的各种用法!

在这次的科技探险中,Cheerio帮我找到了一个超好用的工具,可以方便快速地判别DOM并抽出网页里的所有重要信息。希望我能把这个好东西介绍给更多对网页爬取感兴趣的朋友们。那么,大家用Cheerio或者其它类似的爬虫工具有没有遇到过什么麻烦?在下面的评论区分享下你们的困难和心得,咱们互帮互助共同进步!要是觉得我这篇文章挺有用的话,别忘了给个赞再转发出去,你们的鼓励是我继续分享的最大动力!

//下载爬到的图片
function downloadImg() {
  imgs.forEach((imgUrl,index) => {
    //获取图片名 
    let imgName = imgUrl.split('/').pop();
    //下载图片存放到指定目录
    let stream = fs.createWriteStream(`./imgs/${imgName}`);
    let req = request.get('https:' + imgUrl); //响应流
    req.pipe(stream);
    console.log(`开始下载图片 https:${imgUrl} --> ./imgs/${imgName}`);     
  } )
}

原文链接:https://www.icz.com/technicalinformation/web/2024/06/17503.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?