开源图形爬虫Hawk5,抓取全国二手房和租房数据
最近又要租房了,哪里的性价比更高?买房却不知道全国市场的趋势如何?程序员自有办法,抓取网络的房产交易和租房数据来分析啊!
用Python写起来麻烦,用商业软件速度慢还收费,开源的图形化爬虫Hawk,已经在其任务市场里内置了全国链家和我爱我家的工程任务。一键即可加载市场任务,一键在全国几十个城市之间切换,还能一键导出数据到Excel,txt等各种文本类型,心动了么?
Hawk是一款开源的图从2015年开发至今,已经经历三个版本,但是Hawk5则带来了其历史上最大的一次更新,并提供了社区化的任务市场,多国语言和更强大的调试系统。
本文将手把手地让您通过Hawk无需编程地抓取全部房产数据,并从中了解Hawk的设计思想和原理。如果你已经是Hawk的用户,可以通过本文了解Hawk5的最新功能。
本文面向程序猿同学,一些常识不再介绍。更多的细节可参考使用文档,有包含Hawk方方面面的信息。
GitHub主页:https://github.com/ferventdesert/Hawk
使用文档: https://ferventdesert.github.io/Hawk/
下载地址: https://github.com/ferventdesert/Hawk/releases
启动Hawk
Hawk是绿色软件,下载后双击Hawk.exe直接启动,可能依赖于.Net Framework 4.5,系统提示时可自行下载安装。
启动后,在欢迎页面有三个tab页: 新建任务,任务市场和参数设置。欢迎页面非常重要,能够新建任务,或者浏览相关文档和帮助。
front.gif但本教程不介绍如何设计任务。我们直接使用现有的任务市场。切换到任务市场,Hawk会访问远程git仓库拉取任务列表(这可能需要一些时间)。
稍等片刻Hawk即可将远程任务预览出来。 其中包括教学工程,搜狐新闻等示例。
market.gif左侧选择链家全国地产
,该工程包括了抓取全国的二手房,新房,小区,租房信息,
在左侧工程列表上点击右键加载,即可加载链家的整个任务。(当然也可以在右侧任务列表上加载单个任务,Hawk只会加载它和它依赖的任务列表)。
查看抓取结果
在Hawk主界面右侧是当前的状态,包括三个区域:
- 已加载任务
- 数据管理:可显示生成的或从文件中导出的表
- 工作线程视图:正在执行的任务都会显示在这里
在“已加载任务”中,双击任一栏目(此处我们选择链家在售
),Hawk就会在后台执行实时抓取和计算,并将最终抓取结果预览在当前页面中,默认显示的是北京的二手房信息。如果你希望预览更多条数据,修改下方调试框的采样量,点击刷新即可。
是不是很方便?如何在多个城市间切换?如何将数据导出?不要着急,我们先讲解Hawk是如何工作的。
Hawk是如何工作的?
还是以链家的二手房列表为例,链家的页面:
image.png
每页有30条数据,但一个城市最多只能显示100页。通过拼接URL最多也只能生成3000条数据。但是我们获取每个区县(如东城区,西城区)的地址,再通过每个区县获取其每个区域(如金融街,平安里)的地址和二手房数量,这样每个区域的数量就不超过3000条了,我们利用类目组合绕过100页的抓取限制,进而能获取当前城市全部的信息。
image.pngHawk是通过多个模块组合而成的工作流系统,左侧显示了当前任务所需的所有步骤模块,点击任意步骤,Hawk就会跳到该步并预览结果,双击该模块,就能查看模块的配置。
etl.gif在下方的调试栏中,还可以勾选“调试详情”,通过点击上一步
和下一步
,可单步调试,在下方的调试输出框中会显示当前模块的作用和参数。
如何保存全部数据
刚才是预览模式,为了保存全部数据,我们已经在模块列表的最下方拖入了写入数据表
。其表名填的是链家北京二手房
。
在数据清洗左侧的下方(保持默认参数,串行模式,延时值1000毫秒,否则会被封禁)点击执行即可,Hawk会自动分配线程池,开始抓取信息。
task.gif抓取完毕后(大概需要50分钟),如果你想取消任务,在右下角的“线程管理器”上,在“链家在售串行任务”上点击右键,并点取消即可。
run.gif最后,在导出的数据表上,右键点击另存为
,导出到Excel即可。
获取租房信息?
很简单,点击任务列表中的链家租房
即可。 其他操作和链家二手房
是一致的。
你会发现,几乎所有的任务都依赖于一个“底层通用任务”,它抽象了二手房,租房,小区,新房的公共部分。Hawk使用子任务
实现任务间的互相调用。这样可极大地节省设计所需的时间。
在不同的城市间切换?
沙漠君我不是北京的,我想看其他城市的!
我们回到Hawk首页,点击任务市场
的参数设置。如下图:
左侧展示了当前系统全局的配置, 包括总的web请求数量等,右侧是当前工程的全局设置。 程序猿朋友们都知道,这就是全局参数嘛。我们在参数组选择的下拉菜单中,选择不同的城市,回到之前的数据清洗界面再次刷新,就会发现城市发生变化了!
这就是Hawk的全局参数配置系统,它通过yaml文件描述了一些键值对。在任务中,通过大括号,能够随时引用全局参数中配置的信息。例如,你可以在"底层通用任务"的第一个模块“从文本生成”中看到{city}
,它代表读取全局配置中city的值。
你也想设计这样的任务?
哈哈,我猜到了!Hawk内置了强大的文档系统。每个模块都有详细的使用介绍,并能在新手模式间切换。同时还能够自动生成帮助文档,在任何一个数据清洗的任务中,点击调试工具栏中的“问号”按钮,即可弹出当前任务手把手的教程,你只要按照他的步骤一步步操作即可!
doc.gif除了直接看自动生成的帮助文档。可以阅读Hawk的教程,快速教程中提供了使用的简要说明,帮助你快速上手。而示例教程中,给出了几个经典例子的步骤。
结语
Hawk有太多强大的特性可以去讲,例如强大的手气不错功能和超级模式,但本文旨在介绍Hawk5更新的功能。如果你感兴趣,欢迎给本项目的GitHub点个star,并欢迎持续关注沙漠君的博客。如果你愿意给Hawk做出贡献,欢迎联系我!