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) 行,列: 在数据表格上的行列 流,子流:一个流代表一组模块构成链条,子流也是流,只不过是被别的流调用的,可以将流理解为函数 模块:构成流中的一个个的组件,分为生成,转换,过滤和执行 原列名: 一个模块的输入,如果有多…
2. 软件界面介绍 1. 基本组件 Hawk采用类似Visual Studio和Eclipse的Dock风格,所有的组件都可以悬停和切换.包括以下核心组件: 左上角区域:主要工作区,任务管理. 下方: 输出调试信息,和任务管理,监控一项任务完成的百分比. 右上方区域: 属性管理器,能对不同的模块设置属性. 右下方区域: 显示当前已经加载的所有数据表和模块. 2. 数据源 能够添加来自不同数据源的连接器, 并对数据进行加载和管理: 在空白处,点击右键,可增加新的连接器.在连接器的数据表上,双击可查…
1.基本入门 1. 原理(建议阅读) 网页采集器的功能是获取网页中的数据(废话).通常来说,目标可能是列表(如购物车列表),或是一个页面中的固定字段(如JD某商品的价格和介绍,在页面中只有一个).因此需要设置其读取模式.传统的采集器需要编写正则表达式,但方法过分复杂. 如果认识到html是一棵树,只要找到了承载数据的节点即可.XPath就是一种在树中描述路径的语法.指定XPath,就能搜索到树中的节点. 有关XPath的详细信息,建议参考网上相关章节. 手工编写XPath也很复杂,因此软件可以通…
本文将讲解通过本软件,获取大众点评的所有美食数据,可选择任一城市,也可以很方便地修改成获取其他生活门类信息的爬虫. 本文将省略原理,一步步地介绍如何在20分钟内完成爬虫的设计,基本不需要编程,还能自动并行抓取. 看完这篇文章,你应该就能举一反三地抓取绝大多数网站的数据了.Hawk是一整套工具,它的能力取决于你的设计和思路.希望你会喜欢它. 详细过程视频可参考:http://v.qq.com/page/z/g/h/z01891n1rgh.html,值得注意的是,由于软件不断升级,因此细节和视频可能…
链家的同学请原谅我,但你们的网站做的真是不错. 1. 设计网页采集器 我们以爬取链家二手房为例,介绍网页采集器的使用.首先双击图标,加载采集器: 在最上方的地址栏中,输入要采集的目标网址,本次是http://bj.lianjia.com/ershoufang/.并点击刷新网页.此时,下方展示的是获取的html文本.原始网站页面如下: 由于软件不知道到底要获取哪些内容,因此需要手工给定几个关键字, 让Hawk搜索关键字, 并获取位置. 以上述页面为例,通过检索820万和51789(单价,每次采集时…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5934 根据距离关系建边 对于强连通分量来说,只需引爆话费最小的炸弹即可引爆整个强连通分量 将所有的强连通分量缩成点,我们就得到了一棵树,我们只需要引爆树根的炸弹即可 我们可以处理出每个点所属的强连通分量的拓扑序,或者说染色法,把属于同一个强连通分量的点标上同一个数字 处理完强连通分量后,我们不需要建树,我们可以用并查集来维护,更好的办法是统计每个点的入度,入读为0即为根节点 #include<bits/…
目标——万方医学网论文列表 http://med.wanfangdata.com.cn/Author/General/A000000001 和普通网页不一样的地方在于点击下一页的时候,URL没有发生变化,不能显眼的看到类似‘page=1’或者‘pge=1’这样的信息. 这就需要我们自己分析网络请求,笔者推荐是汉化更好点的火狐的浏览器——Firefox,右上角的打开菜单下——开发者工具——网络,在chrome浏览器中是更多工具中的开发者工具Network                     …
入门教程(1)--从URL开始 首先感谢辛苦的沙漠君 先把沙漠君的教程载过来:)可以先看一遍 Hawk-数据抓取工具:简明教程 Hawk 数据抓取工具 使用说明(二) 20分钟无编程抓取大众点评17万数据 如果你能完美写出XPath,子流模块也能很好的使用,OK你可以跳过本教程 如果不能,我们丛理解开始讲起. 不知道你有没有使用过其他爬虫,比如pyspider,phantomjs,有些爬虫的思路是通过一个模拟浏览器来模拟点击去访问目标网页, 而我对HAWK的理解是组合出目标URL,去请求网页[难…
1. 调试模式和执行模式 1.1.调试模式 系统能够通过拖拽构造工作流.在编辑流的过程中,处于调试模式,为了保证快速地计算和显示当前结果(只显示前20个数据,可在调试的采样量中修改),此时,所有执行器都不会参与到工作流中,意味着数据库和数据表都不会被写入和更新. (是否记得所有模块分为 生成,转换,过滤和执行四类?) 在调试时,从爬虫转换模块可能会请求web数据,为了提升性能,该模块对请求做了缓存.保证数据只需获取一次,如果想强制刷新数据,将从爬虫转换模块禁用,再启用,原始缓存数据就会被擦除.…
不少朋友反映,Hawk的手气不错,好像没法处理动态页面.其实很容易,比其他软件都容易,让我慢慢道来. 1. 什么是动态页面 很多网站,在刷新的时候会返回页面的全部内容,但实际上只需要更新一部分,这样可大大节约带宽.这种方式一般叫ajax,服务器传递xml或者json到浏览器,浏览器的js代码执行,并将这些数据渲染到页面上. 所以,真正获取数据的url,不一定是你在浏览器上看到的,而且里面会涉及到一些js调用,本质上,js启动了一些新的web请求来获取数据,只要你能模拟这些web请求(我们称之为隐…
软件在发布后,收到了各方朋友的反馈和提问.此处统一对一部分问题作出回复. 感谢你使用Hawk,软件是我写的,坑是我挖的.做爬虫本来就比较复杂,一些公司有专门的程序员做爬虫工程师.因此如果你很沮丧,很有可能是网站做了不少策略,确实很难爬.哎,这也是没有办法的事情. 闲话不说,进入正题. 1.自动嗅探失败 网页采集器具备自动嗅探功能,本质上是替换掉了底层的代理.因此,所有的请求都通过Hawk内部,自然就能根据需求筛选出所需的请求. 但有些系统中安装了类似360等工具,会拒绝这类操作.导致嗅探失败.目…
Hawk在发布之后,收到了不少朋友的感谢和使用反馈,沙漠君表示非常开心.软件肯定有很多的问题和不足,还有很多可扩展的空间,因此我希望更多的朋友,能够参与到改进Hawk的计划中来,为开源世界作出努力. 不少朋友询问一些术语的意思,在下面解释一下: ETL:即数据清洗,包含抽取(E),转换(T)和加载(L) 行,列: 在数据表格上的行列 流,子流:一个流代表一组模块构成链条,子流也是流,只不过是被别的流调用的,可以将流理解为函数 模块:构成流中的一个个的组件,分为生成,转换,过滤和执行 合并多列:将…
1.这是什么鬼? 哦?美女? 最近看了这一篇文章:http://cuiqingcai.com/1001.html 大概说的是用Python和Pyspider(这货好像是我的一位师兄写的,吓尿),抓取淘宝淘女郎的所有美女照片.只是里面还要敲一堆代码,还要用其他动态js运行框架,看着好不烦人啊. Hawk是沙漠君开发的一款爬虫和清洗工具,目前已经在Github开源: https://github.com/ferventdesert/Hawk 最近沙漠君很开心啊,开发的Hawk在GitHub上上百个s…
1. 主角出场:Hawk介绍 Hawk是沙漠之鹰开发的一款数据抓取和清洗工具,目前已经在Github开源.详细介绍可参考:http://www.cnblogs.com/buptzym/p/5454190.html 强烈建议先读这篇文章,该文介绍了详细原理和抓取链家二手房的攻略,以此为基础,才能较好的理解整个操作. GitHub地址:https://github.com/ferventdesert/Hawk 本文将讲解通过本软件,获取大众点评的所有美食数据,可选择任一城市,也可以很方便地修改成获取…
Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16571   Accepted: 6558 Description A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a li…
Tarjan算法 Tarjan算法是基于dfs算法,每一个强连通分量为搜索树中的一颗子树.搜索时,把当前搜索树中的未处理的结点加入一个栈中,回溯时可以判断栈顶到栈中的结点是不是在同一个强连通分量中.当dfn[u]=low[u]时,以u为根的搜索子树上的所有结点是一个强连通分量,其中dfn[]值表示结点的深度优先数,low[]值表示结点可以到达的优先数最小的祖先. Tarjan伪代码如下: Tarjan(u) { dfn[u] = low[u] = ++dep //dfn[]和low[]的初值 S…
The Bottom of a Graph Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 9759 Accepted: 4053 Description We will use the following (standard) definitions from graph theory. Let V be a nonempty and finite set, its elements being called vertice…
tarjan的过程就是dfs过程. 图一般能画成树,树的边有三种类型,树枝边 + 横叉边(两点没有父子关系) + 后向边(两点之间有父子关系): 可以看到只有后向边能构成环,即只有第三张图是强连通分量. 对图dfs一下,遍历所有未遍历过的点 ,会得到一个有向树,显然有向树是没有环的.(注意搜过的点不会再搜) 则能产生环的只有指向已经遍历过的点的边,遍历到的点3指向了之前遍历过的点1形成了环. 比如图2的遍历情况: 首先访问3,然后访问1,没有后向边,然后从栈中删除1,继而访问2(入栈),发现2-…
题目:这里 题意: Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎.你的任务是求出有多少头 牛被所有的牛认为是受欢迎的. Input 第一行两个数N,M. 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可 能出现多个A,B) Output 一个数,即有多少头牛被所有的牛认为是受欢迎的. Samp…
贴题: 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间之里由N个村庄(编号为1..N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记.如果存在由村庄A到达村庄B的通路,那么我们认为可以从村庄A到达村庄B,记为(A,B).当(A,B)和(B,A)同时满足时,我们认为A,B是绝对连通的,记为<A,B>.绝对连通区域是指一…
有向图强连通分量的Tarjan算法 [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components). 下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达.{5},{6}也分别是两个强连通分量. 直接根据定义,用双向遍历取交集的方法求强连通分量,…