SpiderFlow平台v0.5.0内置变量及自定义函数

内置变量

爬取结果

当爬取节点执行后产生类型为HttpResponseresp变量

|------------|----------------------|-------------|
| 字段名称 | 字段类型 | |
| 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调用。

实现上述需求的函数体示例如下:

java 复制代码
  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,传入参数即可看到返回值。

相关推荐
黄智勇33 分钟前
xlsx-handlebars 一个用于处理 XLSX 文件 Handlebars 模板的 Rust 库,支持多平台使
前端
brzhang2 小时前
为什么 OpenAI 不让 LLM 生成 UI?深度解析 OpenAI Apps SDK 背后的新一代交互范式
前端·后端·架构
brzhang2 小时前
OpenAI Apps SDK ,一个好的 App,不是让用户知道它该怎么用,而是让用户自然地知道自己在做什么。
前端·后端·架构
井柏然3 小时前
前端工程化—实战npm包深入理解 external 及实例唯一性
前端·javascript·前端工程化
IT_陈寒4 小时前
Redis 高性能缓存设计:7个核心优化策略让你的QPS提升300%
前端·人工智能·后端
井柏然4 小时前
从 npm 包实战深入理解 external 及实例唯一性
前端·javascript·前端工程化
羊锦磊4 小时前
[ vue 前端框架 ] 基本用法和vue.cli脚手架搭建
前端·vue.js·前端框架
brzhang4 小时前
高通把Arduino买了,你的“小破板”要变“AI核弹”了?
前端·后端·架构
她说..4 小时前
通过git拉取前端项目
java·前端·git·vscode·拉取代码
智能化咨询5 小时前
玩转ClaudeCode:通过Chrome DevTools MCP实现高级调试与反反爬策略
前端·chrome·chrome devtools