火车采集器采集PDF并且去重方法

update: 新版火车采集,如果把文件(包括pdf,图片等)当作URL网址来采集的话,在内容采集规则中的文件下载中,勾选 探测文件并下载,貌似也能解决上述问题!

最近在使用火车采集器的时候,遇到一个类似的问题,Google搜索到csdn上的一篇文章。

以下为引用,原文链接见文末。

遇到的案例是这样的,在http://www.xxx.com/index.html 上有多个pdf的下载连接,不定时会有新的pdf增加(下载链接有变化),现在需要监控网页变化,并下载新增加的文件。

直接使用火车采集器没法完美(至少我还没试出来)完成任务。

1,使用缺省设置,起始网址是 http://www.xxx.com/index.html ,使用“自动获取地址链接”,可以得到pdf文件的链接地址。在第2步“内容采集”的步骤中,会将pdf文件当为常规的html网页进行读取,但无法下载文件。

2,将起始网址作为内容页网址,也就是多级列表为空。这种情况下可以下载文件,但带来一个问题,下载一次后,由于起始网址是固定的,以后再运行这个任务,会被当作重复网址而忽略。如果在第4步“4、其他设置”的“发布相关”中,开启“清空该任务网址库”,可以多次运行本任务了,但同时带来一个更麻烦的问题,已更新的文件也被反复下载,火车采集器中并没有记录下载文件链接地址作为去重的依据。如果下载文件的命名规则使用[原文件名],重复下载的会被覆盖,不考虑流量、时间的情况下,第二种方法已勉强可接受。但下载文件会存在同名的情况(/1/abc.pdf 和 /2/abc.pdf),所以本案例中不适用。

现在想到的解决方案如下,使用手动设置规则获取链接地址,配合http请求、响应修改插件进行处理。

主要步骤如下 :

一、“1,网址采集规则 ”中,“获取内容网址”采用常规模式,获取方式改为“手动设置规则获取”。提取规则 :

<a(*)href="[参数]"(*)>[参数]</a>

拼接地址:

http://www.xxx.com/index.html?xsplit=[参数1]

这样处理的作用是将下载链接接转化为不同的,唯一的“内容网址 ”,下载后会被系统记录,不会重复采集下载。

二、利用插件,生成内容页的内容,并将下载链接包含在其中,这样处理后,在“2、内容采集规则”中可以进行下载。

将插件内容保存到软件安装目录中的plugins中,如p1.php这样。

在“4、其他设置”-“插件”-“http请求、响应修改插件”中选择保存的php程序,如p1.php。

插件代码如下:

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
/*
*外部编程接口处理标签内容示范文件
*该文件内自动系统的三个参数$LabelArray ,$LabelUrl
*对任意采集的标签都适用请对标签内容处理后直接将该数组serialize($LabelArray)输出,
*采集器内部即可接收到该标签的内容,对比以前的接口规则,新规则可以实现标签之间的数据调用和处理
*参数说明:
  *$LabelArray    -  标签名及标签内容集合 结构如:Array('栏目id' => 2,'出处'=>  '新浪微博','内容'=>'<center><b>暴笑短信')  ##
  *$LabelUrl      -  当前采集的页面的Url地址 
  *$LabelCookie   -  当前采集页面,服务器返回的Cookie信息。
  * 特别注意:如果是处理列表页,默认页,多页时会有以下两个标签
    $LabelArray['Html']       网页的源代码,没有经过采集器处理的,直接下载后的数据.修改这里的数据,请将新值赋予$LabelArray['Html']
    $LabelArray['PageType']   值可能为 List, Content ,Pages, Save 分别代表处理列表页,默认页,多页,保存时
*以上语句建议不更改,以下为用户操作区域  该区域只限对数组值进行操作,不得有打印输出产生,不得直接增加或删除相应标签名
*/
if ($LabelArray['PageType'] == "List") {
    //空
} else if ($LabelArray['PageType'] == "Content") {
	$arr = explode("xsplit=", $LabelUrl);
	$url = $arr[1];
 
	$LabelArray["Html"] = "<html><head><title>file download</title></head><body><a href={$url}>fileDownload</a></body></html>";
} else if ($LabelArray['PageType'] == "Save") {
    //空
}
//#############以上为用户操作区域#############################################################################################################################
//#############以下语句必须保留,建议不更改###################################################################################################################
//ob_clean();
echo serialize($LabelArray);
?>

原文地址:https://blog.csdn.net/euzen/article/details/108288418

本文链接: https://www.168itw.com/seo/huoche-pdf/
转载请注明转载自:168itw

发表评论

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