网页采集规则匹配原理
视采采集器应用的是结构化匹配技术,并且兼容传统的正则匹配技术,它通过用户定义的样本单元,自动生成块特征,系统以块为单位进行整体匹配。名词解释
用户必须理解以下几个术语,才能做到随机应变,采遍天下。单元
用户定义规则时需要指定采集哪些数据,这些数据可能分布在不同区域里,我们将这些需要采集的区域叫做单元,类同于字段的意思。它是数据采集的基本单位。 单元在大多的设计器(模块)里只是代表字段的含义,在网页设计器里单元有着更多的含义。样本单元
网页设计器中的单元除了代表字段以外,它还有一个重要的功能为特征定义,我们把它叫做样本单元。没有名称的样本单元只是纯意义上的特征定义,它没有值,一个样本单元对应一个HTML标签。块
网页设计器中,系统是以块为单位进行抽取的。块,顾名思义,指的是一块区域。网页上有很多大大小小的区域,一个HTML标签对应一个区域,用户需要通过样本单元来定义区域的特征。不同的区域共同组成一个大的区域,该大的区域就叫做块。块中包含一个或多个样本单元,每个样本单元又包含多个特征定义,这些特征定义共同来定位这个块。块是由系统根据所有的样本单元自动生成的。
表达式
表达式用来描述单元的匹配特征,在网页设计器中用户可以使用传统的正则表达式来定义HTML标签的属性特征。系统提供以下几种通配符。$s:匹配任意字符串。
$n:匹配数字
$c:匹配英文字母(a-Z)所组成的字符串
用户需要将匹配的变化部分用通配符替换。
设计器
设计器相当于一个插件,它们具有相同的应用程序接口,负责提供一种类型的功能,它是根据用户需要动态加载的。视采采集器中包含网页设计器、单元过滤器、单元包装器、csv 生成器等。特征定义
系统需要根据特征来定位单元,用户在定义样本单元时请根据以下原则进行定义:规划块

用户需要规划一个最小的区域,该区域包含了所有的采集单元,并且能够重复的出现(多条匹配的情况)。用户在该区域里定义好所有的样本单元,如果样本单元只有一个的情况下,用户最好在当前块中就近选取其它的样本单元来补充当前块的特征,并且保留单元名为空(因为我们不需要存储该值),我们一般建议至少定义两个样本以上。
定义属性表达式

系统会根据HTML标签的属性自动生成最大匹配表达式,用户尽量根据实际情况定义最小匹配表达式,限定匹配范围,对于那些固定不变的属性值,则以它的值作为表达式。
选取样本区域
用户可能觉得选取样本区域是个最简单的事情,需要采哪就直接点哪就可以了,事实上也是如此。但是有些情况下用户还是需要遵循一些策略来选择样本区域。怎样选择样本区域
对于多条采集,我们尽量选择式样最广,内容最多,覆盖最全的那条作为样本单元。
式样最广:多条中看起来样子最广的那条,如文字为黑色的最多,那我们就选黑色作为样本。
内容最多:多条中文字最多,区域最大的那条,因为区域越大包含的特征越多。
覆盖最全:多条中情况最多的那条,如回复最多,分页最多,图片最多,文字最多等。
覆盖不全
当我们点击一个区域时,系统给我们显示的内容并没有包含我们所要的全部。
此时我们需要在页面左面HTML标签结构视图里找到你刚才点的红色标签,通过点击它的父标签来扩大它的匹配区域。如下图:
样本特征太少
如果我们选择的样本对应的HTML标签没有任何属性或者属性太少,无法准确定位,我们应该在当前样本块中定义其他的样本单元来补充块特征。 或者在页面左边的HTML结构视图里查看它的父标签,
选择属性最多的那个HTML标签作为样本单元,并且确保该父标签处于样本块中。
没有我所要的属性
当用户点击一个文字时,在单元里并没有我所要值,如在列表里,我们可能看不到网址。则在页面左面HTML标签结构视图里,
点击该标签的父标签,并且在属性列表里出现我们所要值为止。如下图:
预览结果
当前页面中所有的样本单元都定义好后,建议用户立即点预览按钮来确定当前匹配的情况。调整规则
当匹配不正确的时候,我们可能真的不知道怎么继续了。怎么办?此时我们可以求助系统根据一些策略来自动调整规则。用户只需点击修正按钮,系统将会显示当前匹配情况,并且会弹出一个窗口,显示当前所有的样本单元,包括原始属性表达式,调整后的属性表达式。系统可能会自动新增一些样本单元。用户需要仔细分析这些结果,根据实际情况调整这些新的属性表达式,然后点击应用。如下图:
为了显示更简洁,系统使用1,2,3等数字来标识含义。1=单元名、2=值、3=旧表达式、4=新表达式、5=锁定。请大家在第一次使用时对应起来便可。
用户定义的特征越多,规则修正功能越准确。
调整策略
系统自动调整是根据以下策略进行调整的。用户也可以参考以下策略来定义规则。- 尽量定义范围最小的属性表达式
- 定义至少两个以上的样本单元
- 如果错误匹配的标签与样本标签父亲相同,则将错误标签定义为样本单元
- 如果错误匹配的标签与样本标签父亲不同 将样本标签的父亲标签定义为样本单元

