超简单的node爬虫小案例
同前端爬取参数一样,输入三个参数进行爬取
注意点也一样:
注意分页的字段需要在代码里面定制化修改,根据你爬取的接口,他的业务规则改代码中的字段。比如我这里总条数叫total,人家的不一定。返回的数据我这里是data.rows,看看人家的是叫什么字段,改改代码。再比如我这里的分页叫pageNum,人家的可能叫pageNo

data目录手动建立上哦,要放爬下来的数据
依赖
{"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爬虫小案例
同前端爬取参数一样,输入三个参数进行爬取 注意点也一样: 注意分页的字段需要在代码里面定制化修改,根据你爬取的接口,他的业务规则改代码中的字段。比如我这里总条数叫total,人家的不一定。返回的数据我这里是data.r…...
(每日持续更新)jdk api之FileFilter基础、应用、实战
博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿&…...
基于Matlab/Simulink开发自动驾驶的解决方案
文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶,能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能,从而推进自动驾驶感…...
gitlab部署
系统版本 [rootlocalhost ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 9.1 (Plow)gitlab包位置 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el9/gitlab-ee-16.7.2-ee.0.el9.x86_64.rpm关闭防火墙 [rootlocalhost data]# systemctl stop firew…...
JVM运行时数据区(下篇)
紧接上篇:JVM运行时数据区(上篇)-CSDN博客 堆 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。 栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态…...
生成式 AI 描绘复杂科学
生成式AI可以用来描述复杂的科学问题,主要是通过以下两种方式: 数据生成:生成式AI可以通过学习大量数据来生成新的数据,包括科学实验数据。例如,可以使用生成式AI来模拟复杂的物理实验,生成模拟数据&#…...
<蓝桥杯软件赛>零基础备赛20周--第14周--BFS
报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…...
openEuler安装Docker艰辛路程
文章目录 安装docker测试docker关于windows docker拉取镜像查看所有镜像删除镜像删除不在运行的进程强制删除正在运行的进程 启动docker容器服务-d测试 停止docker容器服务查看docker启动进程更新容器(没有自启动功能,更新为自启动)docker端口映射进入容器修改内容退…...
python图像处理总结
等我有时间了,好好总结一下这几个图像处理包,为后面的研究做个铺垫 skimage包 可以用系统自带的图片,不用自己找图片 from skimage.io import imread, imshow from skimage import data image data.astronaut() imshow(image)后面可以拿这…...
腐烂的橘子 -- DFS、BFS
994. 腐烂的橘子 class OrangesRotting:"""994. 腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/"""def solution(self, grid: List[List[int]]) -> int:"""BFS时间复杂度 O(M*N)空间复杂度 O(M*N):par…...
java swing UI第三方设计器JFormDesiner和FlatLaf UI
安装JFormDesiner 官网:https://www.formdev.com/ 先去IDEA的插件市场安装吧 JFormDesiner是非开源,且付费的插件,可以自己去找找不付费的使用方法。在swing可视化设计UI非常高效快捷,初学者可能需要一定时间探索,熟…...
前端JS实现全屏和退出全屏的效果
全屏效果想必我们都很清楚把,平时追剧看电视剧什么都会使用全屏方便我们看,我们键盘的第一个键esc可以退出全屏,那么我们如何用js实现全屏的办法呢? 设置全屏 Document.requestFullscreen(),该方法用于异步请求使元素…...
蓝桥杯C组-填充-贪心
点击此处查看原题 *思路:首先要求 00 11 尽可能的多,所以尽可能多的多配对,配对只在i , i 1之间发生,所以只需要关注str[i] 和 str[i 1]即可,如果str[i] str[i 1] ,那么一定配对&#x…...
mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql
以下是一些常见的MySQL查询语句,用于查询当天、近一周、近一个月和近一年的数据,以及一些常见的报表查询。 查询当天的数据: SELECT * FROM table_name WHERE DATE(date_column) CURDATE();查询近一周的数据: SELECT * FROM t…...
C# 使用Fleck创建WebSocket服务器
目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 Fleck 是 C# 实现的 WebSocket 服务器,通过 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后浏览器和服务器之间就形成了一条快速通道;两者之间…...
Android中的SPI实现
Android中的SPI实现 SPI是JVM世界中的标准API,但在Android应用程序中并不常用。然而,它可以非常有用地实现插件架构。让我们探讨一下如何在Android中利用SPI。 问题 在Android中,不同的提供者为推送功能提供服务,而在大型项目中…...
什么是设计模式(第7章笔记)
目录 一、什么是设计模式 二、设计模式概要 1、名称 2、问题 3、解决方案 4、效果 三、《设计模式》的结构 四、小结 一、什么是设计模式 设计模式:是对已经分析过的问题,以及相关问题解决方案的优秀实践; 1、同样的问题总是重复出现&…...
【python入门】day27: 模拟高铁售票系统
界面 代码 #-*- coding:utf-8 -*- import prettytable as pt#---------导入漂亮表格 import os.path filename ticket.txt#更新座位状态 def update(row_num):#------更新购票状态with open(filename,w,encodingutf-8) as wfile:for i in range(row_num):lst1 [f{i1},有票,有…...
智能助手的巅峰对决:ChatGPT对阵文心一言
在人工智能的世界里,ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能,吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢?下面就让我们一探究竟。 首先来谈谈智能回复能力…...
Android系统开发之浅谈广播接收器回调
广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver,是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢? 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…...
KV Cache的生老病死:FlashAttention里的显存管理全流程
某团队在昇腾NPU上跑Llama-2-7B-chat,前几个query响应正常,但当对话超过20轮之后,模型开始变得迟钝——生成速度从每秒15个token骤降到每秒2个token。运维查了半天,发现显存占用一直在涨,但batch_size明明没变。 问题出…...
8个必备的数据采集工具详解,低代码爬虫~
网络爬虫是一种常见的数据采集技术,你可以从网页、 APP上抓取任何想要的公开数据,当然需要在合法前提下。 爬虫使用场景也很多,比如: 搜索引擎机器人爬行网站,分析其内容,然后对其进行排名,比…...
Mumu模拟器ADB连接Unity Profiler全攻略
1. 为什么连不上Mumu的ADB,90%的人卡在第一步就放弃了“ADB device not found”、“offline”、“unauthorized”,这几个词我去年在Unity项目组的晨会白板上写了整整三周。不是因为技术多难,而是因为Mumu模拟器的ADB服务默认不走标准路径&…...
从录制到规划:手把手教你用CARLA录制点云,在Autoware中构建完整自动驾驶仿真闭环
从CARLA到Autoware:构建自定义自动驾驶仿真场景的完整实践指南 在自动驾驶技术快速迭代的今天,仿真测试已成为算法验证不可或缺的环节。CARLA与Autoware作为开源仿真平台和自动驾驶框架的黄金组合,为研究者提供了高度灵活的测试环境。本文将深…...
DMXAPI:国产多模态大模型API聚合平台,让开发者一键调用通义千问等主流模型
在国产大模型百花齐放的今天,如何高效、稳定地接入各类模型能力,成为开发者和企业面临的核心痛点。DMXAPI 应运而生,作为中国多模态大模型API聚合平台,致力于打造"国产模型一站式调用中心",让开发者无需对接…...
法律科技的发展脉络:从数字化管理到AI辅助办案的演进路径
摘要 执业15年,我经历了律师行业工具变迁的三个阶段:纸质时代、本地软件时代、云端时代。现在正站在第四个阶段的起点——AI辅助办案。这篇文章回顾法律科技的发展脉络,分析每个阶段的特征和局限性,以及正在发生的变化趋势。 第一…...
hccl 集合通信架构剖析:Ring-AllReduce 与通信-计算重叠设计
前言 分布式训练做多了会发现,多卡之间的通信往往比计算更吃时间。八张昇腾NPU跑一个LLaMA-70B,AllReduce在总耗时里能占30-40%,这个比例在卡数更多的时候还会继续涨。昇腾CANN的hccl(Huawei Collective Communication Library&am…...
DiskSpd深度解析:企业级存储性能调优的架构视角与实战指南
DiskSpd深度解析:企业级存储性能调优的架构视角与实战指南 【免费下载链接】diskspd DISKSPD is a storage load generator / performance test tool from the Windows/Windows Server and Cloud Server Infrastructure Engineering teams 项目地址: https://gitc…...
Hotkey Detective:3分钟找出Windows热键冲突的终极指南
Hotkey Detective:3分钟找出Windows热键冲突的终极指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否遇…...
如何在5分钟内彻底改变你的Illustrator工作流程:批量替换脚本终极指南
如何在5分钟内彻底改变你的Illustrator工作流程:批量替换脚本终极指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中重复的替换操作浪费宝贵…...
