spider-flow/document.md
2019-07-24 15:05:38 +08:00

140 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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