From e353bf4fdb2951236e8315cead9fe26a6439c3f3 Mon Sep 17 00:00:00 2001 From: Santiago Castro Date: Tue, 18 Apr 2017 02:29:22 -0300 Subject: [PATCH] Fix broken Markdown headings --- README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 14fc65b..308913d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#Hawk: Advanced Crawler& ETL tool written in C#/WPF +# Hawk: Advanced Crawler& ETL tool written in C#/WPF # Hawk-数据抓取工具:简明教程 @@ -9,7 +9,7 @@ > https://ferventdesert.github.io/Hawk/ -##1.软件介绍 +## 1.软件介绍 HAWK是一种数据采集和清洗工具,依据GPL协议开源,能够灵活,有效地采集来自网页,数据库,文件, 并通过可视化地拖拽, 快速地进行生成,过滤,转换等操作。其功能最适合的领域,是爬虫和数据清洗。 @@ -51,8 +51,8 @@ Hawk.Core\Hawk.Core.sln [大众点评-北京美食][5] -##2.界面和组件介绍 -###2.1 界面介绍 +## 2.界面和组件介绍 +### 2.1 界面介绍 软件采用类似Visual Studio和Eclipse的Dock风格,所有的组件都可以悬停和切换。包括以下核心组件: @@ -63,7 +63,7 @@ Hawk.Core\Hawk.Core.sln - 右上方区域: 属性管理器,能对不同的模块设置属性。 - 右下方区域: 显示当前已经加载的所有数据表和模块。 -###2.2 数据管理 +### 2.2 数据管理 能够添加来自不同数据源的连接器, 并对数据进行加载和管理: @@ -71,7 +71,7 @@ Hawk.Core\Hawk.Core.sln 在空白处,点击右键,可增加新的连接器。在连接器的数据表上,双击可查看样例,点击右键,可以将数据加载到内存中。也可以选择加载虚拟数据集,此时系统会维护一个虚拟集合, 当上层请求分页数据时, 动态地访问数据库, 从而有效提升性能。 -###2.3 模块管理 +### 2.3 模块管理 目前系统仅仅提供了两个模块: 网页采集器和数据清洗ETL, 双击即可加载一个新的模块。 ![QQ截图20160501105646.jpg-6.8kB][8] @@ -80,15 +80,15 @@ Hawk.Core\Hawk.Core.sln ![QQ截图20160501105700.jpg-10.5kB][9] -###2.4 系统状态管理 +### 2.4 系统状态管理 当加载了数据集或模块时,在系统状态管理中,就可对其查看和编辑: 点击右键,可以对数据集进行删除,修改名称等。也可以将数据集拖拽到下方的图标上,如拖到回收站,即可删除该模块。 双击数据集或模块,可查看模块的内容。 将数据集拖拽到数据清洗( 数据视图的下方第一个图标),可直接对本数据集做数据清洗。 ![QQ截图20160501105734.jpg-14.6kB][10] -##3.网页采集器 -###3.1 原理(建议阅读) +## 3.网页采集器 +### 3.1 原理(建议阅读) 网页采集器的功能是获取网页中的数据(废话)。通常来说,目标可能是列表(如购物车列表),或是一个页面中的固定字段(如JD某商品的价格和介绍,在页面中只有一个)。因此需要设置其读取模式。传统的采集器需要编写正则表达式,但方法过分复杂。如果认识到html是一棵树,只要找到了承载数据的节点即可。XPath就是一种在树中描述路径的语法。指定XPath,就能搜索到树中的节点。 ![QQ截图20160501105743.jpg-20kB][11] @@ -101,7 +101,7 @@ Hawk.Core\Hawk.Core.sln 本算法原理是原创的,可查看源码或留言交流。 -###3.2 基本列表 +### 3.2 基本列表 我们以爬取链家二手房为例,介绍网页采集器的使用。首先双击图标,加载采集器: ![QQ截图20160501121116.jpg-17.2kB][12] @@ -130,13 +130,13 @@ Hawk.Core\Hawk.Core.sln 工作过程中,可点击**提取测试** ,随时查看采集器目前的能够抓取的数据内容。这样,一个链家二手房的网页采集器即可完成。可属性管理器的上方,可以修改采集器的模块名称,这样就方便**数据清洗** 模块调用该采集器。 -##4. 数据清洗 +## 4. 数据清洗 数据清洗模块,包括几十个子模块, 这些子模块包含四类:生成, 转换, 过滤和执行 ![QQ截图20160501121511.jpg-31.3kB][16] -###4.0 原理(可跳过) -####4.0.1 C#版本的解释 +### 4.0 原理(可跳过) +#### 4.0.1 C#版本的解释 数据清洗的本质是动态组装Linq,其数据链为`IEnumerable`。 `IFreeDocument`是 `IDictionary` 接口的扩展。 Linq的Select函数能够对流进行变换,在本例中,就是对字典不同列的操作(增删改),不同的模块定义了一个完整的Linq 流: @@ -144,7 +144,7 @@ Hawk.Core\Hawk.Core.sln result= source.Take(mount).where(d=>module0.func(d)).select(d=>Module1.func(d)).select(d=>Module2.func(d))…. ``` 借助于C#编译器的恩赐, Linq能很方便地支持流式数据,即使是巨型集合(上亿个元素),也能够有效地处理。 -####4.0.2 Python版本的解释 +#### 4.0.2 Python版本的解释 由于Python没有Linq, 因此组装的是生成器(generator), 对生成器进行操作,即可定义出类似Linq的完整链条: ``` for tool in tools: @@ -152,8 +152,8 @@ for tool in tools: ``` 详细源代码,可以参考Github上的开源项目https://github.com/ferventdesert/etlpy/ -###4.1 以链家为例的抓取 -###4.1.1构造url列表 +### 4.1 以链家为例的抓取 +### 4.1.1构造url列表 在3.1节介绍了如何实现一个页面的采集,但如何采集所有二手房数据呢? 这涉及到翻页。 ![QQ截图20160501121520.jpg-3.1kB][17] @@ -179,7 +179,7 @@ http://bj.lianjia.com/ershoufang/pg3/ *(如果需要多个列合并为一个列, 则在“其他项” 栏目中填写其他列的列名,用空格分割, 并在format中用{1},{2}..等表示)* (由于设计的问题,数据查看器的宽度不超过150像素,因此对长文本显示不全,可以在右侧属性对话框点击**查看样例**, 弹出的编辑器可支持拷贝数据和修改列宽。 -###4.1.2 使用配置好的网页采集器 +### 4.1.2 使用配置好的网页采集器 生成这串URL之后,我们即可将刚才已经完成的网页采集器与这串url进行合并。 拖拽**从爬虫转换**到当前的url,双击该模块:将刚才的网页采集器的名称, 填入**爬虫选择** 栏目中。 @@ -201,7 +201,7 @@ where(面积)列中包含数字,想把数字提取出来,可以将**提 有一些列为空,可以拖拽**空对象过滤器** 到该列,那么该列为空的话会自动过滤这一行数据。 -###4.1.4 保存和导出数据 +### 4.1.4 保存和导出数据 需要保存数据时,可以选择写入文件,或者是临时存储(本软件的数据管理器),或是数据库。因此可以将“执行” 模块, 拖入清洗链的后端: 拖**写入数据表**到任意一列, 并填入**新建表名**(如链家二手房) @@ -228,7 +228,7 @@ where(面积)列中包含数字,想把数字提取出来,可以将**提 类似的, 你可以在清洗流程中拖入执行器,则保存的是中间过程,也可以在结尾拖入多个执行器,这样就能同时写入数据库或文件, 从而获得了极大的灵活性。 -###4.1.5 保存任务 +### 4.1.5 保存任务 在右下角的**算法视图**中的任意模块上点击右键,保存任务,即可在任务视图中保存新任务(任务名称与当前模块名字一致),下次可直接加载即可。如果存在同名任务, 则会对原有任务进行覆盖。 在**算法视图**的空白处,点击**保存所有模块**,会批量保存所有的任务。 @@ -236,7 +236,7 @@ where(面积)列中包含数字,想把数字提取出来,可以将**提 你可以将一批任务,保存为一个工程文件(xml),并在之后将其加载和分发。 -##5.总结 +## 5.总结 上文以抓取房地产网站链家为例,介绍了软件的整体使用流程。当然,Hawk功能远远不限于这些。之后我们将通过一系列文章来介绍其使用方法。 值得提醒的是,由于软件功能在不断地升级,可能会出现视频和图片与软件中不一致的情况,因此所有的介绍和功能以软件的实际功能为准。