输出特征 |
| 特征名称 | 说明 | |
| Next | 下页连接的标识 | |
| Default | 下页连接的绝对路径 | |
| Head | 有用文本的开始标志 | |
| Tail | 有用文本的结束标志 | |
| RemoveS | 必须删除的内容 | |
|
RemoveFront RemoveBack |
必须中删除RemoveFront和RemoveEnd之间的部分 | |
| Cookie | 是否使用Cookie | |
| ReleativeURL | 返回结果是否是内部链接 | |
| TURL | 是否由文字提取地址 | |
| TURL=0(从链接中提取地址) | TURL=1(从文字中提取地址) | |
| Key1 | <a的结束符‘>’到Key1之间是Title | Key1与Key2之间是Abstract |
| Key2 | Key2与Key3之间是Abstract | Key1与Key2之间是Abstract |
| Key3 | Key2与Key3之间是Abstract | Key3与Key4之间是URL |
| Key4 | 无用 | Key3与Key4之间是URL |
![]() |
![]() |
| 通常搜索引擎返回的结果包括三部分内容,一、相关结果的地址即URL;二、该结果的名称即Title;三、结果的简介我称为Abstract。比如下面是一条搜索结果: | |
| Borland Home Page http://www.borland.com.cn Borland,北京宝兰-英博思信息技术有限公司...Borland公布支持Microsoft .NET平台产品策略。........ | |
|
其中黑体字为Title,斜体字是URL,一般字体是Abstract。输出提取的核心问题,就是从搜索引擎返回的文本中将这三部分内容分离出来。 |
|
|
通常,返回结果的URL都是写在相应的超链接里的,也就是在HTML的<a>标签中。但是也有一些引擎要求用户必须通过该引擎的重定向才能访问相关结果, |
|
|
而返回给用户的超链接不是直接指向结果超链接,而是指向搜索引擎某个网页的URL。在这种情况下,搜索引擎通常会将结果链接以其他文本的形式返回给用户。比如: |
|
|
Web Tech Training Development
| |
| 这是从Findwhat搜所到的一条结果,其超链接的URL是“http://216.216.246.31/bin/findwhat.dll?clickthrough&y=0&x=wT:TdU;y69nGeptfH4pN:F:;hv0AleKjy2gYehKFcK0TUOAjQScVS9TWKI1rSKCgKhcjwOfog9oRfTpHfG$$l” | |
| 显然从这个链接中我们无法取得该结果的URL, 这时我们必须从返回结果的其他位置入手,我们发现返回结果的说明中包含了其URL,可以从这里提取我们想要的东西。 | |
| 根据上面的情况,作者将搜索引擎分为两类,一类是可以直接从其返回的超链接中获取结果的URL的,另一类是必须从其他位置获取结果的URL的,大多数的搜索引擎属于第一类。 | |
| 符号 |
JaniSearch中设定的定位标志一律与大小写无关,在多种可能性之间使用分隔符“<;>”,在一个标志的开头和结尾之间使用通配符“<*>”,Tail和Head中使用了细节分隔符“<,>”。 例如Yahoo的Tail属性是:“Next<*> matches<,><center><a<;>Go To Web Page Matches<;>Next <*><;><table> ”。其中由<;>分开的部分表示多种可能性,即有效文本末尾可能由“Next<*> matches<,><center><a”标记,也可能由“Go To Web Page Matches”标记。第一种可能“Next<*> matches”中,<*>”为通配符,代表“Next 20 matches”或“Next 10 matches”等等。第一种可能性中的<,>表示Next<*> matches是Tail的主要标志,在找到Next<*> matches之后,以次为基础继续寻找<center><a,并以此为最终的定位点。 |
| 1 | Next 用于定位指向下页的链接所在的位置,指向下页链接的<a>标签必须是从Next指定位置向前700个字符内最后一个<a>标签。 如果引擎POST属性为真,则其用于定位到下页的Form的,指向下页的FORM必须包含在Next指定位置向前700字符,向后200字符之内的区域内。详细情况见流程图。另外有些引擎指向下页的链接只有通过页号才能得到,比如第2页的下一页必须通过查找“[3]”来得到,为了增加其特异性,Next中使用了特别的关键字PageNumber来描述页号。比如“[PageNumber] ”在第2页表示“[3]”,在第3页表示“[4]”。 |
| 2 | ReleativeURL有些返回的结果使用的是相对路径,因此需要给出该路径前省略的绝对路径部分。例如healthAtoZ的返回结果中所有连接都是相对连接,如“/healthatoz/Atoz/tl/misc/mb/viewallmessage.asp?categoryid=60”,必须加上绝对路径http://www.healthatoz.com,构成完整URL为http://www.healthatoz.com/healthatoz/Atoz/tl/misc/mb/viewallmessage.asp?categoryid=60 |
| 3 | Head 标记有用文本的起始位置,在此位置之前的所有字符将在开始其他处理之前被删除。Head的多种情况中一旦有一种被执行,则不再判断其他情况。 |
| 4 | Tail 标记有用文本的结束位置,在此位置之后的所有字符将在开始其他处理之前被删除。Tail与Head一样,其中多种情况中一旦有一种被执行,则不再判断其他情况。 |
| 5 | RemoveS 提取数据前必须被删除的部分,与Head和Tail不同,“<;>”分割的RemoveS的所有情况都将被执行。 |
| 6 |
RemoveFront & RemoveBack 两者必须成对出现,在两者之间的部分将被删除,和RemoveS一样其所有情况都将被执行。 |
| 7 | Cookie 标记引擎是否使用Cookie。有些引擎使用了Cookie,如果客户端在获取第二页文本时不传回获取第一页时收到的Cookie将得不到第二页文本。 |
| 8 | UseDefault 有些引擎的搜索结果也全部是内部链接,UseDefault标记是否需要在搜索结果的URL前添加Default属性标记的内容。 |
| 9 | TURL 标记属于从超链接提取URL或者从其他位置提取URL。0为从超链接提取,1为从文本其他位置提取。 |
| 10 | Key1-Key4 如特征简表所列 |
| 注 | 输出数据提取流程中任何一步失败都会使整个过程没有返回结果。 |
| 使用JaniSearch配套的引擎特征编辑器可以方便的添加新的搜索引擎,下图1为EngineEditor的输出入特征页。 | |
| 输入编辑页左侧的列表中显示了JaniSearch引擎目录下的所有pro文件,双击其中的一条,将在右侧的表格中显示该文件的条目。 | |
| 单击右侧的表格中的谋行,将进入该属性的编辑页,Remove Front和Remove Back的编辑页如下图2。注意编辑完谋条属性后请按“OK”确认。 | |
| 编辑完特征后,可以单击“Do”按钮(自左第4个按钮,图标为向下箭头)选择一个该引擎返回的HTML文档,检测一下所编辑的特征文件是否正确。如果能完成所有步骤,将进入结果演示页(图3)。 | |
| 搜索引擎返回的HTML页面您可以通过EngineEditor的Ipt测试获得,也可以在使用JaniSearch时选中工具栏上的Debug按钮,然后进行搜索,这样引擎返回的页面将被存储于EngineEditorDebug目录中。 | |
| 演示页上方将显示指向下页的链接,下方显示从网页中提取的各项数据。注意在测试使用POST方法的引擎的输出特征时,应先选中Post选择框,这样演示页上方右侧将显示将Post的数据。 | |
| 如果“Save Files Step by Step”选项,那么将在EngineEditorDebug目录下存储数据提取过程中每一步之后的数据情况,以便编辑者查找错误,如果谋步骤之后的所有步骤都没有相关文件产生,说明该步骤无法完成。 | |
| ipt和pro两个属性表都完成之后,您可以进入“Add to Category”页,将新引擎添加到JaniSearch的Category当中。在这一页,您也可以进行对Category的其他编辑操作。 | |
|
作者强烈建议您使用EngineEditor向JaniSearch中添加引擎,它将保证您写的特征表符合JaniSearch的要求。 |
|
| 图1 | ![]() |
| 图2 | ![]() |
| 图3 | ![]() |
| 图4 |
| 1 | 编写输入特征ipt文件之后。测试ipt属性时,选择Save File,这样会在EngineEditorDebug目录下保存本次测试得到的网页。 |
| 2 | 编辑pro属性后,使用ipt测试时得到的网页,进行测试,观察每步执行后的结果,修改pro属性,直到完全符合为止。 |
| 3 | 多输入一些关键字进行ipt和pro测试,都符合要求后,通过 Add
to Category工具添加到JaniSearch中来。 |
| 4 | 如果您希望与其他网友共享您的创作,可以把相关的ipt和pro文件Email给我。 |
| 5 | 希望大家能支持JaniSearch,如果现有的引擎描述有错误,也请即时反馈给我。 |