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

相关推荐
yinuo1 小时前
前端跨页面通讯终极指南⑥:SharedWorker 用法全解析
前端
running up3 小时前
Github 首页美化教程
github
想用offer打牌5 小时前
RocketMQ如何防止消息丢失?
java·后端·架构·开源·rocketmq
大刘讲IT6 小时前
面向中小企业的企业AI Agent未来3年构建蓝图规划
人工智能·经验分享·ai·开源·制造
PineappleCoder6 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪6 小时前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯6 小时前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
源码获取_wx:Fegn08956 小时前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring
闲谈共视6 小时前
基于去中心化社交与AI智能服务的Web钱包商业开发的可行性
前端·人工智能·去中心化·区块链
CreasyChan7 小时前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发