# 规则定义
风铃虫是根据风铃虫规则运行的,风铃虫会根据风铃虫规则动态生成各种需要的组件,然后运行这些组件浏览网页,提取数据。可以说,风铃虫是运行在风铃虫规则之上的,一个良好的风铃虫规则不仅能提高效率,还能做到事半功倍的效果。
构造过程请参见 快速启动
一个完整的 风铃虫规则定义 如 风铃虫规则定义示例 所示,它由以下几个部分组成
- 基本规则
- 站点规则
- 链接解析规则
- 内容解析规则
- 内容提取规则
这些规则的详细含义与作用说明如下所示:
# 基本规则
基本规则主要是定义了风铃虫的基本全局属性。
具体定义如下:
//解析时线程数,内容解析时使用到的线程数,默认值为1
"threadNum": 解析时线程数,
//默认为300000毫秒(300秒),连续间隔多长时间后没有新的请求任务表明此任务已经结束
"waitTime": 超时等待时间,单位为毫秒,
//默认为10000 毫秒(10秒),请求间隔时间为0到该值得两倍之间的一个随机数
"interval": 请求的最大间隔时间,单位为毫秒,
基本定义包含以下几条规则
- 请求的间隔时间
- 超时等待时间
- 解析时线程数
# 请求的间隔时间
配置代码: interval
每次请求的平均间隔时间 ,单位为毫秒,默认为10000毫秒(10秒),实际运行时每次请求的间隔时间为0到改值得两倍之间的一个随机数。
作用:风铃虫在同一个实例中,每次发出网络请求之后都会间隔一段时间后再次发出下一个请求,以免因频繁请求对目标服务器造成压力,从而导致服务器封杀
# 超时等待时间
配置代码: waitTime
超时等待时间 ,单位为毫秒,默认为300000毫秒(300秒)。
作用:风铃虫实例在连续一段时间没有接收到新的任务请求,且此连续时间超过该超时等待时间时风铃虫会自动停止该实例的运行,以节省用户资源。
# 解析时线程数
配置代码: threadNum
在解析网页内容时使用到线程数 ,默认值为运行机器的内核数
作用: 风铃虫在解析网页下载器下载的网页资源时是使用多线程解析的,解析时使用到的线程数由该参数决定。
# 站点规则
风铃虫根据站点规则以及请求URL生成对应的请求任务
站点规则信息定义了风铃虫实例在每次发出网络请求时需要携带的请求头和cookie等信息,以及设置服务器封杀检验功能。主要包含以下几个参数
- 浏览器标志
- 来源参考页
- 网页缓存策略
- 请求cookie值
- 失败重试次数
- 封杀标志
- 封杀阀域值
- 自动重定向
- 最大重定向数
- 超时时间
- 压缩请求内容
- 请求头信息
具体定义如下:
"site": {
//浏览器标志,默认值为空,表示系统从众多内置标识符中随机选择一个
"userAgent": ""
//来源参考页,默认为空,表示系统设置为当前请求的网页值
"referrer": "",
//确定连接建立之前的超时时间(以毫秒为单位),默认为30秒
"connectTimeout": 0,
//最大的请求深度,此值为0或负数时表示不进行深度限制,默认不进行深度限制
"maxDepth": 0,
"cookieValue": "",//请求的cookie,默认为空
//封杀标志,使用正则表达式,如果为空则不进行此校验
"failureMark": "",
//与封杀标志配合使用,连续多次在下载内容中获取到失败标识时的重试此次
//超过此次数会关闭该风铃虫实例
"interceptCount": 0,//",封杀重试次数,默认为5"
"headers": [//请求头配置
{
"headerName": "",
"headerValue": ""
}
],
//失败重试次数,默认为3
"retryCount": 0,
"cacheControl": "",// 网页缓存策略,默认为 max-age=0
"circularRedirectsAllowed": true,//确定是否应允许循环重定向,默认为false
"contentCompressionEnabled": true,//是否请求目标服务器压缩内容。默认为true
"cookieSpec": "",//确定用于HTTP状态管理的cookie规范的名称
"maxRedirects": 0,//最大重定向数,默认为50
//确定客户端是否应规范请求中的URI。默认为true
"normalizeUri": true,
//确定是否应自动处理重定向,默认为true
"redirectsEnabled": true,
//确定是否应拒绝相对重定向。 默认为false
"relativeRedirectsAllowed": true,
}
# 浏览器标志
配置代码: userAgent
当此值为空时,表示风铃虫实例在每次发出网络请求都会从内置的二十几种浏览器标识里随机选择一个
作用:风铃虫实例在每次发出网络请求都会携带一个浏览器标识参数 user-agent
(即请求头参数user-agent
),此值的值由该参数确定
# 来源参考页
配置代码: referrer
来源参考页,默认为空,表示系统设置为当前请求的网页值
作用 :风铃虫实例在每次发出网络请求都会携带referer
参数(即请求头参数referer
),用于指明当前流量的来源参考页面,该referer
的值由此参数确定
# 网页缓存策略
配置代码: cacheControl
默认为 max-age=0
作用 :用于指明网页缓存策略
# 请求cookie值
配置代码: cookieValue
默认为空,
作用:风铃虫实例在每次发出网络请求都会携带一个Cookie参数 Cookie
(即请求头参数Cookie
),此值的值由该参数确定
# 封杀标志
配置代码: failureMark
默认为空
作用: 需要与 封杀阀域值
参数配合使用,当 封杀标志
值不为空且封杀阀域值
大于0 时表示开启了 封杀检验 功能,
在风铃虫发现其网页下载器下载的网页内容里包含有封杀标志
的内容,且连续出现的次数大于封杀阀域值
时会自动停止该实例的运行,从而节约服务器资源。
# 封杀阀域值
配置代码: interceptCount
默认值为5
作用: 与封杀标志参数配合使用
# 自动重定向
配置代码: redirectsEnabled
默认值为true,表示开启
作用: 网页下载器请求网页时是否自动重定向
# 最大重定向数
配置代码: maxRedirects
默认值为50
作用: 网页下载器请求网页时自动重定向时最大自动重定向次数
# 超时时间
配置代码: connectTimeout
确定连接建立之前的超时时间(以毫秒为单位),默认为30000(30秒)
作用: 确定连接建立之前的超时时间(以毫秒为单位)
# 压缩请求内容
配置代码: contentCompressionEnabled
默认值为true
作用:是否开启HTTP压缩
请求头信息
配置代码: headers
默认值为空,可以设置多组参数
作用:请求头信息是风铃虫下载器发出网络请求时携带的请求头参数,它主要有多组键值对组成。
# 链接解析规则
风铃虫根据链接解析规则判断哪些页面是内容页
链接解析规则由以下的部分组成
- 起始链接
- 链接提取规则
风铃虫会根据链接提取规则构建出链接解析器,由链接解析器完成链接解析任务
具体定义如下:
"link": { //链接解析规则
"startUrl": "起始链接,多个起始链接之间用半角逗号隔开",
"rules": [ //链接提取规则
{
"expression": "匹配表达式",
"pattern": "链接匹配模式"
}
]
}
# 起始链接
配置代码: startUrl
必填参数,可以填多个起始链接,多个起始链接间用半角逗号隔开
作用: 风铃虫的起始抓取地址,风铃虫从此地址开启抓取旅程
# 链接提取规则
配置代码: rules
风铃虫根据链接提取规则构造出对应的链接提取器
默认参数为空,表示从下载网页信息提取出链接中包含起始网站的域名关键字的网页链接 可以设置多组提取规则
作用: 负责从下载的网页内容里提取出所有完全符合链接的提取规则的超链接,最后的抽取结果为多组提取规则匹配出来的超链接的总和。最后风铃虫会将提取出来的链接交给资源调度器调度。
通俗地说,链接提取规则就是告诉风铃虫哪些页面是 内容页和列表页
风铃虫会根据链接的提取规则构建出链接提取器,由链接提取器进行实际的链接解析工作,多个链接提取器组合成一个链接解析器
# 内容解析规则
风铃虫根据内容解析规则构造出对应的内容解析器
内容解析规则定义了哪些网页内容会被风铃虫解析、风铃虫从下载的网页资源中提取哪些数据以及如何提取这些数据。
- 内容页地址规则
- 内容匹配规则
具体的定义如下:
"content": {//内容解析规则
"contentPageRule": {//内容页地址规则
"expression": "匹配表达式",
"pattern": "链接匹配模式"
},
"pageRule": {//内容匹配规则
"caseSensitive": true,//是否大小写敏感
"fuzzy": true,//是否为模糊匹配
"mode": true,//匹配模式
"pattern": "内容匹配参数",
"target": "期待匹配值",
"type": "内容匹配类型"
}
}
# 内容页地址规则
配置代码: contentPageRule
风铃虫会首先根据
内容页地址规则
来判断当前页面的地址是否符合内容页的规则,若不满足,则说明该页面不是内容页,不需要从中提取数据 若当前页面的地址是否符合内容页的规则,风铃虫接下来会继续根据内容匹配规则
判断判断当前页面的地址是否符合内容页的规则,若满足则会从中提取数据,否则会跳过提取此页面的数据
作用: 只有网页的URL符合此提取规则该网页的内容才会被风铃虫解析,否则风铃虫会跳过此网页的解析任务以节约用户资源,同时提高解析效率。
只有当该页面的地址符合内容页地址规则
时才会继续根据内容匹配规则
判断该页面是否为内容页。对于不符合内容页规则的页面,风铃虫不会从中提取数据。
通俗地说,内容页规则就是告诉风铃虫哪些页面是 内容页
# 内容匹配规则
配置代码: pageRule
当该页面的地址符合内容页地址规则
,会进一步根据内容匹配规则
判断该页面是否为内容页,若内容匹配规则
为空,则不需要进行判断,直接表明该页面为内容页,需要从中提取数据。
当内容匹配规则
不为空时,需要根据情况进行判断,内容匹配规则
的具体参数的作用如下:
- 内容匹配类型 : 表示使用哪种方式从页面中提取数据,可选值为
ALL
、XPATH
、CSS
、REGEX
、SCRIPT
,他们分别代码的提取策略为:文本匹配策略、XPATH匹配策略、CSS匹配策略、正则匹配策略、 脚本匹配策略 - 内容匹配参数 : 在页面中提取内容时携带的参数
- 期待匹配值 : 希望与提取出来的数据进行比较的目标数据
- 匹配模式 : 默认为true,true表示必须包含期待匹配参数,false标识不能包含期待匹配参数
- 是否大小写敏感 : 是否大小写敏感,即进行匹配时是否为大小写敏感,默认为 false
- 是否为模糊匹配 : 是否为模糊匹配
# 内容提取规则
必填参数,可以设置多组,多组规则之间互相不会影响。
作用: 风铃虫根据内容提取项规则了解要从网页内容里解析出出来哪些数据以及如何解析这些数据。
具体定义如下:
"rules": [//内容提取规则
{ //内容提取项代码,同一组内容提取规则里每一个内容提起项的编码必须唯一
"code": "内容提取项代码",
"descp": "内容提取项描述",
"name": "内容提取项名字,选填",
"rules": [//属性提取规则
{
"param1": "第一个参数",
"param2": "第二个参数,部分规则下生效(如替换时作为替换目标)",
"rule": "内容处理策略",
"sort": 0 //序号,必填
}
]
}
]
风铃虫根据内容提取项规则构造出对应的内容提取器
描述了风铃虫要从网页内容里解析出出来哪些数据以及如何解析这些数据。
它由以下几部分组成
- 内容提取项名字
- 内容提取项代码
- 内容提取项的描述
- 属性提取规则
# 内容提取项名字
配置代码: name
选填参数
作用:此提取项的名字,可以重复,不参与解析
# 内容提取项代码
配置代码: code
必填参数
作用:此提取项的代码,不可以重复,参与解析,输出信息器中可以根据此值获取信息
# 内容提取项的描述
配置代码: descp
选填参数
作用:此提取项的描述信息,可以重复,不参与解析
# 属性提取规则
配置代码: rules
属性提取规则用于描述如果提取该项数据,它由一系列提取规则组成。
风铃虫内核会根据属性提取规则构建出内容提取器,由内容提取器完成解析任务,风铃虫的内容解析器由一组内容提取器组成,多个内容提取器由先后顺序要求,前一个内容提取器的输出数据即为后一个内容提取器的输入数据,内容解析器调用其组内的内容提取器完成数据的抽取功能
# 属性提取规则
属性提取规则描述了如何从网页里提取数据,同一个内容提取项里包含多组属性提取规则。
属性提取规则由以下几部分组成
- 内容处理策略
- 第一个参数
- 第二个参数
- 处理序号
具体定义如下
{
"param1": "第一个参数",
"param2": "第二个参数,部分规则下生效(如替换时作为替换目标)",
"rule": "内容处理策略",
"sort": 0 //序号,必填
}
风铃虫根据属性提取规则构建出内容提取器,风铃虫具有多种内容提取器,各种内容提取器的具体介绍请参见 内容提取器
# 内容处理策略
配置代码: rules
必填参数,由枚举值Rule
确定,具体的可选值请参见 内容提取器枚举表
作用:该参数决定了内容提取器如何提取数据,使用哪种方式提取数据,
# 第一个参数
配置代码: param1
由内容处理策确定其作用
# 第二个参数
配置代码: param2
由内容处理策确定其作用
# 处理序号
配置代码: sort
必填参数,同一组规则内该序号不能重复
作用:确定内容提取器的作用顺序,同一内容解析器内的内容提取器按照处理序号由小到大先后执行。