超简单的node爬虫小案例

这篇具有很好参考价值的文章主要介绍了超简单的node爬虫小案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

同前端爬取参数一样,输入三个参数进行爬取

注意点也一样:
注意分页的字段需要在代码里面定制化修改,根据你爬取的接口,他的业务规则改代码中的字段。比如我这里总条数叫total,人家的不一定。返回的数据我这里是data.rows,看看人家的是叫什么字段,改改代码。再比如我这里的分页叫pageNum,人家的可能叫pageNo

超简单的node爬虫小案例,钱厚端怎么能不懂node?,爬虫,javascript,开发语言
data目录手动建立上哦,要放爬下来的数据文章来源地址https://www.toymoban.com/news/detail-795911.html

依赖

{
  "dependencies": {
    "axios": "^1.6.5",
    "colors": "^1.4.0",
    "fs": "^0.0.1-security",
    "readline": "^1.3.0"
  }
}

代码

const readline = require("readline");
const axios = require('axios');
const fs = require("fs");
const colors = require('colors');


// 创建询问实例
let RL = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

// 封装异步询问
function question(question) {
    return new Promise((resolve, reject) => {
        RL.question(`${question}\t`, function (value) {
            return resolve(value);
        })
    })
}


var total = 0;
var pageNum = 1;
var pageSize = 30;
var api = "";
var headers = "";
var params = "";




// 循环异步方法,执行同步结果
(async function () {
    const questions = ["请输入接口:", "请输入请求头:", "请输入参数:"];
    for (let i = 0; i < questions.length; i++) {
        const value = await question(questions[i]);
        if (i === 0) {
            api = value;
        } else if (i === 1) {
            headers = value;
        } else {
            params = value;
        }
    }
    RL.close();
})()

// 监听readline关闭,结束终端输入
RL.on("close", function () {
    console.log(`<<<------------------------- 开始爬取 ------------------------->>>\n`.blue);
    // console.log(api, headers, params);
    crawling();
})


// 封装接口请求
async function getData() {
    const response = await axios({
        url: api,
        method: "post",
        headers: {
            "Content-Type": "application/json",
            ...JSON.parse(headers)
        },
        data: JSON.stringify({
            ...JSON.parse(params),
            "pageSize": pageSize,
            "pageNum": pageNum
        })
    })
    return response.data;
}

// 爬取执行入口
async function crawling() {
    const data = await getData();
    console.log(data);
    if (data.code !== 0) {
        console.log('================= 数据读取失败 ================='.red);
        process.exit(0);
    }

    console.log('================= 数据读取成功 ================='.green);
    total = data.total;
    const page = Math.ceil(total / pageSize);
    console.log(`${page}`);
    saveFile(data.rows, `第1页`);
    loading();
}

// 持续执行爬取
async function loading() {
    const page = Math.ceil(total / pageSize);
    for (let i = 1; i < page; i++) {
        pageNum++;
        const data = await getData();
        saveFile(data.rows, `${i + 1}`);
    }

    console.log(`<<<------------------------- 爬取完毕,已下载数据 ------------------------->>>\n`.bgGreen);
    total = 0;
    pageNum = 1;
    process.exit(0);
}



// 下载json文件
function saveFile(res, name) {
    console.log(`<<<------------------------- 开始写入 ------------------------->>>\n`.blue);
    console.log(name);
    const writerStream = fs.createWriteStream("data/" + name + ".json");
    writerStream.write(JSON.stringify(res));
    writerStream.end();

    writerStream.on('finish', function () {
        console.log(`<<<------------------------- 写入完成 ------------------------->>>\n`.green);
    });
    writerStream.on('error', function (err) {
        console.log(err);
        console.log(`<<<------------------------- 写入错误 ------------------------->>>\n`.red);
        process.exit(0);
    });
}

到了这里,关于超简单的node爬虫小案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最简单的python爬虫案例,适合入门学习

    用python从网页爬取数据,网上相关文章很多,但能让零基础初学者轻松上手的却很少。可能是有的作者觉得有些知识点太简单不值得花费精力讲,结果是难者不会会者不难,初学者常常因此而蒙圈。本人也是小白,刚摸索着爬了两个简单的网页数据,经历了初学者易犯的各种

    2024年02月08日
    浏览(17)
  • vuex前端开发,getters是什么?怎么调用?简单的案例操作

    vuex前端开发,getters是什么?怎么调用?简单的案例操作! 下面通过一些简单的案例,来了解一下,vuex当中的getters到底是什么意思,有哪些实际的操作案例。 Vuex的getters主要用于对 store中的state进行计算或过滤 ,类似于Vue组件中的 计算属性 。它可以对state进行一些处理,然后

    2024年01月19日
    浏览(20)
  • 软件工程师,不懂点设计模式怎么行

    设计模式的圣经         提起设计模式,就不得不提《设计模式——可复用面向对象软件的基础》这本经典著作。1995年,GOF(Gang Of Four),也就是Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides这四个人,合作出版了《Design Patterns: Elements of Reusable Object-Oriented Software》一书,被

    2024年02月06日
    浏览(17)
  • 连ChatGPT都不懂的五一调休,到底怎么来的?

    今天是周几? 你上了几天班了? 还要上几天班放假? 五一啥安排? 出行的票抢到了吗? 调休到底是谁发明的?! 五一劳动节是要劳动吗? 为什么昨天是周一,今天还是周一? 相信这一周的打工人,无时无刻不在发出这样的灵魂质问,毕竟有这么条热搜是#打工人的怨气可

    2024年02月01日
    浏览(16)
  • sm4国密算法怎么玩?原理看不懂,但是急着用怎么办?

    看到这篇文章的读者,估计都会急着想知道如何使用SM4国密算法的, 好吧,我们废话不多说,直接开门见山了。 关于加密算法的一些简单的理论知识,我直接附在下方了,可以自行查看。 https://download.csdn.net/download/skyksksksksks/87490417 接下来简要说明一下国密算法,SM4国密算法

    2024年02月05日
    浏览(24)
  • sm3国密算法怎么玩?原理看不懂,但是急着用怎么办?

    看到这篇文章的读者,估计都会急着想知道如何使用SM3国密算法的, 好吧,我们废话不多说,直接开门见山了。 关于加密算法的一些简单的理论知识,我直接附在下方了,可以自行查看。 https://download.csdn.net/download/skyksksksksks/87490417 接下来简要说明一下国密算法,SM3国密算法

    2023年04月23日
    浏览(12)
  • 99%的人还不懂怎么和ChatGPT对话(30万字ChatGPT手册)

    关注公众号:人工智能学派 关于chatGPT相关的问题,都可以找我答疑解惑,相互交流学习,有问必应! 大家都知道ChatGPT是一个基于自然语言理解的模型,它总是试图根据对我们提出问题的理解来给出我们想听到的答案。 想必你也发现,它并不是全知全能的,对于它不知道的

    2024年02月10日
    浏览(13)
  • 【单片机概念基础】迟迟搞不懂预分频系数、PWM占空比等等概念和计算怎么办?

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在学习单片机的过程中,预分频系数和PWM(脉冲宽度调制)占空比是两个常见但容易令人困惑的概念。预分频系数涉及定时器的时钟频率控制,而PWM占空比则关系到输出波形的高低电平时间比例。本文将

    2024年04月17日
    浏览(12)
  • 训练自己的ai模型(四)学习笔记与项目实操(什么也不懂,但有数据,怎么搞?无监督学习算法)

    很开心有人还在催更,有点小震惊吧。 (原来真有人在csdn发学习记录啊) (原来真有人在csdn看学习记录啊) ai模型方向的知识,我也在学习中,可能疑惑不比大家少。 直接开始! 不管你的是什么数据,只要你有数据,你就可以试一试,跑一跑。 使用 无监督学习算法 。

    2024年02月07日
    浏览(42)
  • 工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办

    有这么个场景,后端接口的列表数据没有做分页给我,相当于是直接返回所有的列表数据,比如有100条就返回100,但是前端显示,则需要做成分页,比如10条为一页。 假如你用vue来实现,思路就是将数据切割,然后分批显示。 所以可以使用 computed 计算属性和 v-for 指令来实现

    2024年04月17日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包