常用
从爬虫转换(CrawlerTF)
使用 网页采集器 获取网页数据,拖入的列需要为超链接
一般的get请求
一般情况下, 将从爬虫转换拖入到对应的URL列中,通过下拉菜单选择要调用的爬虫名称,即可完成所有的配置:
本模块是沟通网页采集器和数据清洗的桥梁。本质上说,网页采集器是针对获取网页而特别定制的数据清洗模块
。
你需要填写爬虫选择
,告诉它要调用哪个采集器。注意:
- 早期版本的Hawk,会默认选择在
算法模块
的第一个网页采集器,但实践证明这样会导致问题,后来就取消了功能。
实现post请求
web请求中,有两种主要的请求类型:post和get。 使用POST能支持传输更多的数据。更多的细节,可以参考http协议的相关文档,网上汗牛充栋,这里就不多说了。
post请求时,Hawk要给服务器需要传递两个参数:url 和post。一般来说,在执行post请求时,url是稳定的,post值是动态改变的。
首先要配置调用的网页采集器为post
模式(打开网页采集器,请求详情,模式->下拉菜单)。
之后,需要将从爬虫转换
拖到要调用的url列上。如果没有url列,可以通过添加新列
,生成要访问的url列。
之后,我们要将post数据传递到网页采集器中。你总是可以通过合并多列
拼接或各种手段,生成要Post的数据列。之后,可以在从爬虫转换
中的post数据
中,填写[post列]
, 而post列
就是包含post数据的列名。 注意:
- Hawk使用方括号语法,来引用其他列的值作为当前的参数
Post数据(PostData):
- 类型:String
- 没有描述
代理配置(Proxy):
- 类型:String
- 没有描述
爬虫选择(CrawlerSelector):
- 类型:可编辑选项
- 填写采集器或模块的名称
分页(SplitPageTF)
根据总页数和每页数量进行分页操作,拖入列为总页数。 相比于使用Python转换器,可极大地简化操作。注意:
- 早期版本的Hawk中,若希望对网页进行分页,需要拖入多个模块才能实现,非常繁琐。
- 本模块在输入数量数,每页数量和起始值之后,即可自动创建步进整数。
- 例如总数量270, 每页数量为20,起始值为1,则生成的列为1,2,3..14
最小值(MinValue):
- 类型:String 默认值:1
- 除了直接填写数值,还可通过方括号表达式从其他列传入
每页数量(ItemPerPage):
- 类型:String 默认值:1
- 除了直接填写数值,还可通过方括号表达式从其他列传入
转换为Json(JsonTF)
从字符串转换为json(数组或字典类型)
当输入字符串是Json时,可以通过Json转换器将文本转换为Json。其工作模式和Python转换器一样,此处不赘述。
json转换器的转换结果,实际上是一个动态类型的python对象。例如如下json:
{
'key':[{}{}{}]
'value':
{
'key1':value
'key2':value
}
}
拖入json转换器到该列,如果工作模式是不进行转换
,则你可以在转换结果列,拖入Python转换器
,脚本内容填写data[key]
,工作模式选择转换为列表
,则key中的数组自动会被提取出来。
注意事项:
- python和json转换器配合使用,能够解决一大类ajax网页的问题。更详细的内容,可参考
- 网页的json格式并不标准,此时需要通过其他工具,对字符串进行预处理,方可转换为json。
- 如果json非常复杂,是不建议直接用Hawk做数据清洗的,正确的做法是将json保存成文本,之后用其他工具或手工编写代码后处理。
工作模式(ScriptWorkMode):
- 类型:ScriptWorkMode 默认值:NoTransform *
多文档
生成多条数据(文档)
单文档
单文档
不进行转换
延时(DelayTF)
在工作流中插入延时,可休眠固定长度避免爬虫被封禁,单位为ms
在不同的位置插入延时有不同的行为,例如在模块A之前插入延时,则A模块每次执行前都会延时固定长度。
除了拖入延时,在串行模式
下填入延时时间,则会在每个web请求前插入指定的延时,更加方便。
延时值(DelayTime):
- 类型:String
- 单位为毫秒,也可使用方括号语法,例如[a]表示从a列中读取延时长度
子任务-执行(EtlEX)
调用其他任务,作为执行器,一般位于任务的末尾。
子任务是Hawk中高级但却非常重要的功能,可以实现例如多级跳转,采集详情页等等的功能,非常强大。
所谓子任务
,就是能先构造出一个任务,然后被其他任务调用。被调用的任务就是子任务。我们应该能够了解子任务其实就是函数,可以定义输入列和输出列,把整个子任务看成一个模块,从而方便重用。
使用子任务-执行的例子: 先设计构造获取某个页面全部图片的任务, 并创建主任务,在主任务中调用刚才创建的子任务。
添加到任务(AddTask):
- 类型:Boolean 默认值:False
- 勾选后,本子任务会添加到任务管理器中
子任务-选择(ETLSelector):
- 类型:可编辑选项
- 输入或选择调用的子任务的名称
调用范围(ETLRange):
- 类型:String
- 设定调用子任务的模块范围,例如2:30表示被调用任务的第2个到第30个子模块将会启用,其他模块忽略,2:-1表示从第2个到倒数第二个启用,符合python的slice语法,为空则默认全部调用
属性映射(MappingSet):
- 类型:String
- 源属性:目标属性列 多个映射中间用空格分割,例如A:B C:D, 表示主任务中的A,B属性列会以C,D的名称传递到子任务中