火车采集器软件交流官方论坛

 找回密码
 加入会员
搜索
火车采集器V9版免费下载火车浏览器 - 可视采集,万能群发,全自动脚本工具
查看: 5010|回复: 0

如何学习插件

[复制链接]
发表于 2018-12-18 15:21:07 | 显示全部楼层 |阅读模式
本帖最后由 datafinder 于 2018-12-18 15:30 编辑

要学习插件,首先要把火车采集器的插件文档读明白,然后把随车自带的插件打开,自己修改,然后看看结果,这样练习下来就容易上手了;
感觉c#语言插件帮助文档还是比较详细,有c#代码问题也可以随时百度查找信息;
V9的插件比6.7的好些,自带编辑插件功能,不像6.7的直接是dll,v9可以是cs结尾的,也可以用自带的插件管理工具生成dll,但是这个生成的dll跟6.7的不能通用,应当是引用的dll和软件内部的一些函数方法发生了改变,下面是复制过来的插件文档:

另外补充下,v9 插件编辑器 里面c#语句的还有关键词提示,其中response等类型虽然没有提示,但是可以在 内容标签的 运行c#语句里面,有完整提示,通过这个提示可以比较方便寻找相关类的属性方法等;

HTTP请求插件
可以修改HTTP请求前的请求数据(http header)和HTTP完成后的返回数据(response),这个插件包含了2个处理方法。
BeforeRequest(RequestEntry request)
这个方法会在所有HTTP请求前的调用,包括网址采集、内容采集请求,可以通过修改请求来应对一些复杂的网站抓取。
参数介绍
  • request 参数中包含Url、Referer、Cookie、Headers、页面类型等,除HTTP基本属性外,还有包含一些特殊值
    • request.Properties["PageType"], 这个属性是页面类型,值为整数类型,包含6种类型
      0:起始地址; 1:列表页面; 2:列表页的分页; 3:内容页面; 4:关联多页; 5:内容页的分页;
    • request.Properties["JobName"],任务名称
    • request.Properties["JobID"],任务ID

request.Properties 属性最好只做读取操作,不要修改,不然会造成无法预料的结果。其他的RequestEntry字段请参考 [文章最后]
AfterResponse(ResponseEntry response)
这个方法在所有HTTP请求完成后调用,可以修改为自己想要的数据,然后交给采集器来处理。
参数介绍
  • response中包含HTTP响应数据,如返回HTML、响应Header
    • response.RawText`,是返回的HTML代码
    • response.Url`,请求的Url地址

request 一样,response 也包含了 response.Properties["PageType"]、request.Properties["JobName"]、request.Properties["JobID"],含义相同。
其他的ResponseEntry字段请参考 [文章最后]
示例插件代码
  1. public class Plugin1 : IHTTPTamper
  2. {
  3.     /// <summary>
  4.     /// 处理下载前的request
  5.     /// </summary>
  6.     /// <param name="response"></param>
  7.     public void BeforeRequest(RequestEntry request) {
  8.         Console.WriteLine("BeforeRequest:"+request.Url);
  9.     }
  10.     /// <summary>
  11.     /// 处理下载完成后的http响应,网址、默认页、多页、内容分页
  12.     /// </summary>
  13.     /// <param name="response"></param>
  14.     public void AfterResponse(ResponseEntry response) {
  15.         Console.WriteLine("AfterResponse:" + response.Url);
  16.     }
  17. }
复制代码
内容数据插件
通过这个插件可以修改最终的标签数据结果。
内容插件处理方法 Process(ResponseEntry response, Dictionary<string, string> result)
参数介绍
  • response,内容页的响应结果
  • result,是标签数据结果,键是标签名称,值是标签数据。
可以修改result中的值,但是不要删除、清空 result 的键,不然保存数据时可能会出错。
示例插件代码
  1. public class Plugin2 : IResultProcesser
  2. {
  3.     /// <summary>
  4.     /// 处理采集后的标签结果
  5.     /// </summary>
  6.     /// <param name="response">默认页面的响应</param>
  7.     /// <param name="result">标签结果,键为标签名称,值为标签值</param>
  8.     public void Process(ResponseEntry response, Dictionary<string, string> result)
  9.     {
  10.         Console.WriteLine("Process:" + response.Url);
  11.         var m = Regex.Match(response.RawText, "<title>(?<t>[^<]*)");
  12.         if (m.Success)
  13.         {
  14.             Console.WriteLine(response.Url);
  15.         }
  16.     }
  17. }
复制代码
文件下载插件
这个插件提供下载文件的相关信息,并且修改其中的某些值。
处理方法:BeforeDownload(RequestEntry request, DownloadFile downloadFile)
参数介绍
  • request 是文件下载HTTP的请求数据,详细参考 [文章最后]RequestEntry
  • downloadFile,文件下载的相关属性,包括下载地址、保存路径、HTML中的替换路径等等

示例插件代码
  1. public class Plugin3 : IFileDownloader
  2. {
  3.     /// <summary>
  4.     /// 文件下载前的处理方法
  5.     /// </summary>
  6.     /// <param name="request">文件下载的HTTP请求</param>
  7.     /// <param name="downloadFile">下载文件</param>
  8.     public void BeforeDownload(RequestEntry request, DownloadFile downloadFile)
  9.     {
  10.         if (downloadFile.DownlaodUrl.Contains("xxx"))
  11.         {
  12.             downloadFile.Cancel = true;//取消该文件的下载
  13.         }
  14.     }
  15. }
复制代码
RequestEntry 详细字段说明
  1. public class RequestEntry
  2. {
  3.         /// <summary>
  4.         /// 请求的头信息
  5.         /// </summary>
  6.         public Dictionary<string, string> Headers { get; set; }
  7.         /// <summary>
  8.         /// HTTP请求的方式,GET或者POST
  9.         /// </summary>
  10.         public string Method { get; set; }
  11.         /// <summary>
  12.         /// 请求的地址
  13.         /// </summary>
  14.         public string Url { get; set; }
  15.         /// <summary>
  16.         /// 来源地址
  17.         /// </summary>
  18.         public string Referer { get; set; }
  19.         /// <summary>
  20.         /// POST数据,当Method为POST时生效
  21.         /// </summary>
  22.         public string PostData { get; set; }
  23.     /// <summary>
  24.     /// 请求编码
  25.     /// </summary>
  26.         public string Encoding { get; set; }
  27. }
复制代码
ResponseEntry 详细字段说明
  1. public class ResponseEntry
  2. {   
  3.     /// <summary>
  4.     /// 页面编码,比如UTF-8,GB2312
  5.     /// </summary>
  6.     public string ContentEncoding { get; set; }
  7.     /// <summary>
  8.     /// 页面类型,比如text/plain,text/html,application/xml
  9.     /// </summary>
  10.     public string ContentType { get; set; }
  11.     /// <summary>
  12.     /// 响应的HTTP头信息
  13.     /// </summary>
  14.     public Dictionary<string, string> Headers { get; set; }
  15.     /// <summary>
  16.     /// POST或者GET
  17.     /// </summary>
  18.     public string Method { get; set; }
  19.     /// <summary>
  20.     /// 来源页地址
  21.     /// </summary>
  22.     public string Referer { get; set; }
  23.     /// <summary>
  24.     /// 响应地址
  25.     /// </summary>
  26.     public Uri ResponseUri { get; set; }
  27.     /// <summary>
  28.     /// HTTP状态代码
  29.     /// </summary>
  30.     public HttpStatusCode StatusCode { get; set; }
  31.     /// <summary>
  32.     /// 请求地址
  33.     /// </summary>
  34.     public string Url { get; set; }
  35.     /// <summary>
  36.     /// HTTP响应中的原始文本
  37.     /// </summary>
  38.     public string RawText { get; set; }
  39. }
复制代码
DownloadFile 详细字段说明
  1. public class DownloadFile
  2. {
  3.     /// <summary>
  4.     /// 所属的记录ID
  5.     /// </summary>
  6.     public int ContentId { get; set; }
  7.     /// <summary>
  8.     /// 原始下载地址
  9.     /// </summary>
  10.     public string DownlaodUrl { get; set; }
  11.     /// <summary>
  12.     /// 最终下载地址
  13.     /// </summary>
  14.     public string FinalDownloadUrl { get; set; }
  15.     /// <summary>
  16.     /// 文件保存路径
  17.     /// </summary>
  18.     public string FileName { get; set; }
  19.     /// <summary>
  20.     /// html中的替换路径
  21.     /// </summary>
  22.     public string ReplaceUrl { get; set; }
  23.     /// <summary>
  24.     /// 标签名称
  25.     /// </summary>
  26.     public string LabelName { get;set; }
  27.     /// <summary>
  28.     /// 所属的页面地址
  29.     /// </summary>
  30.     public string PageUrl { get;set; }
  31.     /// <summary>
  32.     /// 是否取消下载
  33.     /// </summary>
  34.     public bool Cancel = false;
  35. }
复制代码


您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

QQ|手机版|Archiver|火车采集器官方站 ( 皖ICP备06000549 )

GMT+8, 2024-11-24 17:30

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表