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

火车采集器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)

大海资源库

如果你还有其它疑问可以来本站搜索相关问题,这里会有你想要的答案:大海资源库

有问题及时联系站长,QQ:1240555208
更多优质资源在QQ群里,可以进群领取:467392290~
© 版权声明
THE END
点赞8 分享
及时反馈~ 抢沙发

请登录后发表评论

    暂无评论内容