2019-07-22 10:43:31 +08:00
|
|
|
|
# spider-flow使用说明
|
|
|
|
|
|
|
|
|
|
#### 启动
|
2019-07-22 11:03:48 +08:00
|
|
|
|
- 本项目为SpringBoot项目,运行SpiderApplication类,访问[http://localhost:8088/](http://localhost:8088/)即可
|
2019-07-22 10:43:31 +08:00
|
|
|
|
|
2019-07-22 15:33:40 +08:00
|
|
|
|
#### 演示站点
|
|
|
|
|
[点击跳转](http://39.105.125.219:8088/)
|
|
|
|
|
> 服务器配置较低,如有卡顿请谅解
|
|
|
|
|
|
2019-07-22 10:43:31 +08:00
|
|
|
|
#### 图形说明
|
|
|
|
|
| 图形 | 图形说明 |
|
|
|
|
|
| ----- | --- |
|
|
|
|
|
| 正方形 | 抓取页面 |
|
|
|
|
|
| 平行四边形 | 定义变量 |
|
|
|
|
|
| 双边矩形 | 输出(主要用于测试输出至页面表格) |
|
|
|
|
|
| 圆柱 | 定义数据源 |
|
|
|
|
|
| 双正方形 | 执行SQL |
|
|
|
|
|
| 箭头 | 流转方向 |
|
|
|
|
|
|
|
|
|
|
#### 抓取页面
|
|
|
|
|
- 循环变量:用来定义循环变量,主要目的是抓取多个同类URL,如:projectIndex
|
|
|
|
|
- 循环次数:定义循环次数,可使用${}从变量中获取值(FreeMarker语法),如:10
|
|
|
|
|
- 起始URL:抓取地址,可使用${}从变量中获取值(FreeMarker语法)如:https://gitee.com/${projectUrls[projectIndex]}
|
|
|
|
|
- 请求方法:GET、POST
|
|
|
|
|
- 请求参数:用来设置请求参数,可添加多个,参数值处可使用${}来获取值
|
|
|
|
|
- 请求header:用来设置请求header,可添加多个,header值处可使用${}来获取值
|
2019-07-24 15:05:38 +08:00
|
|
|
|
- 代理:host:port
|
2019-07-22 10:43:31 +08:00
|
|
|
|
|
|
|
|
|
#### 定义变量
|
|
|
|
|
- 变量名:定义变量名称
|
2019-07-22 11:00:59 +08:00
|
|
|
|
- 变量值:```可使用${}从变量中获取值(FreeMarker语法)如:${selectors(resp.html,'.categorical-project-card a','attr','href')}```
|
2019-07-22 10:43:31 +08:00
|
|
|
|
|
|
|
|
|
#### 定义数据源
|
|
|
|
|
- 数据库类型,目前仅支持Mysql(其它驱动未引入至项目中)
|
|
|
|
|
- 数据库连接,如:jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
|
|
|
|
|
- 用户名,如:root
|
|
|
|
|
- 密码,如:123456
|
|
|
|
|
> 需要注意的是,此处不支持${}语法
|
|
|
|
|
|
|
|
|
|
#### 输出
|
|
|
|
|
- 输出项,该值为页面中显示表格的列名
|
|
|
|
|
- 输出值,该值为页面中显示表格单元格值,语法同样支持${}
|
|
|
|
|
|
|
|
|
|
#### 执行SQL
|
|
|
|
|
- 数据源,选择之前定义好的数据源
|
|
|
|
|
- 语句类型,select/insert/update/delete
|
2019-07-22 11:00:59 +08:00
|
|
|
|
- SQL语句,如```INSERT INTO gitee_gvp(project_name, project_link,project_desc) VALUES (#${projectNames[projectIndex]}#,#${projectUrls[projectIndex]}#,#${projectDesc}#)```
|
2019-07-22 10:43:31 +08:00
|
|
|
|
> 需要注意的是,SQL语句不支持${}语法,但是参数是支持的,另外参数需要用##包起来
|
|
|
|
|
|
|
|
|
|
#### 箭头
|
|
|
|
|
- 条件,每个箭头都可以添加条件,当条件成立时,才流向所指向的节点,不写即不判断,直接流向下一个节点
|
|
|
|
|
|
|
|
|
|
#### 内置变量
|
|
|
|
|
| 变量名称 | 变量值 |
|
|
|
|
|
| -------- | ------ |
|
|
|
|
|
| resp | HttpResponse对象|
|
|
|
|
|
| rs | SQL执行结果,类型:int或List<Map<String,Object>> |
|
|
|
|
|
|
|
|
|
|
#### HttpResponse对象
|
|
|
|
|
| 字段名称 | 字段类型 | 字段描述 |
|
|
|
|
|
| -------- | -------- | -------- |
|
|
|
|
|
| html | String | 页面HTML |
|
|
|
|
|
| json | JSONObject/JSONArray | 内容转json结果 |
|
2019-07-22 11:02:22 +08:00
|
|
|
|
| bytes | byte[] | 二进制结果 |
|
2019-07-22 10:43:31 +08:00
|
|
|
|
| cookies | Map<String,String> | cookies |
|
|
|
|
|
| headers | Map<String,String> | headers |
|
|
|
|
|
| statusCode | int | HTTP状态码 |
|
|
|
|
|
|
2019-07-22 10:53:46 +08:00
|
|
|
|
#### 内置方法
|
|
|
|
|
- selector
|
|
|
|
|
- selectors
|
|
|
|
|
- xpath
|
|
|
|
|
- xpaths
|
|
|
|
|
- regx
|
|
|
|
|
- regxs
|
|
|
|
|
- jsonpath
|
|
|
|
|
|
|
|
|
|
#### selector/selectors
|
|
|
|
|
| 参数一 | 参数二 | 参数三 | 参数四 |
|
|
|
|
|
| ------ | ------ | ------ | ------ |
|
|
|
|
|
| html | css选择器 | text/attr/outerhtml | attrName |
|
|
|
|
|
- 获取a标签
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${selectors(resp.html,'a')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
- 获取a标签的text
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${selectors(resp.html,'a','text')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
- 获取a标签的outerhtml
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${selectors(resp.html,'a','outerhtml')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
- 获取a标签的href
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${selectors(resp.html,'a','attr','href')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
|
|
|
|
|
> selector返回的是String,selectors返回的是List<String>
|
|
|
|
|
|
|
|
|
|
#### xpath/xpaths
|
|
|
|
|
|
|
|
|
|
| 参数一 | 参数二 |
|
|
|
|
|
| ------ | ------ |
|
|
|
|
|
| html | xpath |
|
|
|
|
|
|
|
|
|
|
- 获取a标签
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${xpaths(resp.html,'//a')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
- 获取a标签的href属性
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${xpaths(resp.html,'//a/@href')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
|
|
|
|
|
> xpath返回的是String,xpaths返回的是List<String>
|
|
|
|
|
|
|
|
|
|
#### jsonpath
|
|
|
|
|
|
|
|
|
|
| 参数一 | 参数二 |
|
|
|
|
|
| ------ | ------ |
|
|
|
|
|
| object | jsonpath |
|
|
|
|
|
|
|
|
|
|
- 获取 **{"code" : 1}** 中code的值
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${jsonpath(resp.json,'$.code')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
|
|
|
|
|
#### regx/regxs
|
|
|
|
|
|
|
|
|
|
| 参数一 | 参数二 |
|
|
|
|
|
| ------ | ------ |
|
|
|
|
|
| String | regx |
|
|
|
|
|
|
|
|
|
|
- 获取页面标题
|
2019-07-22 10:59:23 +08:00
|
|
|
|
```javascript
|
|
|
|
|
${regxs(resp.html,'<title>(.*?)</title>')}
|
|
|
|
|
```
|
2019-07-22 10:53:46 +08:00
|
|
|
|
> regx返回的是String,regxs返回的是List<String>
|