Skip to content

2. 一页纸技巧

desert edited this page Apr 29, 2018 · 3 revisions

本文给不想看详细教程的同学使用,仔细阅读,可以让你战斗力爆棚:

1. 界面和交互

  1. 在【模块管理】页面,左侧是【任务管理】,双击图标即可新建和加载已有任务 点击菜单【文件】可加载,保存任务,任务为xml文件。 右侧是【数据管理】,空白处右键可新建连接,连接名上右键可配置,支持本地文件(xls,txt,json),数据库(mongodb,sqlite) 数据库需要连接后才能使用,可勾选【自动连接】.
  2. 软件右下角对应的是【系统状态视图】,左右侧分别是已加载的任务和数据集。 左键查看,右键配置,空白处右键批量管理。 下面的图标可用于删除,拷贝,保存等功能,把任务或数据集拖到图标上试试!
  3. 【网页采集器】用于配置单个网页的抓取规则,【数据清洗】用于打造清洗流程,并调用前者。 复杂任务会创建多个清洗并互相调用。

2. 网页采集器

  1. 上方输入网址,点击刷新,选择工作模式(List列表页,生成多条数据;One详情页,单条数据, NoTransform是原始内容,不做转换)
  2. 网页可在源码模式和浏览器模式下切换,后者仅供参考,不能动态执行js
  3. 点击【手气不错】进入全自动模式,在弹出的结果下选择所需数据,可配置其名称和XPath,点击【刷新】更新
  4. 也可以手工搜索字符,可快速定位元素和XPath,输入名称后手工添加属性。
  5. 点击【提取测试】,可预览检查配置结果。

2.1 高级功能(右侧配置面板)

  1. 右侧【属性配置器】面板,点击【请求详情】,可修改网页编码,代理,cookie和请求方式等
  2. 若是动态页面(ajax),填入搜索字符,点击【自动嗅探】,在弹出的浏览器中翻到对应的关键字,Hawk就能自动捕捉真实请求
  3. 超级模式下,Hawk会将源码中的js,html,json都转成html,更通用但性能较差
  4. 填写【共享源】,本采集器同步共享源的【请求详情】,避免重复设置cookie代理等。
  5. 详情页(One模式)也可以手气不错(Hawk3新功能),搜索所需字段,不需要添加到属性列表,点击【手气不错】试试!
  6. 网页地址也可以是本地文件路径,如D:\target.html, 用其他方法保存网页后,通过Hawk做数据清洗

3. 数据清洗

  1. 左侧是所有模块列表,分为生成,转换,过滤和执行四种类型,可通过名称和拼音首字母快速检索。顺序组合可构成复杂任务。 右侧是数据预览,可将选中的模块拖入到右侧对应列上。 双击每个列上面的模块对其配置。将鼠标放在字段上可查看使用介绍。 预览时,处理是串行的,数据不会被写入,有缓存,调试所见即所得。 只有在执行模式下才会并行快速执行。 执行器可看做带有副作用(如写入文件)的转换器,
  2. 生成器通常位于任务开头,可从文本,文件,数据库读取数据。 多个生成器结果有四种方式组合:Merge:横向合并,Append:纵向拼接, Cross:笛卡尔集 , Mix:依次交叉,如121212..
  3. 一些转换器也有类似网页采集器的工作模式,后者本质上就是个高级的转换器。
  4. 下方菜单栏可点击刷新,前后单步,可通过采样量来修改预览的数据量。配置完毕无误后,右侧面板点击【执行】即可。

3.2 高级功能和提醒

  1. 配置输入列可下拉选择,也可手工输入文本。列名不要为纯数字,否则无法正常显示。
  2. 很多问题来自于模块顺序不对,任何步骤错误,会导致连锁的问题,因此有必要使用单步调试,在调试到某步时,拖入的模块会插入到所在位置。
  3. Python转换器:最后一行必须是可求值的表达式。例如有两列a,b,转换器输出列为c,表达式为a+b,则c列内容就是a+b。但表达式不能写c=a+b
  • Python是强类型语言,输入的数据可能是字符串或数字,因此必要时需要做类型转换
  • 通过填写库路径,可让转换器调用第三方模块。但这一功能支持不好。
  1. 一般在List模式的转换器之前拖入【并行】,可大大提升并行速度。
  2. 可在任务的各个位置拖入多个执行器(如【写入数据表】),它保存的是当前状态的数据。
  3. 子任务:任务可互相调用,功能非常强大,可用于处理多次跳转,详情页还包含列表的问题,比较复杂,需参考相关文档。

3.3 对配置的约定

  • 具体数值,直接填入配置框即可
  • 涉及到输入多个列名,多个分隔符等,都默认用空格分割,例如a b c
  • 当希望从数据清洗中读取其他列的数据到本参数,使用方括号表达式,例如[col]
  • 希望将多个列的数据合并,可使用合并多列
  • 配置子任务的模块范围时:1:100表示从1到100, 2:-2表示从第2个模块到倒数第二个模块,可参考Python的slice写法
  • 配置子任务的字段映射时,可以用a:b c:d表示a列映射到b列,以此类推。

4. 一些忠告

  1. Hawk除了做爬虫,还能做数据清洗,甚至批量执行命令,需要你来挖掘。
  2. Hawk对代理的支持不够(免费的就知足吧),避免过度抓取导致屏蔽。
  3. 记得经常保存任务,尽量将数据写入到数据库而非表里,否则程序可能崩溃难以挽回。
  4. 如果任务出现异常,请截图软件,详细描述,将根目录下的log.dat发给[email protected],我会尽快予以解答。使用问题烦请在GitHub的issue上提问,其他途径可能不会收到回复。
  5. 如果你喜欢Hawk,请star该项目,欢迎给作者打赏,你的鼓励是作者改进软件的最大动力。