当前位置: 首页 > news >正文

node.js 爬虫图片下载

主程序文件 app.js

运行主程序前需要先安装使用到的模块: npm install superagent --save
axios要安装指定版,安装最新版会报错:npm install axios@0.19.2 --save

const {default: axios} = require('axios');
const fs = require('fs');
const superagent = require('superagent');
const charset = require('superagent-charset');
charset(superagent);
const cheerio = require('cheerio');
const express = require('express');
const app = express();var baseUrl = 'https://www.qqtn.com/'; //目标网站// 访问地址示例 http://127.0.0.1:8081/index?page=6
app.get('/index', function(req, res) {//设置请求头res.header("Access-Control-Allow-Origin", "*");res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');res.header("Access-Control-Allow-Headers", "X-Requested-With");res.header('Access-Control-Allow-Headers', 'Content-Type');//解析网址传递的类型var type = req.query.type;//解析网址传递的页码var page = req.query.page;//当网址没有传值的时候设置默认值type = type || 'weixin';page = page || '1';var route = `tx/${type}tx_${page}.html`//网页页面信息是gb2312,所以chaeset应该为.charset('gb2312'),一般网页则为utf-8,可以直接使用.charset('utf-8')superagent.get(baseUrl + route).charset('gb2312').buffer(true).end(function(err, sres) {var items = [];var titelStr = '';if (err) {console.log('ERR: ' + err);res.json({code: 400,msg: err,sets: items});return;}//使用JQuery风格定义$var $ = cheerio.load(sres.text);//遍历标签提取属性值$('div.g-main-bg ul.g-gxlist-imgbox li a').each(function(idx, element) {var thumbImgSrc = $(element).find('img').attr('src');var oldtitle = $(element).attr('title');var title = oldtitle.replace(/\s*/g, ""); //去除字符串内所有的空格var href = $(element).attr('href');items.push({title: title,href: href,thumbSrc: thumbImgSrc});//标题拼接为html格式的字符串titelStr = '<li>'+title+'</li>' + titelStr//调用方法下载图片downloadFile(thumbImgSrc, title);});//发给前端//res.json({ code: 200, msg: "我是返回给前端的消息", data: items });//res.end();//读取html文件并替换内容,再发送给前端显示出来fs.readFile('./index.html',(err,data)=>{//报错则抛出错误if(err) throw err;//读取出来的内容转为字符var htmlStr = data.toString();//把 <li>%</li> 替换为拼接后的字符串var html = htmlStr.replace('<li>%</li>',titelStr);res.writeHead(200,{'Content-Type':'text/html'});res.end(html);})});
});// 下载图片的方法
async function downloadFile(uri, name) {let dir = "./imgs";//如果文件夹不存在就创建if (!fs.existsSync(dir)) {await fs.mkdirSync(dir)};//文件名let filePath = `${dir}/${name}.png`;//请求数据let res = await axios({url: uri,responseType: 'stream',});//文件流写入磁盘let ws = fs.createWriteStream(filePath);res.data.pipe(ws);res.data.on("close", () => {ws.close();});//console.log(`${name}... ...下载完成`);
};var server = app.listen(8081, function() {var host = "127.0.0.1" //server.address().addressvar port = server.address().portconsole.log(`应用实例,访问地址为 http://${host}:${port}`)
})

index.html 文件

后端爬到数据后,把结果写入index.html再返回给前端显示。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Nodejs爬虫</title><style>li{margin-top: 10px;}</style></head><body><div style="margin-left: 10%; margin-right: 10%;"><form action="http://127.0.0.1:8081/index" method="GET"><br> 页码:<input type="text" name="page"><input type="submit" value="Submit"></form><hr /><h3>查询结果:</h3><div><!-- 使用百分号做占位符,用于nodejs操作替换实际内容 --><ul><li>%</li></ul></div></div><script></script></body>
</html>

前端请求效果图
在这里插入图片描述

后端运行效果图
在这里插入图片描述
下载到文件夹的图片
在这里插入图片描述

相关文章:

node.js 爬虫图片下载

主程序文件 app.js 运行主程序前需要先安装使用到的模块&#xff1a; npm install superagent --save axios要安装指定版,安装最新版会报错&#xff1a;npm install axios0.19.2 --save const {default: axios} require(axios); const fs require(fs); const superagent r…...

VAE-根据李宏毅视频总结的最通俗理解

1.VAE的直观理解 先简单了解一下自编码器&#xff0c;也就是常说的Auto-Encoder。Auto-Encoder包括一个编码器&#xff08;Encoder&#xff09;和一个解码器&#xff08;Decoder&#xff09;。其结构如下&#xff1a; 自编码器是一种先把输入数据压缩为某种编码, 后仅通过该编…...

【LangChain】检索器之上下文压缩

LangChain学习文档 【LangChain】检索器(Retrievers)【LangChain】检索器之MultiQueryRetriever【LangChain】检索器之上下文压缩 上下文压缩 LangChain学习文档 概要内容使用普通向量存储检索器使用 LLMChainExtractor 添加上下文压缩(Adding contextual compression with an…...

uniapp 语音文本播报功能

最近uniapp项目上遇到一个需求 就是在接口调用成功的时候加上语音播报 &#xff0c; ‘创建成功’ ‘开始成功’ ‘结束成功’ 之类的。 因为是固定的文本 &#xff0c;所以我先利用工具生成了 文本语音mp3文件&#xff0c;放入项目中&#xff0c;直接用就好了。 这里用到的工…...

腾讯云高IO型云服务器CPU型号处理器主频性能

腾讯云服务器高IO型CVM实例CPU处理器主频性能说明&#xff0c;高IO型云服务器具有高随机IOPS、高吞吐量、低访问延时等特点&#xff0c;适合对硬盘读写和时延要求高的高性能数据库等I/O密集型应用&#xff0c;腾讯云服务器网分享高IO型云服务器IT5和IT3的CPU处理器说明&#xf…...

【数据结构】实验八:树

实验八 树 一、实验目的与要求 1&#xff09;理解树的定义&#xff1b; 2&#xff09;掌握树的存储方式及基于存储结构的基本操作实现&#xff1b; 二、 实验内容 题目一&#xff1a;采用树的双亲表示法根据输入实现以下树的存储&#xff0c;并实现输入给定结点的双亲结点…...

kafka消费者api和分区分配和offset消费

kafka消费者 消费者的消费方式为主动从broker拉取消息&#xff0c;由于消费者的消费速度不同&#xff0c;由broker决定消息发送速度难以适应所有消费者的能力 拉取数据的问题在于&#xff0c;消费者可能会获得空数据 消费者组工作流程 Consumer Group&#xff08;CG&#x…...

【驱动开发day4作业】

头文件代码 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X50007000 #…...

Ubuntu 20.04 Ubuntu18.04安装录屏软件Kazam

1.在Ubuntu Software里面输入Kazam&#xff0c;就可以找不到这个软件&#xff0c;直接点击install就可以了 2.使用方法&#xff1a; 选择Screencast&#xff08;录屏&#xff09; Fullscreen&#xff08;全屏&#xff09;-----Windows&#xff08;窗口&#xff09;--------Ar…...

ADC 的初识

ADC介绍 Q: ADC是什么&#xff1f; A: 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 ADC的性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xff0c;比如&am…...

MMdetection框架速成系列 第07部分:数据增强的N种方法

MMdetection框架实现数据增强的N种方法 1 为什么要进行数据增强2 数据增强的常见误区3 常见的六种数据增强方式3.1 随机翻转&#xff08;RandomFlip&#xff09;3.2 随机裁剪&#xff08;RandomCrop&#xff09;3.3 随机比例裁剪并缩放&#xff08;RandomResizedCrop&#xff0…...

基于Kitti数据集的智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于Kitti数据集的智能驾驶目标检测系统可用于日常生活中检测与定位行人&#xff08;Pedestrian&#xff09;、面包车&#xff08;Van&#xff09;、坐着的人&#xff08;Person Sitting&#xff09;、汽车&#xff08;Car&#xff09;、卡车&#xff08;Truck…...

4.4. 深拷贝 vs 浅拷贝

文章目录 浅拷贝&#xff1a;对基本数据类型进行值传递&#xff0c;对引用数据类型进行引用传递般的拷贝&#xff0c;此为浅拷贝。深拷贝&#xff1a;对基本数据类型进行值传递&#xff0c;对引用数据类型&#xff0c;创建一个新的对象&#xff0c;并复制其内容&#xff0c;此为…...

网络安全(黑客)自学建议笔记

前言 网络安全&#xff0c;顾名思义&#xff0c;无安全&#xff0c;不网络。现如今&#xff0c;安全行业飞速发展&#xff0c;我们呼吁专业化的 就职人员与大学生 &#xff0c;而你&#xff0c;认为自己有资格当黑客吗&#xff1f; 本文面向所有信息安全领域的初学者和从业人员…...

Linux CentOS快速安装VNC并开启服务

以下是在 CentOS 上安装并开启 VNC 服务的步骤&#xff1a; 安装 VNC 服务器软件包。运行以下命令&#xff1a; sudo yum install tigervnc-server 输出 $ sudo yum install tigervnc-server Loaded plugins: fastestmirror, langpacks Repository epel is missing name i…...

redis到底几个线程?

通常我们说redis是单线程指的是从接收客户端请求->解析请求->读写->响应客户端这整个过程是由一个线程来完成的。这并不意味着redis在任何场景、任何版本下都只有一个线程 为何用单线程处理数据读写&#xff1f; 内存数据储存已经很快了 redis相比于mysql等数据库是…...

mysql修改UUID

mysql修改UUID 问题描述&#xff1a;集群搭建时克隆主服务的镜像导致所有节点的服务UUID都一致&#xff0c;此时在集群中添加节点时会提示UUID冲突报错。 解决方案 1、利用uuid函数生成新的uuid mysql> select uuid(); -------------------------------------- | uuid() …...

NoSQL之redis配置与优化

NoSQL之redis配置与优化 高可用持久化功能Redis提供两种方式进行持久化1.触发条件手动触发自动触发 执行流程优缺点缺点&#xff1a;优势AOF出发规则&#xff1a; AOF流程AOF缺陷和优点 NoSQL之redis配置与优化 mysql优化 1线程池优化 2硬件优化 3索引优化 4慢查询优化 5内…...

Python单例模式介绍、使用

一、单例模式介绍 概念&#xff1a;单例模式是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供访问该实例的全局访问点。 功能&#xff1a;单例模式的主要功能是确保在应用程序中只有一个实例存在。 优势&#xff1a; 节省系统资源&#xff1a;由…...

1334179-85-9,BTTAA,是各种化学生物学实验中生物偶联所需

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ BTTAA试剂 | 基础知识概述&#xff08;部分&#xff09;: 中文名称&#xff1a;2-[4-({双[(1-叔丁基-1H-1,2,3-三唑-4-基)甲基]氨基}甲基)-1H-1,2,3-三唑-1-基]乙酸 英文名称&#xff1a;BTTAA CAS号&#xff1a;1334179-8…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...