主要组件介绍

1.Hawk的关键概念

  • 任务: 系统仅仅提供了两种任务: 网页采集器 和数据清洗,任务可以被新建,保存和加载。
  • 模块: 一个任务会包含多个模块,例如数据清洗中会有从文本生成,从爬虫转换
  • 工程: 多个任务组成一个工程,工程可以以xml方式保存和加载
  • 数据表: 在内存中存储的数据表,速度快,但是容量有限,存储小型数据时使用
  • 数据库(连接器): Hawk通过连接器连接不同的数据库,如MongoDB,sqlite等。
  • 列: 数据清洗里的列,可参考像Excel里的列,在 网页采集器 里,一个属性对应一个列
  • 文档: 可理解为数据清洗里的一行,它是键值对构成的字典,如key1:value,key2:value2
  • 单元格 : 文档中的一个单元格,就像Excel 那样
  • 流: 多个文档的序列,可能是有限或无穷的,在早期版本的Hawk中,这个概念大量使用。
  • 线程: 任务在启动时,会有一个(串行)或多个(并行)线程,可以在工作线程中对其进行暂停和删除。

目前系统仅仅提供了两个任务: 网页采集器和数据清洗, 双击即可加载一个新的模块。

新建任务

上次保存的任务,重新启动后其界面不会自动打开,可在任务管理器上双击,即可自动弹出配置界面。

2.线程管理

不论是调试还是执行模式,系统都会在任务管理视图中增加一个或多个线程。 你可以勾选,或取消勾选部分或全部线程,暂停或取消它们。当网站限制抓取时,可以暂停所有线程,等恢复后再次执行。

工作线程

右下角分别是暂停,继续和删除任务。

task.gif

注意:

  1. 当工作流有误时(比如该列所有数据都空,却在该列添加了 空对象过滤器,那么所有数据都会被过滤)可能不会产生任何数据输出。此时进度条并不会向前推进,产生卡死的假象。此时可强行将其删除
  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文档的使用:

doc.gif

在按钮上自动弹出帮助

为一个数据清洗任务自动生成其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/