网络爬虫在采集少量数据时,可以使用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存储相关推荐

  1. linux接收网络数据并存存储,linux网络数据包数据结构 Socket Buffer

    Linux网络核心数据结构是套接字缓存(socket buffer),简称skb.它代表一个要发送或处理的报文,并贯穿于整个协议栈.1.套接字缓存skb由两部分组成:(1)报文数据:它保存了实际在网络 ...

  2. linux接收网络数据并存存储,Linux网络设备驱动之数据接收流程(六)

    网络设备接收数据的主要方法是由中断引发设备的中断处理函数,中断处理函数判断中断类型,如果为接收中断,则读取接收到的数据,分配 sk_buffer 数据结构和数据缓冲区,将接收到的数据复制到数据缓冲区, ...

  3. matlab导入桌面excel数据库,matlab导入excel数据_excel怎么导入网络上的数据?_excel导入网络数据...

    网络上的数据怎么导到excel中.有方法是直接复制然后粘贴到excel中,但是网络上直接复制过来的,可能不能直接进去下一步编辑.因为复制过来的每个词后面都有空格,是不能进行直接计算,连最基本的求和都不 ...

  4. 云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE

    数据中心存储演化--FCoE   数据中心三大基础:主机 网络 存储 在云计算推动下,存储基础架构在发生演变 传统存储结构DAS.SAN在发展中遇到了布线复杂.能耗增多的缺点(原生性),需要对架构做根 ...

  5. 详解 Python 如何将爬取到的数据分别存储到 txt、excel、mysql 中!

    作者 | 黄伟呢 来源 | 数据分析与统计学之美 1. 页面分析 我爬取的页面是腾讯体育,链接如下: https://nba.stats.qq.com/player/list.htm 观察上图:左边展 ...

  6. IDC 网络数据存储

    引用:http://baike.baidu.com/view/4684.htm 基本简介 IDC即是Internet Data Center,是基于INTERNET网络,为集中式收集.存储.处理和发送 ...

  7. 【andriod】设备APP开发之数据就地Excel存储

    CSDN话题挑战赛第2期 参赛话题: 文章目录 前言 一.开发工具 1.软件介绍 2.Android JDK配置 3.Android Gradle配置 4.Android API配置 5.项目依赖配置 ...

  8. Python电影爬虫,用Excel存储并进行数据可视化分析

    目录 一.爬取网页数据 1.分析网页 (1)网页数据类型 (2)不同类型电影排行榜 url 的区别 电影分类对应关系表 2.编写爬虫 (1)先寻找网页的 url (2)编写请求中使用的相应数据 (3) ...

  9. SpringBoot提供接口实现Excel导入数据并存储到数据库中

    SpringBoot提供接口实现Excel导入数据并存储到数据库中 完整项目文件 1 效果展示 1.1 Excel数据 zxy.xlsx 1.2 导入后数据库中数据 CREATE TABLE `use ...

最新文章

  1. react 自定义 TabBar 组件
  2. c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...
  3. PHP 的 cURL库快速入门文档
  4. SAP RM07扩展
  5. 开源GraphView的使用--数据统计
  6. IIoT 安防保卫战一触即发,Fortinet 亮剑
  7. 一文总结GaussDB通信原理知识
  8. Oracle循环语句
  9. linux系统电脑的权限设置,Linux下的文件权限设置修改详解linux操作系统 -电脑资料...
  10. 使用pygal展示世界各国人口分布情况
  11. 极坐标格式下的二维傅里叶变换与逆变换推导
  12. ubuntu安装日文输入法
  13. Deepin 任务栏网速插件推荐 NetSpeed (重构 lfxSpeed)
  14. ESP32的应用程序启动与PSRAM初始分析
  15. excel单元格内的数值向上、向下取整
  16. [82]redis中如何切换db
  17. 基于规则的分形图形生成方法
  18. 情景剧《重走长征路》上演
  19. 它来了,任务调度框架 Quartz保姆级教程奉上
  20. 元宇宙——定向未来的网络服务:最新技术动向调研

热门文章

  1. 清理localstorage_localstorage文件夹可以删除吗
  2. c++中绝对值的函数
  3. 【存储测试】cosbench存储性能测试工具
  4. MapReduce关系代数运算——投影
  5. 计算机科学与技术专业发展问题,解析计算机科学与技术专业发展存在的问题.doc...
  6. 关于 GK盘,扩盘在storage和os两侧的联系
  7. 二十岁的女孩应该有的思想
  8. mysql错误码 1068_服务启动报错----错误1068 的解决方法
  9. 那些好用的无版权免费图片网站
  10. FTP使用教程之Filezilla使用教程