Hawk-and-Chicken】的更多相关文章

本文写于圣诞节北京下午慵懒的午后.本文偏技术向,不过应该大部分人能看懂. 五年之痒 2016年,能记入个人年终总结的事情没几件,其中一个便是开源了Hawk.我花不少时间优化和推广它,得到的评价还算比较正面,因为负面评价也没什么渠道进我耳朵. 不过你知道我写这个东西花了多久吗? 掐头去尾,这是第五个年头了. 读研究生伊始,实验室开始做数据挖掘,但我发现大家做研究,都是一段段的代码,遇到新问题,就不得不再拷贝一份修改,很少想过复用.于是我便花了一年的时间,开发了一款现在看起来配色丧心病狂的"数据挖掘…
沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇小软文,推出了Hawk.关注的人超级多有木有! Github上的小星星一下子增加到400!超多妹子在沙漠君的粉丝应援团里疯狂崇拜!然而这不是重点!重点是Hawk真的好多"小"问题... 有朋友哭诉,刚启动小鹰它就冒烟了,还是烤肉味的!好不容易把小虫虫做好,碰了一下显示器,结果小虫虫就扑街了…
本页面您可以通过关键字搜索来获取信息. 理性使用爬虫 爬虫是一种灰色的应用,虽然作为Hawk的设计者,但我依然不得不这么说. 各大网站都在收集和整理数据上花费了大量的精力,因此抓取的数据应当仅仅作为科学研究使用.作者对Hawk的使用者的行为,不承担任何连带责任. 建议您理性使用爬虫,在不影响网站正常运营的情况下抓取数据.Hawk的好处是,较大地降低了爬虫的开发成本,能让普通用户也能使用.在这一理念下,我们仅仅提供最为实用的功能,而更多高级的功能则不会提供.比如代理切换和验证码识别. 在并行模式下…
Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以编译. 需要安装.Net Framework 4.5 和.NET Framework 4.0 没有其他依赖项. 可能出现的编译问题 虽然在GitHub上是最新的代码,最新代码是可以成功编译的.但不能保证用户是否clone的是早期版本的代码,因此此处罗列可能的编译错误. 因为工程Hawk.csproj…
除了一般的数据库导入导出,Hawk还支持从文件导入和导出,支持的文件类型包括: Excel CSV(逗号分割文本文件) TXT (制表符分割文本文件) Json xml Excel 目前来看,Excel使用最多,但导出到Excel有严重的性能问题, 受限于NPOI库,数据在几万条之后,会越导越慢.笔者也在积极寻找解决策略. Excel本身对大数据量的支持也比较一般,在2013以上版本有所改善,早期版本在打开几万量级的表都非常慢. CSV和TXT 注意编码格式的问题,同时还一定要留意文本中本身包含…
Hawk在设计之初,就是以弱schema风格定义的.没有严格的列名和列属性.用C#这样的静态强类型语言编写Hawk,其实并不方便.但弱schema让Hawk变得更灵活更强大. 因此,Hawk虽然之前支持各种数据库连接器,而目前只支持MongoDB这样的文档型数据库.之所以不支持传统SQL,是因为获取的数据可能并不满足这些SQL数据库的约束:如列的顺序,列的字段类型,是否为空...很容易导致插入失败.使用Hawk的一般不是程序员,我不想给普通人挖这样的坑. 当然,从各类SQL数据库中读入数据也是可…
并行化 Hawk支持单机并行化,也就是使用多线程获取数据.它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务. 你可以在数据清洗的 执行面板中,选择串行和并行模式: 在调试模式下,所有获取都是串行的.而执行模式下,执行器才会执行.为了更好地理解并行化,强烈建议阅读下面的内容. 最简单的并行化 我们以抓取某个网站的100个页面为例,第一个模块生成区间数,可以生成1-100的页面,自然地,就可以创建100个任务,分别抓取了. Hawk在默认…
执行器是负责将Hawk的结果传送到外部环境的工具.你可以写入数据表,数据库,甚至执行某个特定的动作,或是生成文件等等. 在调试模式下,执行器都是不工作的.这是为了避免产生副作用.否则,每刷新一遍数据,就会向数据库中写入,这显然是不可接受的. 写入数据库 不需要列名,选择所需的数据库连接器,填写表名,设置工作模式即可. 写入数据表 不需要列名,填写要插入的数据表的名称即可. 保存超链接文件 拖入的列为文件的超链接地址 保存位置:可以使用方括号表达式,将某一列的内容传递过来 这特别适合抓取网页中的图…
转换器是最为常用的一种类型,当然它的使用也是最复杂的. 转换器有三种子类型: A:单文档->单文档:例如仅将某一列的字符提取出来 B:单文档->多文档:典型的如从爬虫转换,每一行url都可能生成20个甚至更多的文档 C:多文档->单文档:很少见,需要时再进行介绍 如果你熟悉ODPS,A模式其实是UDF,B模式是UDAF. 绝大多数转换器都是A类型.但同一个转换器在不同的配置下,可能会有多种行为,例如从爬虫转换,如果选择的网页采集器为One(单文档)模式,则该转换器为A模式,若为List模…
数据清洗模块,包括几十个子模块, 这些子模块包含四类:生成, 转换, 过滤和执行. 数据清洗可以通过组合多个不同的子模块,生成多样的功能,通过拖拽构造出一个工作流,它能够产生一个有限或无限的文档序列.比如下面: 基本概念: ETL:即数据清洗,包含抽取(E),转换(T)和加载(L) 行,列: 在数据表格上的行列 流,子流:一个流代表一组模块构成链条,子流也是流,只不过是被别的流调用的,可以将流理解为函数 模块:构成流中的一个个的组件,分为生成,转换,过滤和执行 原列名: 一个模块的输入,如果有多…