2.2 数据存储
爬虫抓取的结构化数据可以写入逗号分隔值(CSV)文件或数据库中。
如果需要写入多个不同的存储库,则可以让Gradle项目有多个可运行的任务。例如,在build.gradle文件中设置一个JavaExec类型的任务,然后运行newsCrawler.News2Solr类中的main()方法:

可以使用如下命令运行runSolr任务:

2.2.1 写入文件
CSV只是一个普通的纯文本文件,逐列存储数据,并用分隔符分隔(如通常使用逗号“,”作为分隔符)。
工具包Apache Commons IO中包含一些用于文件操作的类,这里介绍使用Commons IO生成CSV文件。为了使用Apache Commons IO,可以在build.gradle文件中增加如下依赖项:

将FileUtils.write()方法写入文件的示例如下:

要搜索数据库中的文本,首先要规划索引的存储方式,建立索引列的字段,考察数据来源,建立从数据库中的表到索引列之间的转换关系。然后将数据库中的更新增量同步到索引库。
2.2.2 Jdbi写入数据库
在Java中,可以通过Jdbi访问关系型数据库。下面以SQLite数据库为例演示Jdbi写入数据库。在build.gradle文件中增加如下依赖项:

建立数据库连接:

写入数据:

为了加快写入速度,可以使用数据库连接池重用数据库连接,下面使用HikariCP数据库连接池增加如下依赖项:

使用HikariConfig类和HikariDataSource的示例如下:

或者根据属性文件创建HikariConfig对象:

属性文件的示例如下:

可以在Spring Boot中使用HikariCP数据库连接池,Spring Boot 2默认的连接池就是HikariCP。在application.properties文件中配置的HikariCP如下:

可以把SQLite中的数据导入MariaDB,根据指定表导出SQL文件:

