SpringBoot整合EasyExcel实现Excel表格的导出功能

更多SpringBoot轮子导航

SpringBoot项目实现日志打印SQL明细(包括SQL语句和参数)几种方式
SpringBoot中几种好用的代码生成器(基于Mybatis-plus生成entity、mapper、xml等)
SpringBoot整合Groovy脚本,实现动态编程
SpringBoot整合ip2region实现使用ip监控用户访问城市
SpringBoot整合EasyExcel实现Excel表格的导出功能
SpringBoot整合阿里云OSS,支持文件上传、下载、删除、加签等操作
SpringBoot整合aspectj实现面向切面编程(即AOP)
SpringBoot整合Swagger2实现接口文档
SpringBoot整合阿里云SchedulerX分布式任务调度组件
SpringBoot整合kaptcha实现图片验证码功能

举个栗子🌰

在后端管理系统的开发中,经常有需要导出当前表格数据的功能,有些前端表格组件可以直接做到,但是不够灵活。因为前端拿到的数据始终是经过处理的,如果想拿到原版数据,必须后端处理。如下图:

在这里插入图片描述

在这里插入图片描述

除了使用Apache POI包,还有没有其他的选择?当然有!
这里我给大家推荐一款非常简单且容易上手的开源组件:Alibaba EasyExcel

组件介绍🍰

首先放出官网地址,欢迎大家star(目前已经24K):
https://alibaba-easyexcel.github.io/docs/current/

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

64M内存20秒读取75M(46W行25列)的Excel(3.0.2+版本)

在这里插入图片描述
Alibaba EasyExcel的核心类是EasyExcel

  /*** 最简单的读* <p>1. 创建excel对应的实体对象 参照{@link DemoData}* <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener}* <p>3. 直接读即可*/@Testpublic void simpleRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();}
/*** 最简单的写* <p>1. 创建excel对应的实体对象 参照{@link com.alibaba.easyexcel.test.demo.write.DemoData}* <p>2. 直接写即可*/@Testpublic void simpleWrite() {String fileName = TestFileUtil.getPath() + "write" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());}

尝试一下🍓

1、配置文件

SpringBoot项目pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>SpringBoot-easyexcel</artifactId><version>0.0.1-SNAPSHOT</version><name>SpringBoot-easyexcel</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 一般easyexcel都会和lombok搭配使用 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><!-- 最新版 --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2、项目代码

项目结构

在这里插入图片描述

ExportController.java

package com.example.springbooteasyexcel.controller;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.example.springbooteasyexcel.data.Mock;
import com.example.springbooteasyexcel.sheet.CitySheet;
import com.example.springbooteasyexcel.sheet.CompanySheet;
import com.example.springbooteasyexcel.sheet.UserSheet;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;@RestController
@RequestMapping("/export")
public class ExportController {/*** @param response* @url <a>http://localhost:8080/export/test1</a>* 在Excel中写入单个sheet*/@RequestMapping("/test1")public void test1(HttpServletResponse response) {//从HttpServletResponse中获取OutputStream输出流try {// 设置响应类型response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");// 设置编码格式response.setCharacterEncoding("utf-8");// 设置URLEncoder.encode 防止中文乱码String fileName = URLEncoder.encode("用户信息表", "UTF-8").replaceAll("\\+", "%20");// 设置响应头response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");// 写出ExcelEasyExcel.write(response.getOutputStream(), UserSheet.class).inMemory(true).sheet("用户信息表").doWrite(Mock.userList());} catch (IOException e) {throw new RuntimeException("数据或文件损坏,无法下载");}}/*** 在Excel中写入多个sheet** @url <a>http://localhost:8080/export/test2</a>*/@RequestMapping("/test2")public void test2(HttpServletResponse response) throws Exception {// 设置响应类型response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");// 设置编码格式response.setCharacterEncoding("utf-8");// 设置URLEncoder.encode 防止中文乱码String fileName = URLEncoder.encode("信息表", "UTF-8").replaceAll("\\+", "%20");// 设置响应头response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");// 多个sheet的输出需要使用ExcelWriter类,这里想要下载成功,需要输出到OutputStream中try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).inMemory(true).build()) {// 创建用户信息表的sheet,写入用户信息数据,1代表sheet的位置是第一个WriteSheet userInfoSheet = EasyExcel.writerSheet(0, "用户信息表").head(UserSheet.class).build();excelWriter.write(Mock.userList(), userInfoSheet);// 创建城市信息表的sheet,写入城市信息数据,2代表sheet的位置是第二个WriteSheet cityInfoSheet = EasyExcel.writerSheet(1, "城市信息表").head(CitySheet.class).build();excelWriter.write(Mock.cityList(), cityInfoSheet);// 创建公司信息表的sheet,写入公司信息数据,3代表sheet的位置是第三个WriteSheet companyInfoSheet = EasyExcel.writerSheet(2, "公司信息表").head(CompanySheet.class).build();excelWriter.write(Mock.companyList(), companyInfoSheet);}}
}

Mock.java

以下数据均来自于网络,如有侵权,请联系删除

package com.example.springbooteasyexcel.data;import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.RichTextStringData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.example.springbooteasyexcel.sheet.CitySheet;
import com.example.springbooteasyexcel.sheet.CompanySheet;
import com.example.springbooteasyexcel.sheet.UserSheet;
import org.apache.poi.ss.usermodel.IndexedColors;import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;public class Mock {public static List<UserSheet> userList() {List<UserSheet> list = new ArrayList<>(10);list.add(UserSheet.builder().userId(001L).userName("张三").userPhone("11112223123").userEmail("zhansan@163.com").userAddress("北京朝阳区").gender(buildCellData("男")).registerTime(Calendar.getInstance().getTime()).build());list.add(UserSheet.builder().userId(002L).userName("李四").userPhone("11112223123").userEmail("lisi@qq.com").userAddress("南京玄武门").gender(buildCellData("女")).registerTime(Calendar.getInstance().getTime()).build());list.add(UserSheet.builder().userId(003L).userName("王五").userPhone("11112223123").userEmail("wangwu@google.com").userAddress("杭州未来科技城").gender(buildCellData("男")).registerTime(Calendar.getInstance().getTime()).build());list.add(UserSheet.builder().userId(004L).userName("赵六").userPhone("11112223123").userEmail("zhaoliu@baidu.com").userAddress("上海徐家汇").gender(buildCellData("女")).registerTime(Calendar.getInstance().getTime()).build());return list;}private static WriteCellData<String> buildCellData(String gender) {// 设置单个单元格多种样式WriteCellData<String> cellData = new WriteCellData<>();// 设置单个单元格的填充类型cellData.setType(CellDataTypeEnum.RICH_TEXT_STRING);RichTextStringData richTextStringData = new RichTextStringData();cellData.setRichTextStringDataValue(richTextStringData);richTextStringData.setTextString(gender);WriteFont writeFont = new WriteFont();if ("男".equalsIgnoreCase(gender)) {//设置颜色为红色writeFont.setColor(IndexedColors.RED.getIndex());} else if ("女".equalsIgnoreCase(gender)) {//设置颜色为绿色writeFont.setColor(IndexedColors.GREEN.getIndex());}//应用颜色字体richTextStringData.applyFont(writeFont);return cellData;}public static List<CitySheet> cityList() {List<CitySheet> list = new ArrayList<>(10);list.add(CitySheet.builder().cityName("杭州市").cityDesc("杭州市一般指杭州。 杭州,简称“杭”,古称临安、钱塘,浙江省辖地级市、省会、副省级市、特大城市、国务院批复确定的浙江省经济、文化、科教中心,长江三角洲中心城市之一,环杭州湾大湾区核心城市、G60科创走廊中心城市。").build());list.add(CitySheet.builder().cityName("合肥市").cityDesc("合肥市一般指合肥。 合肥,简称“庐”或“合”,古称庐州、庐阳、合淝,安徽省辖地级市、省会,是合肥都市圈中心城市,国务院批复确定的中国长三角城市群副中心城市,全国四大科教基地、现代制造业基地和综合交通枢纽。").build());list.add(CitySheet.builder().cityName("武汉市").cityDesc("武汉市一般指武汉。 武汉,简称“汉”,别称江城,是湖北省省会,中部六省唯一的副省级市,超大城市,中国中部地区的中心城市,全国重要的工业基地、科教基地和综合交通枢纽,联勤保障部队机关驻地。").build());list.add(CitySheet.builder().cityName("深圳市").cityDesc("深圳市一般指深圳。 深圳,简称“深”,别称鹏城,广东省辖地级市,是广东省副省级市,国家计划单列市,超大城市,国务院批复确定的中国经济特区、全国性经济中心城市、国际化城市、科技创新中心、区域金融中心、商贸物流中心。").build());return list;}public static List<CompanySheet> companyList() {List<CompanySheet> list = new ArrayList<>(10);list.add(CompanySheet.builder().companyName("阿里巴巴").companyBoss("马云").companyBase("杭州市").companyDesc("阿里巴巴集团经营多项业务,另外也从关联公司的业务和服务中取得经营商业生态系统上的支援。业务和关联公司的业务包括:淘宝网、天猫、聚划算、全球速卖通、阿里巴巴国际交易市场、1688、阿里妈妈、阿里云、蚂蚁集团 [408]  、菜鸟网络等。").build());list.add(CompanySheet.builder().companyName("字节跳动").companyBoss("张一鸣").companyBase("北京市").companyDesc("字节跳动的全球化布局始于2015年 [3]  ,“技术出海”是字节跳动全球化发展的核心战略 [4]  ,其旗下产品有今日头条、西瓜视频、抖音、头条百科、皮皮虾、懂车帝、悟空问答等。").build());list.add(CompanySheet.builder().companyName("腾讯").companyBoss("马化腾").companyBase("深圳市").companyDesc("社交和通信服务QQ及微信/WeChat、社交网络平台QQ空间、腾讯游戏旗下QQ游戏平台、门户网站腾讯网、腾讯新闻客户端和网络视频服务腾讯视频等。").build());list.add(CompanySheet.builder().companyName("百度").companyBoss("李彦宏").companyBase("北京市").companyDesc("百度(Baidu)是拥有强大互联网基础的领先AI公司。百度愿景是:成为最懂用户,并能帮助人们成长的全球顶级高科技公司。").build());return list;}
}

CitySheet.java

package com.example.springbooteasyexcel.sheet;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Builder;
import lombok.Data;@Data
@Builder
public class CitySheet {@ExcelProperty(value = "城市名称", index = 0)@ColumnWidth(10)private String cityName;@ExcelProperty(value = "城市介绍", index = 1)@ColumnWidth(60)private String cityDesc;}

CompanySheet.java

package com.example.springbooteasyexcel.sheet;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Builder;
import lombok.Data;@Data
@Builder
public class CompanySheet {@ExcelProperty(value = "公司名称", index = 0)@ColumnWidth(10)private String companyName;@ExcelProperty(value = "公司创始人", index = 1)@ColumnWidth(10)private String companyBoss;@ExcelProperty(value = "公司总基地", index = 2)@ColumnWidth(10)private String companyBase;@ExcelProperty(value = "公司简介", index = 3)@ColumnWidth(50)private String companyDesc;
}

UserSheet.java

package com.example.springbooteasyexcel.sheet;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.Builder;
import lombok.Data;import java.util.Date;@Data
@Builder
public class UserSheet {@ExcelProperty(value = "用户ID", index = 0)@ColumnWidth(10)private Long userId;@ExcelProperty(value = "用户名称", index = 1)@ColumnWidth(10)private String userName;@ExcelProperty(value = {"基本信息", "手机号码"}, index = 2)@ColumnWidth(20)private String userPhone;@ExcelProperty(value = {"基本信息", "电子邮箱"}, index = 3)@ColumnWidth(20)private String userEmail;@ExcelProperty(value = {"基本信息", "地址"}, index = 4)@ColumnWidth(20)private String userAddress;@ExcelProperty(value = "注册时间", index = 5)@ColumnWidth(20)private Date registerTime;@ExcelProperty(value = "性别,男:红色/女:绿色")@ColumnWidth(30)private WriteCellData<String> gender;/*** 忽略这个字段*/@ExcelIgnoreprivate Integer age;
}

SpringBootEasyexcelApplication.java

package com.example.springbooteasyexcel;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringBootEasyexcelApplication {public static void main(String[] args) {SpringApplication.run(SpringBootEasyexcelApplication.class, args);}}

效果展示🍊

单个sheet导出

在这里插入图片描述

多个sheet导出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结一下🍌

1、Alibaba EasyExcel不仅支持写Excel,还支持读Excel和填充Excel,有兴趣的话可以自己去研究,官网地址已经贴在上面了,我这里只做一个引路的。

2、常用注解有三个@ExcelProperty@ColumnWidth@ExcelIgnore
(1)@ExcelProperty不仅确定表头,还可以合并行,用法如下:

  @ExcelProperty(value = {"基本信息", "手机号码"}, index = 2)@ColumnWidth(20)private String userPhone;@ExcelProperty(value = {"基本信息", "电子邮箱"}, index = 3)@ColumnWidth(20)private String userEmail;@ExcelProperty(value = {"基本信息", "地址"}, index = 4)@ColumnWidth(20)private String userAddress;

效果如下:在这里插入图片描述

(2)@ColumnWidth主要是控制列宽

(3)@ExcelIgnore忽略不需要输出的字段
3、写有两种形式
(1)写到文件

  /*** 最简单的写* <p>* 1. 创建excel对应的实体对象 参照{@link DemoData}* <p>* 2. 直接写即可*/@Testpublic void simpleWrite() {// 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入// 写法1 JDK8+// since: 3.0.0-beta1String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(() -> {// 分页查询数据return data();});// 写法2fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());// 写法3fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去写try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();excelWriter.write(data(), writeSheet);}}

(2)写到Web流,这里的ContentType和CharacterEncoding不要乱码,否则很容易乱码或者文件损坏

 /*** 文件下载(失败了会返回一个有部分数据的Excel)* <p>* 1. 创建excel对应的实体对象 参照{@link DownloadData}* <p>* 2. 设置返回的 参数* <p>* 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大*/@GetMapping("download")public void download(HttpServletResponse response) throws IOException {// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postmanresponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("模板").doWrite(data());}

(3)如果存在图片需要导出到Excel单元格中,有两种方式

  • 如果是图片链接
/*** 根据url导出** @since 2.1.1*/private java.net.URL url;
  • 如果是本地文件
/*** 根据文件导出 并设置导出的位置。** @since 3.0.0-beta1*/private WriteCellData<Void> writeCellDataFile;

参考文档:导出图片到Excel中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351522.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

测试必要会的接口测试,不一样的接口测试学完就能涨薪3k。

【文章末尾给大家留下了大量的福利】 requests是基于urllib的HTTP库&#xff0c;可以帮助我们发送各式各样的请求&#xff0c;携带各式各样的参数。 pip install requests 请求 包括&#xff1a; 如何发送不同类型的请求 get post delete put 。。。。 在请求中&#…

第十九节 HTTP 协议

什么是HTTP 协议? 日常我们使用网络用得最多的无疑是在Web 浏览器&#xff08;下文统一使用浏览器&#xff09;上查找资料、看视频、看书、看新闻等等&#xff0c;而在浏览器中只需要输入一些搜索就可以得到想要的信息&#xff0c;这归根于搜索引擎的好处&#xff0c;但是实际…

102.【Redis】

Resies集群 前言(一)、Nosql概述1、为什么要用NoSQL &#xff1f;2、什么是Nosql3、Nosql特点4、Nosql的四大分类5、阿里巴巴数据结构演进 (二)、Redis入门1.概述2.Redis能干什么?3、Redis的特点4、window安装Redis5、Linux安装Redis6、redis-benchmark性能测试7、Redis基础知…

菌子导航系统(持续开发中)

文章目录 菌子导航前言项目架构spring-cloud 和 spring-boot 版本选择使用到的组件&#xff08;依赖&#xff09;架构分层 项目基本功能1 使用Nacos做配置中心2 logback日志3 mybatis-plus操作数据库4 Caffeine 缓存整合5 LocalDateTime 序列化&反序列化6 参数校验快速失败…

狂神Javaweb完整版基础入门(IDEA版)值得学习的JavaWeb教程

Java web Java web 1、基本概念 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com静态web html&#xff0c;css提供给所有人看的数据始终不会发生变化&#xff01; 动态web 淘宝&#xff0c;几乎是所有的网站提供给所有的人看的数据始终会变化&…

阿里腾讯“双向奔赴”新进展:互联互通再提速

《中智观察》第1636篇推送 作者&#xff1a;雨涵 编辑&#xff1a;小瑞瑞 头图来源&#xff1a;摄图网 “冬天来了&#xff0c;春天还会远吗”&#xff1f;当推倒了“篱笆墙”&#xff0c;大厂互联互通的“脚步”就在持续向前迈进。 近日&#xff0c;有消息称淘宝开始内测使用微…

【转载】JAVA知识点集锦(中)

这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答&#xff1a;Servlet与CGI的区别在于Servlet处于服务器进程中&#xff0c;它通过多线程方式运行其service()方法&#xff0c;一个实例可以服务于多个请求&#xff0c;并且其实例一般不会销…

B站---【狂神说Java】JavaWeb入门到实战---笔记

该笔记大部分搬运B站遇见狂神说的javaWeb&#xff0c;顺便把图文合并记录&#xff0c;便于回顾 视频地址&#xff1a;https://www.bilibili.com/video/BV12J411M7Sj 记得三连 文章目录 1、基本概念1.1、前言1.2、web应用程序web应用程序&#xff1a;1.3、静态web1.4、 动态web …

关于NoSQL与SQL的区别

转载自&#xff1a;http://blog.csdn.net/xlgen157387/article/details/47908797 云计算背后的秘密&#xff1a;NoSQL诞生的原因和优缺点 我本来一直觉得NoSQL其实很容易理解的&#xff0c;我本身也已经对NoSQL有了非常深入的研究&#xff0c;但是在最近准备YunTable的Chart的时…

Java面试题全集(中)

这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答&#xff1a;Servlet与CGI的区别在于Servlet处于服务器进程中&#xff0c;它通过多线程方式运行其service()方法&#xff0c;一个实例可以服务于多个请求&#xff0c;并且其实例一般不会销…

Node.js(一)——(Node.js安装及使用,通过Node.js搭建服务器,模块化及自定义模块,npm/yarn/nvm,内置模块fs的使用,buffer及stream,新闻列表案例)

目录 1.Node.js介绍 2.安装Node.js 3.使用Node.js实现第一个服务器 3.1初步感受Node.js 3.2Google Chrome 默认非安全端口列表&#xff0c;尽量避免以下端口。 3.3nodemon自动监控服务端更改 4.模块化——Node.js使用commonjs规范 4.1创建自定义模块&#xff08;引入文…

限期解除!要跟乱七八糟的口令说拜拜了

大家好&#xff0c;欢迎来到编程教室~我是Crossin。 这两天有个事关很多人的新闻&#xff1a; 转自 澎湃新闻 https://m.thepaper.cn/baijiahao_14480198 为什么说事关很多人&#xff1f;因为以下这两个场景&#xff0c;想必大家都遇到过&#xff1a; 出现这种情况&#xff0c;…

数据分析与爬虫实战视频——学习笔记(一)(python基础、urllib、超时设置、自动模拟HTTP请求、异常处理、浏览器伪装、代理服务器、新闻爬虫、淘宝登陆和图片爬取)

未经允许&#xff0c;请勿转载。 连载未完成状态 网址&#xff1a; 【数据挖掘】2019年最新python3 数据分析与爬虫实战_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av22571713/?p1 目标&#xff1a; 网络爬虫工程师 数据分析&#xff08;数据挖…

从零开始使用深度学习训练一个新闻分类器(干货)

https://mp.weixin.qq.com/s/qR-d9Zay-7NJZgmYYlwn0A?utm_sourcetuicool&utm_mediumreferral 我们在浏览新闻的时候&#xff0c;通常会看到新闻网站对每个新闻都进行了分类&#xff1a; 新闻分类的应用相当广泛。对于网站来说&#xff0c;可以根据你看得较多的新闻类别给你…

跑实验_word2vector词向量实现_基于搜狗新闻预料+维基百科

这篇博客只是记录一下如何解决 跑别人的代码没通的过程。 文章目录 1 运行代码0设备环境1.获取语料库2.语料库预处理3.训练4.开动&#xff01;使用词向量近义词获取某个词语的词向量计算句子相似度词向量加减运算选出集合中不同类的词语 2总结一下经验3补充 1 运行代码 最经在…

web编程项目--新闻网站搭建

文章目录 一、新闻爬取1.爬虫原理2.分析网站链接格式和网页信息格式cheerio爬取新浪新闻爬取人民网新闻央视新闻爬取网易新闻 3.数据库设计4.爬虫具体代码实现5.存储结果展示 二、 网站搭建1.用express构建网站访问mysql2.显示查询结果后端实现前端实现 3.对查询结果进行分页4.…

彻底解决网络爬虫遇到的中文乱码问题

你是否遇到过下面的情况&#xff1a; 作为爬虫新手好不容易写了一个爬虫结果爬出来的数据中文数据乱码导致不能使用 如图&#xff1a; 其实很好解决&#xff1a; 如果你是使用的request模块得到的相应对象则可以如下设置&#xff1a; 主要由两种情况&#xff0c;这是根据网页所…

解析网页出现中文乱码问题的解决方案

最近在解析淘宝中商品的信息&#xff0c;结果出现乱码&#xff0c;如&#xff1a; 原因就是中文字符格式出现冲突&#xff0c;ASP.NET MVC 默认采用utf-8,但是淘宝网页采用gbk。 在网上找了一下&#xff0c;最常用的解决方法就是修改web.config: < system.web> ......…

java并发编程:重排序与happens-before介绍

文章目录 什么是重排序&#xff1f;顺序一致性模型与JMM的保证数据竞争与顺序一致性顺序一致性模型JMM中同步程序的顺序一致性效果JMM中未同步程序的顺序一致性效果 happens-before什么是happens-before?天然的happens-before关系 什么是重排序&#xff1f; 计算机在执行程序…

burpsuite工具的使用(详细讲解)

一&#xff09;前言 我已经在之前详细的说明了burpsuite的安装过程&#xff0c;如果不了解的可以看 burpsuite安装教程 &#xff1a;http://t.csdn.cn/uVx9X 在这了补充说明一下&#xff0c;在安装完burpsuite并设置完代理后&#xff0c;会出现如果访问的url是使用http协议的…