首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >可视化爬虫框架spiderflow入门及实战

可视化爬虫框架spiderflow入门及实战

原创
作者头像
菜菜有点菜
发布2025-01-26 12:59:18
发布2025-01-26 12:59:18
1.6K0
举报

说明

目前官网和文档无法正常访问,具体原因尚不明确,敬请参考本文。如果还有其他问题,欢迎随时留言讨论。

以下内容部分来源于官网或官网文档。文章内容较为详尽,请准备好瓜子和小板凳,耐心阅读哦!

介绍

spider-flow 是一个基于springboot+layui开发的前后端不分离的爬虫平台,以图形化方式定义爬虫流程,无需代码即可实现一个爬虫。

特性

  • 支持css选择器、正则提取
  • 支持JSON/XML格式
  • 支持Xpath/JsonPath提取
  • 支持多数据源、SQL select/insert/update/delete
  • 支持爬取JS动态渲染的页面
  • 支持代理
  • 支持二进制格式
  • 支持保存/读取文件(csv、xls、jpg等)
  • 常用字符串、日期、文件、加解密、随机等函数
  • 支持流程嵌套
  • 支持插件扩展(自定义执行器,自定义函数、自定义Controller、类型扩展等)
  • 支持HTTP接口
  • 支持数据源配置
  • 支持任务的定时执行

插件

  • redis插件
  • mongodb插件
  • IP代理池插件
  • OSS插件
  • OCR插件
  • Selenium插件

平台部署

代码仓库地址: https://gitee.com/ssssssss-team/spider-flow

部署及验证

spiderflow是基于springboot的单体项目,可以采用多种方式实现部署:

Dockerfile

docker-compose

java -jar …

也可以参考官网文档里面的安装部署模块进行部署。

默认端口是8088, 部署完成后访问localhost:8088即可,页面如下图所示:

编辑器组件介绍及常用语法

部署完成后打开页面会看到有4个内置的爬虫示例,随便点开一个我们看下编辑器布局和提供的组件。

组件介绍

爬取节点

该节点用于请求HTTP/HTTPS页面或接口

  • 请求方法:GET、POST、PUT、DELETE等方法
  • URL: 请求地址
  • 延迟时间:单位是毫秒,意思是爬取之前延迟一段时间在执行抓取
  • 超时时间:网络请求的超时时间,单位也是毫秒
  • 代理:请求时设置的代理,格式为host:port 如 192.168.1.26:8888
  • 编码格式:用来设置页面的编码格式默认为UTF-8,当解析出现乱码时,可以修改此值
  • 跟随重定向:默认是跟随30x重定向,当不需要此功能时,可以取消勾选
  • TLS证书验证:此项默认是勾选的,当出现证书一类的异常可以取消勾选此项尝试
  • 自动管理Cookie:请求时自动设置Cookie(自己手动设置的与之前请求的Cookie都会设置进去)
  • 自动去重:勾选时会对url进行去重处理,如果重复则跳过。
  • 重试次数:当请求发生异常或状态码不为200时会进行重试
  • 重试间隔:重试期间的间隔时间(单位为毫秒)
  • 参数:用来设置GET、POST等方法的参数设置
  • 参数名:参数key值
  • 参数值:参数value值
  • 参数描述:仅仅用来描述该项参数(相当于备注/注释)无实际意义
  • Cookie:用来设置请求Cookie
  • Cookie名:Cookie key值
  • Cookie值:Cookie value值
  • 描述:仅仅用来描述该项Cookie(相当于备注/注释)无实际意义
  • Header:用来设置请求头
  • Header名:Header key值
  • Header值:Header value值
  • 描述:仅仅用来描述该项Header(相当于备注/注释)无实际意义
  • Body:请求类型(默认是none)
  • form-data(Body项设置为form-data)
  • 参数名:请求参数名
  • 参数值:请求参数值
  • 参数类型:text/file
  • 文件名:上传二进制数据时需要填的文件名
  • raw(Body项设置为raw)
  • Content-Type:text/plain,application/json
  • 内容:请求体内容(String类型)

此图形会返回一个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为倒数第二项,以此类推)

使用循环时需注意当有多个循环时会形成嵌套循环,必要时应与等待结束节点配套使用

执行SQL

主要用于与数据库交互(查询/修改/插入/删除等等)

数据源:需要选择配置好的数据源

语句类型: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执行结果

执行sql后产生变量rs

  • 当是select语句时,类型为List<Map<String,Object>>
  • 当是selectInt语句时,变量类型为int
  • 当是selectOne语句时,变量类型为Map<String,Object>
  • 当是insert/update/delete语句时,变量类型为int
  • 当是insertofpk语句时,返回的是主键,变量类型为int

基本用法

本项目中表达式引擎也支持模板的方式,例如动态拼接url

代码语言:txt
复制
https://www.xxx.com/${path}/q?=keyword=${keyword}

运算符

模板语言支持大多数Java运算符。这些运算符的优先级也与Java中的相同。

代码语言:txt
复制
byte ${123b}
short ${123s}
int ${123}
long ${123l}
float ${123f}
double ${123d}
string ${'hello'}
string ${"hello"}

同时也支持定义Map和List

代码语言:txt
复制
${{key : "value"}}
${[1,2,3,4,5]}
${{$key : "value"}}//$key表示动态从变量中获取key值

一元运算符

您可以通过一元运算-符将数字取反,例如${-234}。要取反布尔表达式,可以使用!运算符,例如${!true}。

算术运算符

支持常见的算术运算符,例如${1 + 2 * 3 / 4 % 2}

比较运算符

代码语言:txt
复制
${23 < 34}`,`${23 <= 34}`,`${23 > 34}`,`${23 >= 34}`,`${ true != false }`,`${23 == 34}

比较运算符结果为boolean类型

逻辑运算符

除了一元运算!符,您还可以使用&&和||。就像Java中一样,运算符也是一种短路运算符。如果&&左边计算为false,则不会计算右边。如果||左侧为true,则不会计算右边

三元运算符

三元运算符是if语句的简写形式,其工作方式类似于Java中,例如${true ? "yes" : "no"}

变量

代码语言:txt
复制
${var}

通过${变量名}调用

调用方法

代码语言:txt
复制
${extract.xpath(resp.html,'//div[@id=abc]').regx('/\\d/').toInt()}

通过${变量.方法名(参数1,参数2,....)}进行调用

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 介绍
  • 特性
  • 插件
  • 平台部署
    • 部署及验证
  • 编辑器组件介绍及常用语法
  • 组件介绍
    • 爬取节点
    • 定义变量
    • 执行SQL
    • 内置变量
    • 异常信息
    • sql执行结果
  • 基本用法
    • 运算符
    • 一元运算符
    • 算术运算符
    • 比较运算符
    • 逻辑运算符
    • 三元运算符
    • 变量
    • 调用方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档