.Net开源的超级爬虫Hawk

.Net开源的超级爬虫Hawk

  • 开源协议:未知
  • 操作系统: Windows
  • 开发语言:C#
  • 项目所有者:ferventdesert
  • 收录时间:2017-01-03
  • 分享:
编辑评级
4

项目详细介绍

软件介绍

HAWK是一种数据采集和清洗工具,依据GPL协议开源,能够灵活,有效地采集来自网页,数据库,文件, 并通过可视化地拖拽, 快速地进行生成,过滤,转换等操作。其功能最适合的领域,是爬虫和数据清洗。

1.png

Hawk的含义为“鹰”,能够高效,准确地捕杀猎物。

HAWK使用C# 编写,其前端界面使用WPF开发,支持插件扩展。通过图形化操作,能够快速建立解决方案。

GitHub地址:https://github.com/ferventdesert/Hawk

发行包地址: https://github.com/ferventdesert/Hawk/releases

其Python等价的实现是etlpy:

http://www.cnblogs.com/buptzym/p/5320552.html

笔者专门为其开发的工程文件已公开在GitHub:

https://github.com/ferventdesert/Hawk-Projects

使用时,点击文件,加载工程即可加载。不想编译的话,可执行文件在:

https://github.com/ferventdesert/Hawk/tree/master/Versions

编译路径在: Hawk.Core\Hawk.Core.sln


以获取大众点评的所有北京美食为例,使用本软件可在10分钟内完成配置,在1小时之内自动并行抓取全部内容,并能监视子线程工作情况。而手工编写代码,即使是使用python,一个熟练的程序员也可能需要一天以上:

视频演示,复杂度由小到大:

链家二手房

微信公共平台

大众点评-北京美食

2.界面和组件介绍

2.1 界面介绍

软件采用类似Visual Studio和Eclipse的Dock风格,所有的组件都可以悬停和切换。包括以下核心组件:

3.jpg

  • 左上角区域:主要工作区,可模块管理。

  • 下方: 输出调试信息,和任务管理,监控一项任务完成的百分比。

  • 右上方区域: 属性管理器,能对不同的模块设置属性。

  • 右下方区域: 显示当前已经加载的所有数据表和模块。

2.2 数据管理

能够添加来自不同数据源的连接器, 并对数据进行加载和管理:


222.jpg

在空白处,点击右键,可增加新的连接器。在连接器的数据表上,双击可查看样例,点击右键,可以将数据加载到内存中。也可以选择加载虚拟数据集,此时系统会维护一个虚拟集合, 当上层请求分页数据时, 动态地访问数据库, 从而有效提升性能。

2.3 模块管理

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

11.jpg

之前配置好的模块,可以保存为任务, 双击可加载一个已有任务:

22.jpg

2.4 系统状态管理

当加载了数据集或模块时,在系统状态管理中,就可对其查看和编辑: 点击右键,可以对数据集进行删除,修改名称等。也可以将数据集拖拽到下方的图标上,如拖到回收站,即可删除该模块。 双击数据集或模块,可查看模块的内容。 将数据集拖拽到数据清洗( 数据视图的下方第一个图标),可直接对本数据集做数据清洗。

333.jpg

3.网页采集器

3.1 原理(建议阅读)

网页采集器的功能是获取网页中的数据(废话)。通常来说,目标可能是列表(如购物车列表),或是一个页面中的固定字段(如JD某商品的价格和介绍,在页面中只有一个)。因此需要设置其读取模式。传统的采集器需要编写正则表达式,但方法过分复杂。如果认识到html是一棵树,只要找到了承载数据的节点即可。XPath就是一种在树中描述路径的语法。指定XPath,就能搜索到树中的节点。

5.jpg

手工编写XPath也很复杂,因此软件可以通过关键字,自动检索XPath,提供关键字,软件就会从树中递归搜索包含该数据的叶子节点。因此关键字最好是在页面中独一无二的。

如上图所示,只要提供“北京”和“42”这两个关键字,就能找到parent节点, 进而获取div[0]和div1这两个列表元素。通过div[0]和div1两个节点的比较,我们就能自动发现相同的子节点(name,mount)和不同的节点(北京:上海,37:42)。相同的节点会保存为属性名,不同的节点为属性值。但是,不能提供北京和37,此时,公共节点是div[0], 这不是列表。

软件在不提供关键字的情况下,也能通过html文档的特征,去计算最可能是列表父节点(如图中的parent)的节点,但当网页特别复杂时,猜测可能会出错,所以需要至少提供两个关键字( 属性)。

本算法原理是原创的,可查看源码或留言交流。

3.2 基本列表

我们以爬取链家二手房为例,介绍网页采集器的使用。首先双击图标,加载采集器:

1111.jpg

4. 数据清洗

数据清洗模块,包括几十个子模块, 这些子模块包含四类:生成, 转换, 过滤和执


更多介绍详见:https://github.com/ferventdesert/Hawk

标签:爬虫