5.2 网络数据Excel存储
网络爬虫在采集少量数据时,可以使用Excel进行存储。 Java中主要有两款操作Excel的工具JXL(主要处理xls格式的Excel)和POI(可处理xls、xlsx、word等格式的文件)。本小节利用POI封装了Excel读取和写入方法,供读者参考。
使用Excel存储数据之前,需要在Maven工程的pom.xml文件中添加Excel的dependency。
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version>
</dependency>
如程序5-2所示,将采集到的URL存入excel表格。
//程序5-2
public class ExcelStorage {public static void main(String[] args) throws IOException {//需要写入到excel的内容//这里选择使用map数据结构来存储excel所对应的一行数据List<Map<String,String>> excelMapList = new LinkedList<>();//通过Jsoup创建和url的连接Connection connection = Jsoup.connect("https://searchcustomerexperience.techtarget.com/info/news");//获取网页的Document对象Document document = connection.get();Elements aList = document.getElementsByTag("a");if(aList.size()>0){for(int i = 0;i<aList.size();i++){Element a = aList.get(i);if(a != null){String url = a.attr("href");if(url.contains("http")) {Map<String,String> map = new HashMap<>();map.put("f1",url);excelMapList.add(map);}}}}//设置excel表头List<String> headList = new ArrayList<>();headList.add("url");//创建含有表头的excelXSSFWorkbook workbook = ExcelUtils.getWorkbook("Sheet1", headList);//将excelMapList内容写入ExcelString excelPath = "/Users/steven/Documents/代码/project/spider/src/main/java/com/topicBet/url.xlsx";ExcelUtils.writeExcelContent(workbook, "Sheet1", excelPath, excelMapList);}
}
@Slf4j
public class ExcelUtils {/*** 读取excel文件内容,文件需要含有表头,如果没有表头请以f1,f2,f3......填充** @param filePath 文件路径* @param sheetAt 表格* @return List<Map<String,String>>*/public static List<Map<String, String>> readExcelContent(String filePath, Integer sheetAt) {List<Map<String, String>> mapList = new ArrayList<>();FileInputStream fileInputStream = null;try {fileInputStream = new FileInputStream(filePath);// 延迟解析比率ZipSecureFile.setMinInflateRatio(-1.0d);XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);XSSFSheet sheet = workbook.getSheetAt(sheetAt);int rows = sheet.getPhysicalNumberOfRows();for (int i = 1; i <= rows; i++) {//此行不为空行if (sheet.getRow(i) != null) {Map<String, String> map = new HashMap<>();int columns = sheet.getRow(i).getPhysicalNumberOfCells();for (int j = 0; j < columns; j++) {map.put("f" + (j + 1), getString(sheet.getRow(i).getCell(j)).trim());}mapList.add(map);}}} catch (Exception e) {log.error("读取文件出现异常");}return mapList;}/*** 把单元格的内容转为字符串** @param xssfCell 单元格* @return String*/public static String getString(XSSFCell xssfCell) {if (xssfCell == null) {return "";}if (xssfCell.getCellTypeEnum() == CellType.NUMERIC) {DecimalFormat df = new DecimalFormat("0");return df.format(xssfCell.getNumericCellValue());} else if (xssfCell.getCellTypeEnum() == CellType.BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());} else {return xssfCell.getStringCellValue();}}/*** 创建含有表头的excel** @param sheetName 表格名称* @param headList 表头字符串列表* @return XSSFWorkbook*/public static XSSFWorkbook getWorkbook(String sheetName, List<String> headList) {XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet(sheetName);XSSFRow titleRow = sheet.createRow(0);for (int i = 0; i < headList.size(); i++) {XSSFCell cell = titleRow.createCell(i);cell.setCellValue(headList.get(i));}return workbook;}/*** 将需要输出的内容填充到excel并保存到本地** @param workbook 表格* @param sheetName 表格名称* @param path 输出到本地的路径* @param excelMapList 需要输出的内容*/public static void writeExcelContent(XSSFWorkbook workbook, String sheetName, String path, List<Map<String, String>> excelMapList) {// 延迟解析比率ZipSecureFile.setMinInflateRatio(-1.0d);XSSFSheet sheet = workbook.getSheet(sheetName);for (int i = 1; i <= excelMapList.size(); i++) {XSSFRow row = sheet.createRow(i);Map<String, String> map = excelMapList.get(i - 1);for (int j = 0; j < map.size(); j++) {XSSFCell cell = row.createCell(j);cell.setCellValue(map.get("f" + (j + 1)));}}//用输出流写到excelFileOutputStream outputStream = null;try {outputStream = new FileOutputStream(path);workbook.write(outputStream);outputStream.flush();outputStream.close();} catch (Exception e) {log.error("写入excel发生异常");}}
}
5.2 网络数据Excel存储相关推荐
- linux接收网络数据并存存储,linux网络数据包数据结构 Socket Buffer
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb.它代表一个要发送或处理的报文,并贯穿于整个协议栈.1.套接字缓存skb由两部分组成:(1)报文数据:它保存了实际在网络 ...
- linux接收网络数据并存存储,Linux网络设备驱动之数据接收流程(六)
网络设备接收数据的主要方法是由中断引发设备的中断处理函数,中断处理函数判断中断类型,如果为接收中断,则读取接收到的数据,分配 sk_buffer 数据结构和数据缓冲区,将接收到的数据复制到数据缓冲区, ...
- matlab导入桌面excel数据库,matlab导入excel数据_excel怎么导入网络上的数据?_excel导入网络数据...
网络上的数据怎么导到excel中.有方法是直接复制然后粘贴到excel中,但是网络上直接复制过来的,可能不能直接进去下一步编辑.因为复制过来的每个词后面都有空格,是不能进行直接计算,连最基本的求和都不 ...
- 云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE
数据中心存储演化--FCoE 数据中心三大基础:主机 网络 存储 在云计算推动下,存储基础架构在发生演变 传统存储结构DAS.SAN在发展中遇到了布线复杂.能耗增多的缺点(原生性),需要对架构做根 ...
- 详解 Python 如何将爬取到的数据分别存储到 txt、excel、mysql 中!
作者 | 黄伟呢 来源 | 数据分析与统计学之美 1. 页面分析 我爬取的页面是腾讯体育,链接如下: https://nba.stats.qq.com/player/list.htm 观察上图:左边展 ...
- IDC 网络数据存储
引用:http://baike.baidu.com/view/4684.htm 基本简介 IDC即是Internet Data Center,是基于INTERNET网络,为集中式收集.存储.处理和发送 ...
- 【andriod】设备APP开发之数据就地Excel存储
CSDN话题挑战赛第2期 参赛话题: 文章目录 前言 一.开发工具 1.软件介绍 2.Android JDK配置 3.Android Gradle配置 4.Android API配置 5.项目依赖配置 ...
- Python电影爬虫,用Excel存储并进行数据可视化分析
目录 一.爬取网页数据 1.分析网页 (1)网页数据类型 (2)不同类型电影排行榜 url 的区别 电影分类对应关系表 2.编写爬虫 (1)先寻找网页的 url (2)编写请求中使用的相应数据 (3) ...
- SpringBoot提供接口实现Excel导入数据并存储到数据库中
SpringBoot提供接口实现Excel导入数据并存储到数据库中 完整项目文件 1 效果展示 1.1 Excel数据 zxy.xlsx 1.2 导入后数据库中数据 CREATE TABLE `use ...
最新文章
- react 自定义 TabBar 组件
- c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...
- PHP 的 cURL库快速入门文档
- SAP RM07扩展
- 开源GraphView的使用--数据统计
- IIoT 安防保卫战一触即发,Fortinet 亮剑
- 一文总结GaussDB通信原理知识
- Oracle循环语句
- linux系统电脑的权限设置,Linux下的文件权限设置修改详解linux操作系统 -电脑资料...
- 使用pygal展示世界各国人口分布情况
- 极坐标格式下的二维傅里叶变换与逆变换推导
- ubuntu安装日文输入法
- Deepin 任务栏网速插件推荐 NetSpeed (重构 lfxSpeed)
- ESP32的应用程序启动与PSRAM初始分析
- excel单元格内的数值向上、向下取整
- [82]redis中如何切换db
- 基于规则的分形图形生成方法
- 情景剧《重走长征路》上演
- 它来了,任务调度框架 Quartz保姆级教程奉上
- 元宇宙——定向未来的网络服务:最新技术动向调研
热门文章
- 清理localstorage_localstorage文件夹可以删除吗
- c++中绝对值的函数
- 【存储测试】cosbench存储性能测试工具
- MapReduce关系代数运算——投影
- 计算机科学与技术专业发展问题,解析计算机科学与技术专业发展存在的问题.doc...
- 关于 GK盘,扩盘在storage和os两侧的联系
- 二十岁的女孩应该有的思想
- mysql错误码 1068_服务启动报错----错误1068 的解决方法
- 那些好用的无版权免费图片网站
- FTP使用教程之Filezilla使用教程