当前位置: 首页 > 工具软件 > cheerio > 使用案例 >

node爬虫基础~使用cheerio

陈扬
2023-12-01

最近一段时间学习node,看到了爬虫,记录一下自己写的demo~~

const axios = require("axios"); //这里我使用了axios,vue中常用的,也可以自己封装别的
const cheerio = require("cheerio"); //引入了cheerio,用法和jq十分类似,不用自己写那些igs正则了,多的很
const express = require("express"); // 引入express模块,测试接口使用,express写接口的基本用法
// cheerio 试试
const app = express(); // 相当于http.createServer()
app.use(express.json()); // 允许客户提供的json数据,必须加~

app.get("/movie", (req, res) => {  //写一个get请求呗
  // console.log('req========================>',req.query.start)  // 浏览器后直接加的参数在 req.query中获取,这里是加了分页~
  var target = `https://vip.1905.com/list/o6p${    
    req.query.start ? req.query.start : 1  //这里是网址切换,根据你所爬网站的网址来区分
  }.shtml`;
  // 使用request.js库发送get请求
  axios.get(target).then((html) => {
    // 载入并初始化cheerio
    //   console.log(html)  这里要注意,真正的html在xiaos中实在data里的~
    const $ = cheerio.load(html.data); //加载html
    // fs.writeFileSync("1.html", html.data);
    // 取出目标节点,即带borderBox css类的节点
    var linksDom = $(".borderBox"); //根据网址中的类来获取数据
    // 遍历dom集数组
    var arr = [];//创建最后的数组保存
    linksDom.each((index, item) => { //
      // 取出title,注意这里使用了$(item),而不是item本身
      var obj = {};
      // 下面都是一些选择器之类的,和jq用法类似
      obj.img = $(".img .lazyImg", item).attr("data-lazysrc");
      obj.redio = $(".img", item).attr("href");
      obj.title = $(".img", item).attr("title");
      obj.score = $(".score", item).text();
      obj.intro = $(".txt  .intro", item).text();
      obj.year = $(".txt  .year", item).text();
      obj.name = $(".txt  .name", item).text();
      obj.actor = $(".txt  .actor", item).text();
      obj.descr = $(".txt  .descr", item).text();
      obj.url = $(".txt  .url", item).text();
      arr.push(obj);
      // 类似地,取出链接地址
      // 解码可选,为了让结果显示中文汉字更直观
      // 输出到控制台预览结果
    });
    return res.json(arr); // result就是返回的数据,res是api传出的数据
  });

  // Json格式

  //await res.send(res)
});

app.listen(3000, () => {  //创建接口测试
  console.log("3000");
});

完成,安装以上几个模块,node运行js,在浏览器输入http://localhost:3000/movie?start=1,看看效果~ start数字可以换,其他复杂的可以再根据网页来进行爬取更改参数之类的东西

 类似资料: