AI导航工具我开源了利用node爬取了几百条数据

序言

别因今天的懒惰,让明天的您后悔。输出文章的本意并不是为了得到赞美,而是为了让自己能够学会总结思考;当然,如果有幸能够给到你一点点灵感或者思考,那么我这篇文章的意义将无限放大。

背景

随着AI的发展市面上的AI网站或者软件也是越来越多了,但是我们知道的网站可能就只有那么比较出名的那么几个,但是实际上好用的AI网站起码都得几百上千了(也有不少套壳的),我有时候需要用AI软件的时候都是百度各种找,实在是不太方便,然后我想反正自己也要用原来的服务器空置到的,何不废物利用呢?所以就有了这个网站的诞生 吉云工具箱 ;代码库 dream-utools 有兴趣的朋友可以去看一下,我将数据都转为了js数据,可以直接部署你私有网站;当然如果你觉得有用就收藏哈。

代码库

我自己本身想自己去搭建这么一个网站,但是我觉得太麻烦了;还不如直接找一些开源的代码直接复制使用,我在GitHub上找了好几个开源库以后发现这个库比较符合我的需求,而且界面看起来也是比较简单好看的 gengyun-nav

数据来源

由于开源库的数据来源的通过接口返回的,所有没有现成的数据;所以就想到去爬取一些数据(本来是准备一个一个的去写的);我查看了这类网站的一个特性都是返回的html;我就将爬取到的html数据保存到一个txt文件中。一下代码就是解析html中的数据。

以下的代码都是爬取数据的示例代码,如果你们在爬取数据的时候请根据自己的实际情况进行修改即可。

  • 获取每一个分类
javascript 复制代码
// 导航栏
async function menus() {
  const data = await fs.readFile("./index.txt");

  const html = data.toString();
  // 解析class=content的div
  const $ = cheerio.load(html);
  const content = $(".content").html();
  // 解析class=align-items-center的div=> 是class=content的div的子元素=>获取所有多个class=align-items-center的div
  const alignItemsCenter = $(".content")
    .find(".d-flex.flex-fill.flex-tab.align-items-center")
    .map((i, el) => {
      return $(el).html();
    })
    .get();
  // console.log(alignItemsCenter);
  let arr = [];
  // 循环获取所有多个class=align-items-center的div
  for (let i = 0; i < alignItemsCenter.length; i++) {
    const element = alignItemsCenter[i];
    // 获取navItem a标签的内容
    const a = $(element)
      .find(".nav-item")
      .find("a")
      .map((i, el) => {
        return $(el).html();
      })
      .get();

    arr.push({
      id: uuid(),
      name: "办公工具",
      pid: 0,
      ind: i,
      icon: "CashOutline",
      children: a.map((v) => {
        return {
          id: uuid(),
          name: v,
          icon: "CashOutline",
        };
      }),
    });
  }
  //   将arr写入json文件
  await fs.writeFile("./menus.json", JSON.stringify(arr, null, 2));
}

menus();
  • 获取每个分类的内容(每一个AI网站)
javascript 复制代码
// 工具类
async function index() {
  const data = await fs.readFile("./index.txt");

  const html = data.toString();
  // 解析class=content的div
  const $ = cheerio.load(html);
  const alignItemsCenter = $(".content-layout")
    .find(".tab-content .mt-4")
    .map((i, el) => {
      return $(el).html();
    })
    .get();

  let obj = {};

  //   console.log(99999, alignItemsCenter);
  const dataJson = await fs.readFile("./index.json");

  for (let i = 0; i < alignItemsCenter.length; i++) {
    const element = alignItemsCenter[i];
    // 获取navItem a标签的内容
    // const a = $(element).find(".url-body .default").find("a").map((i, el) => {
    //   return $(el).html();
    // })
    // .get();
    const itemsList = $(element)
      .map((i, el) => {
        return $(el).html();
      })
      .get();
    // console.log(99999999999, itemsList);

    let arr = [];

    for (const item of itemsList) {
      // item里面有两个a标签,第一个是图片,第二个是链接;获取第二个a标签的链接和title
      const a = $(item).find("a").eq(1);
      const href = a.attr("href"); // 获取a标签的href属性
      // 获取第一个a标签font-weight-normal的内容
      const text = $(item).find(".text-xs").text();
      const title = $(item).find(".font-weight-normal").text();
      const img = $(item).find("a").find("img").attr("data-src");
      // console.log(777, href, text, title);
      
      // 获取a标签的链接和title
      // const img = $(item).find("a").find("img").attr("data-src");
      // const text = $(item).find("a").find(".text-xs").text();
      // const title = $(item).find("a").find(".font-weight-normal").text();

      // 获取a标签的href属性
      // const a = $(item).find(".togo");
      // console.log(777, a);
      arr.push({
        id: uuid(),
        icon:img,
        name: title,
        description:text,
        href: href,
      });
    }

    obj[i] = arr;
  }

    // await fs.writeFile("./index.json", JSON.stringify(obj, null, 2));

  // console.log(99,alignItemsCenter);
}

// index();

总结(注意)

在AI爆发的的时代是我们最好的时代,我们应该好好去把握住这个机会;从古至今大部分人都是去怎么使用好工具而不是去创作出工具(至少对于大部分人是这样的,也不是说我看不起自己和很多人,但这是事实),那么我们就站在巨人的肩膀上使用好他们创作的工具,也是一种更新,愿诸君在新的一年都有一个好的开始以及机遇。

相关推荐
古蓬莱掌管玉米的神8 小时前
vue3语法watch与watchEffect
前端·javascript
林涧泣8 小时前
【Uniapp-Vue3】uni-icons的安装和使用
前端·vue.js·uni-app
拉一次撑死狗8 小时前
Vue基础(2)
前端·javascript·vue.js
祯民9 小时前
两年工作之余,我在清华大学出版社出版了一本 AI 应用书籍
前端·aigc
热情仔9 小时前
mock可视化&生成前端代码
前端
m0_748246359 小时前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
wjs04069 小时前
用css实现一个类似于elementUI中Loading组件有缺口的加载圆环
前端·css·elementui·css实现loading圆环
爱趣五科技9 小时前
无界云剪音频教程:提升视频质感
前端·音视频
计算机-秋大田10 小时前
基于微信小程序的校园失物招领系统设计与实现(LW+源码+讲解)
java·前端·后端·微信小程序·小程序·课程设计