《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的spider-flow可以用流程图的方式编写爬虫的平台,无需写代码就可以快速完成一个简单的爬虫。
功能特性
-
• 支持 css 选择器、正则提取
-
• 支持 JSON/XML 格式
-
• 支持 Xpath/JsonPath 提取
-
• 支持多数据源、SQL select/insert/update/delete
-
• 支持爬取 JS 动态渲染的页面
-
• 支持代理
-
• 支持二进制格式
-
• 支持保存/读取文件(csv、xls、jpg 等)
-
• 常用字符串、日期、文件、加解密、随机等函数
-
• 支持流程嵌套
-
• 支持插件扩展(自定义执行器,自定义函数、自定义 Controller、类型扩展等)
-
• 支持 HTTP 接口
安装部署
准备环境
JDK >= 1.8
Mysql >= 5.7
Maven >= 3.0 下载地址:(http://maven.apache.org/download.cgi)
运行项目
-
1. 前往码云下载页面 (https://gitee.com/ssssssss-team/spider-flow) 下载解压到工作目录
-
2. 设置 Eclipse 仓库,菜单
Window->Preferences->Maven->User Settings->User Settings
后边的 Browse,然后导入自己的 Maven 目录的conf
目录下的settings.xml
文件,然后点 Apply,在点 OK -
3. 导入到 Eclipse,菜单
file->Import
,然后选择Maven->Existing Maven Projects
,点击Next>
按钮,选择工作目录,然后点击Finish按钮,即可导入成功 -
4. 导入数据库,基础表:
spider-flow/db/spiderflow.sql
-
5. 打开并运行
org.spiderflow.SpiderApplication.java
-
6. 打开浏览器,输入 http://localhost:8088/
引入插件
-
1. 首先把需要的插件下载到本地并导入到工作空间或安装到maven库
-
2. 在
spider-flow/spider-flow-web/pom.xml
中引入插件
<!-- 以引入mongodb插件为例 -->
<dependency>
<groupId>org.spiderflow</groupId>
<artifactId>spider-flow-mongodb</artifactId>
</dependency>
快速入门
爬取节点
该节点用于请求 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(Bod y项设置为 form-data)
-
• 参数名:请求参数名
-
• 参数值:请求参数值
-
• 参数类型:text/file
-
• 文件名:上传二进制数据时需要填的文件名
-
• raw(Body项设置为 raw)
-
• Content-Type:text/plain,application/json
-
• 内容:请求体内容(String类型)
定义变量 Var
该节点用于定义变量之后,可以与表达式配套使用,实现动态设置各项参数(如动态请求分页地址)
-
• 变量名:变量的名字,当变量名重复时,会覆盖前一个变量
-
• 变量值:变量的值,可以是常量,可以是表达式
输出节点
该节点主要用于调试,测试时会把输出打印到页面中,另外也可以用来自动保存到数据库或文件
-
• 输出到数据库:勾选时需要填写数据源、表名称,且输出项要与列名对应
-
• 输出到 CSV 文件:勾选时需要填写 CSV 文件路径,输出项会作为表头
-
• 输出全部参数:一般用来调试,可以输出所有变量到界面上
-
• 输出项:输出项的名字
-
• 输出值:输出的值,可以是常量,也可以是表达式
循环节点
-
• 次数或集合:当此项有值(值为集合或数字)时,后续节点(包括本节点)会循环执行
-
• 循环变量:默认为 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}#
流程的执行过程
流程实例一
很容易就能看出流程执行过程是:A->B->C->D,但由于A节点是循环,假设A节点循环次数是3,那么此时执行过程会变成A,A,A->B,B,B->C,C,C->D,D,D(3个A一起执行,但是顺序不固定,每执行完一个就会直接流向下一个节点,而不是等3个A都结束),当D,D,D都执行完毕时,由于没有流向下一个节点,此时整个流程结束。
由于B,C,D节点中也可以设置循环,假设C节点也设置了循环,其循环次数是2次,那么此时整个流程的执行过程是A,A,A->B,B,B->C,C,C,C,C,C->D,D,D,D,D,D(即形成了嵌套循环)
流程实例二
-
• 运行顺序:A->B->A,C->B->C
-
• 先执行A节点
-
• A节点执行时,执行B节点
-
• B节点执行完毕时,执行A、C节点
-
• 共计执行2次A,2次B,2次C。
这里会形成递归,即A<->B,但是形成这种情况时,往往都需要加条件进行限制,即上图中的页数 < 3
项目部分截图
—END—
开源地址:https://github.com/ssssssss-team/spider-flow
原文始发于微信公众号(开源技术专栏):高效智能的在线爬虫-spider-flow
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/53758.html