火车采集器V9插件开发手册
火车采集器V9版本使用C#语言.Net Framework4.0开发,支持C#,PHP,Python三种类型的插件。各种插件的运行原理和开发方式不同,以下是各插件的原理以及开发方式:
一、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,'出处'=> '新浪微博','内容'=>' 暴笑短信') ## *$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]) #PageType为List,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)
如果你还有其它疑问可以来本站搜索相关问题,这里会有你想要的答案:大海资源库
暂无评论内容