火车采集器V9插件文档
采集器提供了插件机制,来增强数据采集、数据处理的能力。 目前插件按照功能分为3种:HTTP请求插件、内容数据插件、文件下载插件,下面介绍下C#源码类型的插件。
HTTP请求插件
可以修改HTTP请求前的请求数据(http header)和HTTP完成后的返回数据(response),这个插件包含了2个处理方法。
BeforeRequest(RequestEntry request)
这个方法会在所有HTTP请求前的调用,包括网址采集、内容采集请求,可以通过修改请求来应对一些复杂的网站抓取。
参数介绍:
request.Properties 属性最好只做读取操作,不要修改,不然会造成无法预料的结果。其他的RequestEntry字段请参考 [文章最后]
AfterResponse(ResponseEntry response)
这个方法在所有HTTP请求完成后调用,可以修改为自己想要的数据,然后交给采集器来处理。
参数介绍:
request 一样,response 也包含了
response.Properties["PageType"]、request.Properties["JobName"]、request.Properties["JobID"],含义相同。
ResponseEntry字段请参考 [文章最后]
示例插件代码:
public class Plugin1 : IHTTPTamper{/// <summary>/// 处理下载前的request/// </summary>/// <param name="response"></param>public void BeforeRequest(RequestEntry request) {Console.WriteLine("BeforeRequest:"+request.Url);}/// <summary>/// 处理下载完成后的http响应,网址、默认页、多页、内容分页/// </summary>/// <param name="response"></param>public void AfterResponse(ResponseEntry response) {Console.WriteLine("AfterResponse:" + response.Url);}}
内容数据插件
通过这个插件可以修改最终的标签数据结果。
Process(ResponseEntry response, Dictionary<string, string> result)
参数介绍:
result中的值,但是不要删除、清空 result 的键,不然保存数据时可能会出错。
示例插件代码:
public class Plugin2 : IResultProcesser{/// <summary>/// 处理采集后的标签结果/// </summary>/// <param name="response">默认页面的响应</param>/// <param name="result">标签结果,键为标签名称,值为标签值</param>public void Process(ResponseEntry response, Dictionary<string, string> result){Console.WriteLine("Process:" + response.Url);var m = Regex.Match(response.RawText, "<title>(?<t>[^<]*)");if (m.Success){Console.WriteLine(response.Url);}}}
文件下载插件
这个插件提供下载文件的相关信息,并且修改其中的某些值。
BeforeDownload(RequestEntry request, DownloadFile downloadFile)
参数介绍:
示例插件代码:
public class Plugin3 : IFileDownloader{/// <summary>/// 文件下载前的处理方法/// </summary>/// <param name="request">文件下载的HTTP请求</param>/// <param name="downloadFile">下载文件</param>public void BeforeDownload(RequestEntry request, DownloadFile downloadFile){if (downloadFile.DownlaodUrl.Contains("xxx")){downloadFile.Cancel = true;//取消该文件的下载}}}
RequestEntry 详细字段说明
public class RequestEntry{/// <summary>/// 请求的头信息/// </summary>public Dictionary<string, string> Headers { get; set; }/// <summary>/// HTTP请求的方式,GET或者POST/// </summary>public string Method { get; set; }/// <summary>/// 请求的地址/// </summary>public string Url { get; set; }/// <summary>/// 来源地址/// </summary>public string Referer { get; set; }/// <summary>/// POST数据,当Method为POST时生效/// </summary>public string PostData { get; set; }/// <summary>/// 请求编码/// </summary>public string Encoding { get; set; }}
ResponseEntry 详细字段说明
public class ResponseEntry{/// <summary>/// 页面编码,比如UTF-8,GB2312/// </summary>public string ContentEncoding { get; set; }/// <summary>/// 页面类型,比如text/plain,text/html,application/xml/// </summary>public string ContentType { get; set; }/// <summary>/// 响应的HTTP头信息/// </summary>public Dictionary<string, string> Headers { get; set; }/// <summary>/// POST或者GET/// </summary>public string Method { get; set; }/// <summary>/// 来源页地址/// </summary>public string Referer { get; set; }/// <summary>/// 响应地址/// </summary>public Uri ResponseUri { get; set; }/// <summary>/// HTTP状态代码/// </summary>public HttpStatusCode StatusCode { get; set; }/// <summary>/// 请求地址/// </summary>public string Url { get; set; }/// <summary>/// HTTP响应中的原始文本/// </summary>public string RawText { get; set; }}
DownloadFile 详细字段说明
public class DownloadFile{/// <summary>/// 所属的记录ID/// </summary>public int ContentId { get; set; }/// <summary>/// 原始下载地址/// </summary>public string DownlaodUrl { get; set; }/// <summary>/// 最终下载地址/// </summary>public string FinalDownloadUrl { get; set; }/// <summary>/// 文件保存路径/// </summary>public string FileName { get; set; }/// <summary>/// html中的替换路径/// </summary>public string ReplaceUrl { get; set; }/// <summary>/// 标签名称/// </summary>public string LabelName { get;set; }/// <summary>/// 所属的页面地址/// </summary>public string PageUrl { get;set; }/// <summary>/// 是否取消下载/// </summary>public bool Cancel = false;}
