目前官网和文档无法正常访问,具体原因尚不明确,敬请参考本文。如果还有其他问题,欢迎随时留言讨论。
以下内容部分来源于官网或官网文档。文章内容较为详尽,请准备好瓜子和小板凳,耐心阅读哦!
spider-flow 是一个基于springboot+layui开发的前后端不分离的爬虫平台,以图形化方式定义爬虫流程,无需代码即可实现一个爬虫。
代码仓库地址: https://gitee.com/ssssssss-team/spider-flow
spiderflow是基于springboot的单体项目,可以采用多种方式实现部署:
Dockerfile
docker-compose
java -jar …
也可以参考官网文档里面的安装部署模块进行部署。
默认端口是8088, 部署完成后访问localhost:8088即可,页面如下图所示:
部署完成后打开页面会看到有4个内置的爬虫示例,随便点开一个我们看下编辑器布局和提供的组件。
该节点用于请求HTTP/HTTPS页面或接口
此图形会返回一个HttpResponse对象,以resp存入变量中
该节点用于定义变量之后,可以与表达式配套使用,实现动态设置各项参数(如动态请求分页地址)
变量名:变量的名字,当变量名重复时,会覆盖前一个变量
变量值:变量的值,可以是常量,可以是表达式
输出节点
该节点主要用于调试,测试时会把输出打印到页面中,另外也可以用来自动保存到数据库或文件
输出到数据库:勾选时需要填写数据源、表名称,且<font color="blue">输出项</font>要与列名对应
输出到CSV文件:勾选时需要填写CSV文件路径,<font color="blue">输出项</font>会作为表头
输出全部参数:一般用来调试,可以输出所有变量到界面上
输出项:输出项的名字
输出值:输出的值,可以是常量,可以是表达式
循环节点
次数或集合:当此项有值(值为集合或数字)时,后续节点(包括本节点)会循环执行
循环变量:默认为item,与for(Object item : collections) 中的item意义相同
循环下标:当循环时,会产生下标(从0开始)以该值存入变量中,与for(int i =0; i < array.length;i++)中的i意义相同
开始位置:从该位置开始循环(从0开始)
结束位置:到该位置结束(-1为最后一项,-2为倒数第二项,以此类推)
使用循环时需注意当有多个循环时会形成嵌套循环,必要时应与等待结束节点配套使用
主要用于与数据库交互(查询/修改/插入/删除等等)
数据源:需要选择配置好的数据源
语句类型:select/selectInt/selectOne/insert/insertofPk/update/delete
SQL: 要执行SQL语句,需要动态注入的参数用##包裹起来如:#${item[index].id}#
该节点执行完毕时会产生rs变量,selectInt/insert/update/delete会返回int类型,select会返回List<Map<String,Object>>,selectOne返回Map<String,Object>,insertofPk返回主键值
爬取结果
当爬取节点执行后产生类型为HttpResponse的resp变量
字段名称 | 字段类型 | 字段描述 | 用法示例 |
---|---|---|---|
html | String | 页面HTML | ${resp.html} |
json | JSONObject/JSONArray | 内容转json结果 | ${resp.json} |
bytes | byte[] | 二进制结果 | ${resp.bytes} |
cookies | Map<String,String> | cookies | ${resp.cookies} |
headers | Map<String,String> | headers | ${resp.headers} |
statusCode | int | HTTP状态码 | ${resp.statusCode} |
url | String | 当前页面的URL | ${resp.url} |
title | String | 当前页面的标题 | ${resp.title} |
stream | InputStream | 二进制流(可用于下载) | ${resp.stream} |
当节点发生异常时,会产生ex变量,需要注意的是,ex变量不会向下传递
执行sql后产生变量rs
本项目中表达式引擎也支持模板的方式,例如动态拼接url
https://www.xxx.com/${path}/q?=keyword=${keyword}
模板语言支持大多数Java运算符。这些运算符的优先级也与Java中的相同。
byte ${123b}
short ${123s}
int ${123}
long ${123l}
float ${123f}
double ${123d}
string ${'hello'}
string ${"hello"}
同时也支持定义Map和List
${{key : "value"}}
${[1,2,3,4,5]}
${{$key : "value"}}//$key表示动态从变量中获取key值
您可以通过一元运算-符将数字取反,例如${-234}。要取反布尔表达式,可以使用!运算符,例如${!true}。
支持常见的算术运算符,例如${1 + 2 * 3 / 4 % 2}
${23 < 34}`,`${23 <= 34}`,`${23 > 34}`,`${23 >= 34}`,`${ true != false }`,`${23 == 34}
比较运算符结果为boolean类型
除了一元运算!符,您还可以使用&&和||。就像Java中一样,运算符也是一种短路运算符。如果&&左边计算为false,则不会计算右边。如果||左侧为true,则不会计算右边
三元运算符是if语句的简写形式,其工作方式类似于Java中,例如${true ? "yes" : "no"}
${var}
通过${变量名}调用
${extract.xpath(resp.html,'//div[@id=abc]').regx('/\\d/').toInt()}
通过${变量.方法名(参数1,参数2,....)}进行调用
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。