主要组件介绍
1.Hawk的关键概念
- 任务: 系统仅仅提供了两种任务: 网页采集器 和数据清洗,任务可以被新建,保存和加载。
- 模块: 一个任务会包含多个模块,例如数据清洗中会有
从文本生成
,从爬虫转换
等 - 工程: 多个任务组成一个工程,工程可以以xml方式保存和加载
- 数据表: 在内存中存储的数据表,速度快,但是容量有限,存储小型数据时使用
- 数据库(连接器): Hawk通过连接器连接不同的数据库,如MongoDB,sqlite等。
- 列: 数据清洗里的列,可参考像Excel里的列,在 网页采集器 里,一个属性对应一个列
- 文档: 可理解为数据清洗里的一行,它是键值对构成的字典,如
key1:value,key2:value2
- 单元格 : 文档中的一个单元格,就像Excel 那样
- 流: 多个文档的序列,可能是有限或无穷的,在早期版本的Hawk中,这个概念大量使用。
- 线程: 任务在启动时,会有一个(串行)或多个(并行)线程,可以在工作线程中对其进行暂停和删除。
目前系统仅仅提供了两个任务: 网页采集器和数据清洗, 双击即可加载一个新的模块。
上次保存的任务,重新启动后其界面不会自动打开,可在任务管理器上双击,即可自动弹出配置界面。
2.线程管理
不论是调试还是执行模式,系统都会在任务管理视图中增加一个或多个线程。 你可以勾选,或取消勾选部分或全部线程,暂停或取消它们。当网站限制抓取时,可以暂停所有线程,等恢复后再次执行。
右下角分别是暂停,继续和删除任务。
注意:
- 当工作流有误时(比如该列所有数据都空,却在该列添加了 空对象过滤器,那么所有数据都会被过滤)可能不会产生任何数据输出。此时进度条并不会向前推进,产生卡死的假象。此时可强行将其删除
- 线程删除的流程是:先安全将其取消,如果线程无响应,则会直接将其杀死
3.调试系统
除了在调试模式下进行操作之外,Hawk还提供了丰富的工具来确定错误的位置。
3.1.调试与探查窗口
调试探查窗口可以方便地展示每个模块的输入量,输出量,因空而跳过的数量,一目了然
3.2.系统级窗口
如何了解总的http请求次数和错误数?在 系统设置-> Http请求详情里,详细地给出了请求数,被禁止数,因错误而跳过等数量。 点击 清空数据
,即可将计数器置0.
3.3.确定模块的输入和输出
在单步调试模式时,该模块输入的列,会在数据清洗的最上方用蓝色表示,输出列会用绿色表示。
4.日志功能
Hawk包含了几类日志功能, 使用log4net作为日志系统,分为INFO, DEBUG, ERROR, FATAL ,WARNING五种等级。
- 在线界面日志:在UI的最下方,但是只能显示本次启动日志,同时不能太多,否则会有性能问题
- 日志文件, log.dat, 本质还是文本文件,可使用记事本打开,超过10M则会创建新文件。
- 弹出对话框: 右上角会有弹出式浮窗。可通过 系统设置 中进行设置
下图是典型的调试信息窗口,用不同颜色展示日志级别:
如何改变日志的级别? 当发现现有日志太多或太少,可以在主菜单-> 调试-> 日志级别 设置,如下图:
5.多国语言
Hawk5支持了多国语言引擎,会根据操作系统语言自动切换显示的语言。 目前支持的语言包括;
- 中文(zh_CH)
- English (en_US)
还可以手工设置语言, 在 系统设置
, 语言
中切换,下一次启动时,会按上一次设置保存的语言显示。
Hawk凭借WPF的强大功能,一定程度上支持语言热切换,但依然会出现不能全部顺利切换的情形。因此建议在设置语言后,通过重启使语言生效。
5.1.新增其他语言
如果你愿意为Hawk的国际化贡献力量。欢迎新增语言,Hawk新增语言非常简单,在程序的执行目录的Lang文件夹,以xaml格式保存了各国语言的配置文件。拷贝zh_CH.xaml, 并将其中的中文内容替换为对应语言即可。注意:
如果只是希望国际化界面部分,则只需修改不带xml:space=preserve标签部分的内容。而包含该标签的内容,基本都用于显示文档。当然我更希望你可以翻译全部内容,否则没有文档的Hawk是非常难以使用的。
6.帮助文档系统
由于Hawk的使用较为复杂,因此提供了内置的文档系统。
- 在绝大多数的按钮和菜单上,放置鼠标超过3秒钟,就会弹出完整的介绍和帮助。
- 所有的模块在配置时,都可以在配置后显示其使用文档,包括功能简介,参数名和对应介绍,注意事项等。
- 点击:帮助,即可弹出全局文档系统,在文档中,支持字体放缩,关键字搜索等,方便快速定位内容。
- 每个任务或工程,都可以生成其对应的教程文档,极大地减少了做教程写文档的负担
下面的动图描述了Hawk文档的使用:
为一个数据清洗任务自动生成其step by step的教程文档(点击调试工具栏中最右侧的哭脸按钮即可)
亦可在 文件->生成工程教学文档, 生成当前工程的全部文档。在初期其可读性可能不够好,之后会继续完善。
Hawk的文档系统分为新手模式
和高手模式
:
- 模式的切换,可以在系统配置,新手模式中进行切换
- 新手模式:文档详尽,尤其是在数据清洗的模块列表中,以详细介绍的形式呈现,方便直观地了解各模块功能
- 老手模式:文档极简,仅提供新手模式第一段的内容。
在各模块的图标上停留,即可弹出简单的使用介绍:
6.1.文档编写和自动生成
由于软件在不停地优化升级,会出现模块和文档不一致的问题。为了降低作者编写文档的负担,Hawk采用了自动文档生成的方式:
- 各模块的介绍都基于C#的反射进行,当模块参数变化时可自动更新
- 软件的文案和文档介绍自动保持同步,即使模块名称变化也不会影响。
- 更方便的多语言: 不同的名称可方便重用
如果你希望为Hawk编写和完善文档,本节会介绍文档的生成方式。核心文档都位于软件源码路径的Doc/DefaultLanguage.xaml
其语法非常简洁:
- 使用space=preserve来指定某个变量为多行文档。
- 使用
{{KEY_NAME}}
来引用其他变量,生成文档时会自动替换 - 过长的文档,可以在resource目录下新建YOUR_MD.md,则可以使用
{{YOUR_MD}}
来引用它。文件名只能使用英文 - 变量之间可以互相调用,但不能出现循环引用,并生成最终文档
建议修改对应的xaml文件后,通过git向主干提交merge request,这样能保证文档质量。那如何预览生成的文档效果? 执行如下命令:
pip install mkdocs
pip install lxml
sh builddoc.sh
mkdocs serve
即可在http://127.0.0.1:8000/
中查看预览。
您也可以在线上访问Hawk的全部文档:
https://ferventdesert.github.io/Hawk/