Hawk在设计之初,就是以弱schema风格定义的。没有严格的列名和列属性。用C#这样的静态强类型语言编写Hawk,其实并不方便。但弱schema让Hawk变得更灵活更强大。
因此,Hawk虽然之前支持各种数据库连接器,而目前只支持MongoDB这样的文档型数据库。之所以不支持传统SQL,是因为获取的数据可能并不满足这些SQL数据库的约束:如列的顺序,列的字段类型,是否为空...很容易导致插入失败。使用Hawk的一般不是程序员,我不想给普通人挖这样的坑。
当然,从各类SQL数据库中读入数据也是可以的,但既然没有提供写入,我们也就索性不提供读入了。需要的话,你可以自己扩展其他数据库连接器。
不过,简单的才是最好的,以作者的经验,使用MongoDB这样的数据库来应对爬虫已经足够了:不需事先建表,高性能,低成本,低维护。我们也不可能一次性就把数据规约成你想要的形式,之后完全可以用其他工具和代码,再将MongoDB的数据导出来,写入到目标数据库。
安装MongoDB
已经安装过的可以自行跳过。
可以从这里下载笔者已经打包好的安装包,之后解压后,在bat脚本上点击右键,以管理员模式执行,就会默认安装到D盘上并启动服务,非常方便。
MongoDB本身包含32位和64位两种版本,前者只支持最大2GB的数据集合。但32位能装在64位系统上,反过来就不成。因此提供的安装包是32位版本的。如果想装64位,可以参考网络上其他教程。
安装之后,可以在任务管理器的服务
上,检查是否已经包含了正在运行
的MongoDB服务。
如何为Hawk添加连接器
在数据视图
的右侧,包含了目前所有的连接器。
在空白位置点右键,即可选择插入一个MongoDB连接器
,在服务器地址,用户名和密码,数据库名称上填写所需的字段,然后点击连接数据库
即可。
如果你是小白用户,用上面的方法安装了MongoDB,则数据库地址填写127.0.0.1
(代表本地),用户名和密码为空,数据库名称填写你想要的任何名字皆可。
这样我们就可以用Hawk将数据写入数据库啦!
如何读取数据库
两种方式
事先导入数据管理器
添加连接器后,可以在下拉菜单中看到当前数据库中包含的所有表,在表上点右键,可选择
- 【查看数据】:查看内容,并不导入到内存中
- 【导入全部数据】:将表内容全部导入到内存中,表格巨大时慎用!
- 【执行查询】,此时会弹出对话框,可在对话框中输入Mongo支持的js语法,即可执行查询并导入到内存中。本功能没有经过详细测试,慎用。
之后,可以利用数据清洗,对这些数据进行后处理或导出。
在数据清洗中动态导入
可选择从数据库生成
,此时每次刷新时,系统都会从数据库内实时地获取数据,整个流不会将数据全部导入到内存中。
两种方法可以按需求选用,对第一种方法,每次刷新时性能很高,因为数据已经在内存中了,但如果表大则是灾难;对第二种,不论表多大都没有关系,但刷新时每次都要请求数据库,因此性能相对较差。
如何写入数据库
参考执行器
的相关章节