SpiderFlow平台v0.5.0内置变量及自定义函数
内置变量
爬取结果
当爬取节点执行后产生类型为HttpResponse
的resp
变量
字段名称 | 字段类型 | |
html | String | 页面HTML |
json | JSONObject/JSONArray | 内容转json结果 |
bytes | byte[] | 二进制结果 |
cookies | Map<String,String> | cookies |
headers | Map<String,String> | headers |
statusCode | int | HTTP状态码 |
url | String | 当前页面的URL |
title | String | 当前页面的标题 |
stream | InputStream | 二进制流(可用于下载) |
异常信息
当节点发生异常时,会产生ex变量,需要注意的是,ex变量不会向下传递
sql执行结果
执行sql后产生此变量rs
- 当是select语句时,类型为
List<Map<String,Object>>
- 当是selectInt语句时,变量类型为
int
- 当是selectOne语句时,变量类型为
Map<String,Object>
- 当是insert/update/delete语句时,变量类型为
int
- 当是insertofpk语句时,返回的是主键,变量类型为
int
自定义函数
自定义函数介绍
在开发爬虫的过程中,发现无法使用现有函数完成想要的功能,也不想在java中开发,此时就可以考虑使用自定义函数,自定义函数的语法是JS(Java Nashorn引擎)
定义自定义函数
使用自定义函数
- 在表达式中使用,
${add(1,2)}
自定义函数的使用
示例: 使用自定义函数实现风力等级转换
这里还是使用实例来说明,假设我们有这样一个需求,根据我们抓取到的风速数据(单位m/s)转换成风力等级,每个等级对应一个区间,使用自定义函数实现结果的输出。
先看下自定义函数界面结构,如下图:
函数名称、参数、函数体。这里的函数体使用js语法,支持function调用。
实现上述需求的函数体示例如下:
if(!wind_speed){
return '--'
}
//如果带有单位,先替换再处理, 也可以使用其他方式取出数值
if(wind_speed.indexOf('m/s')!==-1){
wind_speed = wind_speed.replace('m/s', '')
wind_speed = parseFloat(wind_speed)
}
if (wind_speed < 1.5) {
return 1
}
if (wind_speed < 3.3) {
return 2
}
if (wind_speed < 5.4) {
return 3
}
if (wind_speed < 7.9) {
return 4
}
if (wind_speed < 10.7) {
return 5
}
// ... 省略其他判断和返回逻辑
return 'unknow level'
以上函数,假设名称为convert_wind_level, 入参为风速wind_speed,可以为数字或者带有m/s的字符串。
验证
新建爬虫,使用convert_wind_level,传入参数即可看到返回值。