# Crawler **Repository Path**: superfang-web/crawler ## Basic Information - **Project Name**: Crawler - **Description**: 某公司爬虫笔试题,采用了多线程。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-27 - **Last Updated**: 2023-03-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java ## README * 介绍 写一个命令行工具。需要把https://www.aquanliang.com/blog栏目下的所有文章(包括分页)的标题,发布日期,阅读数以及封面图,输出到一个excel文件。 * 技术使用 采用HttpClient发起http请求,POI操作Excel。 * 实现思路 采用生产者消费者模式进行多线程爬取,对excel文件写入采用单线程。 * 难点 1.多线程设计爬取网页 2.避免HSSFWorkbook对象过大,导致OOM 开始的方案是先爬取数据写入数据库(这样可以有效避免HSSFWorkbook对象过大,导致OOM的情况),但是此次要求写命令行程序,用户电脑上不一定有mysql,所以后续的方案就丢弃了依赖数据库持久化这一方案。 想过在原有的基础上追加数据,但是每次读取文件时,都会将文件所有数据读取至HSSFWorkbook对象中,因此该想法破灭。 后续查阅文档发现大于65535行数据会报错,与估算的实际59 *10 = 590条数据相差过大,也就是本次爬取由于数据量较小,HSSFWorkbook对象基本不会OOM,但不排除以后会遇见这般OOM的时候,带着疑问再次查阅文档,发现可以将HSSFWorkbook替换为SXSSFWorkbook从而解决该潜在问题。详情: https://blog.csdn.net/xiaoxiangzi520/article/details/122172652 * 待可提升 1.一些常量没有使用枚举统一起来。比如进行excel文件命名字符串拼接时,前缀“data_”,后缀“.xls”等写死在代码中。 2.少部分只使用一次的情况下没有抽成方法(大部分抽出来了)。 3.写入文件可以使用NIO提高CPU使用率。但实际网络IO为性能瓶颈,所以无伤大雅。