RuiJi.Net RuiJi 表达式介绍

      RuiJi.Net RuiJi 表达式介绍已关闭评论

RuiJi表达式是为了快速添加抽取规则,实现规则与程序运行分离的一种方式,RuiJi表达式尽量的简单、易懂、配置灵活。

RuiJi表达式遵循RuiJi.Net的抽取模型,表达式所描述的抽取结构与RuiJi.Net的抽取模型一致。

RuiJi表达式可以存储于文本文件、数据库或高速缓存中,在需要进行抽取时再进行读取,这意味着您不需要重新启动程序,可以在任意需要的时刻更改表达式内容。

在日后我们会让每一个抽取节点都可以缓存RuiJi表达式,并在需要时接收更改通知,对规则进行更新。

如上所述,RuiJi表达式遵循RuiJi.Net的抽取结构,在RuiJi.Net中的抽取器包含Block、Tile、Meta, 在RuiJi表达式中使用[block]、[tile]、[meta]表示。

一个最简单的抽取表达式定义如下
[block]
#recommend
css #topsOfRecommend

这个表达式定义了一个抽取器,抽取器的名称是recommend, 抽取器定义了一个css选择器,选择id为topsOfRecommend的outerHtml做为block抽取器的最终抽取内容。

抽取器都可以包含名称,但对于block和tile来说,并不是必需的,如果需要定义抽取器的名称,则名称描述必须紧跟在抽取器之后(新行),并且以#开头。

具有tile的block
[block]
#recommend
css #topsOfRecommend:ohtml

[tile]
#tile
css .box-aw

这里block的css选择器末尾加上了:ohtml,这与上一个示例一样,都是选择id为topsOfRecommend的outerHtml做为block抽取器的最终抽取内容。在这里第一个示例是简写,在选择结果为dom的情况下,如果没有指明选择后缀会默认使用outerHtml作为选择结果。可用后缀还包括html,text。

这里的tile抽取器抽取的内容是block抽取器的结果,也就是id为topsOfRecommend的outerHtml。在这个结果中选择样式为.box-aw的dom作为tile选择器的结果,这个结果为1个或多个。

继续在tile结果中抽取元数据
[block]
#BlockName
css #topsOfRecommend:ohtml

[tile]
#titlename
css .box-aw

	[meta]
	#title
	css .blog-title-link[title]

	#author
	css .blog-footer-box > span:first:text

	#postdate
	css .blog-footer-box > span:eq(2):text

	#reads_i
	css .blog-footer-box > span:last:text
	regS / / 1

这里的meta会向后缩进,以表示这个抽取器是tile的子抽取器,如果不缩进的话,则表示这个抽取器是block的抽取器。向后缩进的单位是一个制表符。

meta可以选择出多组数据,并且必须具有名称,每个需要抽取的元素之间需要一个空行。在本示例的中meta是处理tile的每一个抽取结果,meta的处理结果是一个字典。

也许在未来我们会提供一个RuiJi表达式的编译器,以方便大家录入RuiJi表达式

© 2018, RuiJi 社区. 版权所有.转载请注明出处