火车采集器V9插件开发手册

火车采集器V9版本使用C#语言.Net Framework4.0开发,支持C#PHPPython三种类型的插件。各种插件的运行原理和开发方式不同,以下是各插件的原理以及开发方式:

一、C#插件

1.插件原理

C#插件是用户引用开发程序集,实现其中的接口,采集器在运行过程中会调用相关接口实现数据请求,修改等功能。

2.     插件开发过程

使用Visual Studio新建一个项目,使用C#.Net Framework4.0,并引用采集器System目录下SpiderInterface.dll文件。简单插件可使用采集器中插件管理器CodeEditor.exe直接编写并生成。插件包含三个接口,分别是

2.1 http请求接口IHTTPTamper

该插件可以在http请求之前更改相关请求参数,可修改RequestEntry来实现。

2.2内容处理接口 IResultProcesser

该插件可以修改标签内容

2.3文件下载接口IFileDownloader

该接口可以对文件下载前的http请求进行处理,还可以取消下载。

3.     插件开发注意事项

3.1 附件中SpiderInterface.XML为注释文件,

3.2 SpiderInterface.chm是各个接口的使用说明

3.3 插件开发完成后请复制到Plugins目录下,重新打开采集器即可使用

3.4 插件的测试请使用插件管理器

二、PHP插件

1.     插件原理

通过调用命令行的php.exe,运行interface.php,而该文件引用用户开发的php文件,对采集器最后的标签数据进行处理。V9版本的php目录为 System\PHP

采集器默认的php环境为了减少体积去掉了部分扩展,可能会无法满足用户的需要。这时,您可以更换您自己的php环境。需要注意的是php的工作目录是 System\PHP ,您可以直接将自己的php环境复制过来。注意的是该目录下的interface.php文件必须要保留。在更换完成后,请检查一下php.ini,看配置中的各种相对目录是否正确。测试无误后就可以使用了。

2.     插件开发过程

PHP插件可以使用插件管理器中直接新建,也可以使用自己擅长的编辑器。最后只要后缀为.php即可。

PHP插件可使用的参数在示例代码中全部可见。示例代码在Plugins中有一份,下边也复制了一份

<?php

error_reporting(E_ERROR | E_WARNING | E_PARSE);

/*

*外部编程接口处理标签内容示范文件                                                                                                                                                                                          

*该文件内自动系统的三个参数$LabelArray ,$LabelUrl

*对任意采集的标签都适用请对标签内容处理后直接将该数组serialize($LabelArray)输出,

*采集器内部即可接收到该标签的内容,对比以前的接口规则,新规则可以实现标签之间的数据调用和处理                                                                                               

*参数说明:                                                                                                                                                                                                                                               

  *$LabelArray    -  标签名及标签内容集合 结构如:Array('栏目id' => 2,'出处'=>  '新浪微博','内容'=>'<center><b>暴笑短信')  ##                

  *$LabelUrl      -  当前采集的页面的Url地址

  * 特别注意:如果是处理列表页,默认页,多页时会有以下两个标签

    $LabelArray['Html']       网页的源代码,没有经过采集器处理的,直接下载后的数据.修改这里的数据,请将新值赋予$LabelArray['Html']

    $LabelArray['PageType']   值可能为 List, Content ,Pages, Save 分别代表处理列表页,默认页,多页,保存时                                                                                                                          

*以上语句建议不更改,以下为用户操作区域  该区域只限对数组值进行操作,不得有打印输出产生,不得直接增加或删除相应标签名

*/

if($LabelArray['PageType']=="List")

{

       $LabelArray['Html']='当前页面的网址为:'.$LabelUrl."\r\n页面类型为:".$LabelArray['PageType']."\r\n接收到的数据是:".$LabelArray['Html'];

}

else if($LabelArray['PageType']=="Content")

{

       $LabelArray['Html']='当前页面的网址为:'.$LabelUrl."\r\n页面类型为:".$LabelArray['PageType']."\r\n接收到的数据是:".$LabelArray['Html'];

}

else if($LabelArray['PageType']=="Save")

{

       $LabelArray['内容'] = $LabelArray['标题'].$LabelArray['内容'];  //★★★★★★注意这句。V2009SP2版后可实现多标签之间的相互调用★★★★★★

       $LabelArray['内容'] = str_replace('旧字符串','新字符串',$LabelArray['内容']); //简单替换一下

 

       $LabelArray['标题'] =  '【给标题标签加个前缀】'.$LabelArray['标题'];

 

       $LabelArray['时间'] =date('Y-m-d H:i:s',time()); //不用标签内容,直接获取time()函数得到的当前时间,用Y-m-d H:i:s格式输出,如2008-05-28 00:12:23

}

//#############以上为用户操作区域#############################################################################################################################

//#############以下语句必须保留,建议不更改###################################################################################################################

//ob_clean();

echo serialize($LabelArray);

?>

三、Python插件

1.     Python插件原理

python插件也是使用命令行的方式,由采集器将内容标签数据json充列化后传给插件,插件再反序列化后再进行处理,处理完成以后再序列化返回给采集程序。

2.     插件开发过程

插件开发需要注意python版本,插件目录中有示例插件,还要注意,要将python.exe加入全局变量,方便采集器调用,不然会提示找不到python.exe。以下是python3.4的默认插件代码。

import sys,importlib

from urllib import parse

import json

 

if len(sys.argv)!= 5:

    print(len(sys.argv))

    print("命令行参数长度不为5")

    sys.exit()

else:

    LabelCookie = parse.unquote(sys.argv[1])

    LabelUrl = parse.unquote(sys.argv[2])

    #PageTypeList,Content,Pages分别代表列表页,内容页,多页http请求处理,Save代表内容处理

    PageType=sys.argv[3]

    SerializerStr = parse.unquote(sys.argv[4])

    if (SerializerStr[0:2] != '''{"'''):

        file_object = open(SerializerStr)

        try:

            SerializerStr = file_object.read()

            SerializerStr = parse.unquote(SerializerStr)

        finally:

            file_object.close()

    LabelArray = json.loads(SerializerStr)

 

#以下是用户编写代码区域

    if(PageType=="Save"):

        if(LabelArray['标题']):

            LabelArray['标题']='这是Python插件处理的标题'

    else:

        LabelArray['Html']='当前页面的网址为:'+ LabelUrl +"\r\n页面类型为:" + PageType + "\r\nCookies数据为:"+LabelCookie+"\r\n接收到的数据是:" + LabelArray['Html']

       

 

#以上是用户编写代码区域

    LabelArray = json.dumps(LabelArray)

    print(LabelArray)


发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注