v7版本中PHP环境的修改
作者:小文 发布于:2012-7-26 17:33 Thursday 分类:常见问题
火车采集器支持php插件对数据进行处理。php插件的原理简单,是通过调用命令行的php.exe,对数据进行处理。v7版本的php目录为 System\PHP 。
采集器默认的php环境可能会无法满足用户的需要。这时,您可以更换您自己的php环境。需要注意的是php的工作目录是 System\PHP ,您可以直接将自己的php环境复制过来。注意的是该目录下的interface.php文件必须要保留。在更换完成后,请检查一下php.ini,看配置中的各种相对目录是否正确。测试无误后就可以使用了。
标签: php
使用php插件应对不同格式的分页样式
作者:小文 发布于:2011-6-1 14:59 Wednesday 分类:软件培训
有的网站使用多种模板显示分页地址,这种情况下我们要获取分页地址就非常困难了。不过我们可以通过插件的功能,自己编写程序判断并生成分页的地址,然后让采集器去获取到。我们的例子如下:
本次测试的网址:
http://www.diyifanwen.com/fanwen/lunwenzhidao/1141715512857992.htm
http://www.diyifanwen.com/fanwen/zhuchici/20101011222334115874624.htm
我们分析其分页地址,可以看到不同的分页样式和代码
对于这种基本没规律的分页,我们无法判断分页的区域,也无法直接得知其总分页数,该怎么办呢?
经分析可以得知,分页的规律是在原网址后加上分页页码,如 默认页是1141715512857992.htm,则分页是 1141715512857992_2.htm 。因为这个分页是全部列出的,我们就有办法了:可以去循环查找是否有分页地址存在,有存在则说明有这个分页,然后我们生成存在的网页地址即可。我们用php来写插件。
插件中判断了当前页面类型,然后对整个内容页代码进行修改,生成有分页的代码。
在采集器中,插件使用位置如下
最后的结果如下
注意设置这里的分页区域和插件中的一致。
到这里,这个分页的处理就完成了。
如果我们有时遇到更复杂的怎么办,如 无法确认有几个分页,是上下页模式的,这时用插件可以使用笨办法,先探测一下下一页是否存在,如果存在则加入,不存在就跳过。
附件中为本次的规则和插件。大家可以再研究一下。
PHP采网址(列表页处理)插件的开发方法
作者:小文 发布于:2010-9-15 11:12 Wednesday 分类:软件培训
火车采集器中列表页插件是用来处理采网址时采集的网页源代码的.插件可以对源代码进行处理,然后采集器从处理过的代码中分析网址或是采集数据和网址.
今天我们以采集 http://news.hexun.com/ 的网址为例,比如我们只采集包含有当天日期的网址,比如今天是 2010-09-15,那么只有网址中有这个日期代码的才可以被我们采集到.
我们的处理思路就是用插件提取所有符合条件的网址,然后生成链接地址,那么,最后采集器采集到的网址就是符合条件的网址了.
具体请看插件代码
<?php
/*
*火车采集器外部编程接口处理标签内容示范文件
*该文件内自动系统的三个参数$LabelArray $LabelCookie,$LabelUrl
*对任意采集的标签都适用请对标签内容处理后直接将该数组serialize($LabelArray)输出,
*采集器内部即可接收到该标签的内容,对比以前的接口规则,新规则可以实现标签之间的数据调用和处理
*参数说明:
*$LabelArray - 标签名及标签内容集合 结构如:Array('栏目id' => 2,'出处'=> 'www.locoy.com','作者'=>'火车采集器','内容'=>'<center><b>暴笑短信') ##
*$LabelCookie - 对应采集中用到的Cookie值
*$LabelUrl - 当前采集的页面的Url地址
* 特别注意:如果是处理列表页,默认页,多页时会有以下两个标签
$LabelArray['Html'] 网页的源代码,没有经过采集器处理的,直接下载后的数据.修改这里的数据,请将新值赋予$LabelArray['Html']
$LabelArray['PageType'] 值可能为 List, Pages, Content 分别代表处理列表页,多页,默认页
* @Copyright Copyright (c) 2005-2010 http://www.locoy.com
* @Version LocoySpider 2010 or later
* @Licence Support On LocoySpider Standard and Enterprise Edition
*以上语句建议不更改,以下为用户操作区域 该区域只限对数组值进行操作,不得有打印输出产生,不得直接增加或删除相应标签名
*/
if($LabelArray['Html'])
{
if($LabelArray['PageType']=='List')
{
$urlArr=array();
$html=$LabelArray['Html'];
$today=date("Y-m-d",time());
preg_match_all("/href=\"([^\"]*?\.html)\"/",$html,$mcs);
//var_dump($mcs);
if(count($mcs)>0)
{
foreach($mcs[1] as $url)
{
if(strpos($url,$today)>0) $urlArr[]=$url;
}
$LabelArray['Html']='<a href="'.implode('"><a href="',$urlArr).'">';
}
}
}
//#############以上为用户操作区域#############################################################################################################################
//#############以下语句必须保留,建议不更改###################################################################################################################
//ob_clean();
echo serialize($LabelArray);
?>
PHP对escape的字符串进行解密
作者:小文 发布于:2010-8-28 12:53 Saturday 分类:其它资源
Escape是js 脚本的一种加密字符串的方式.具体详情可以参见http://www.w3school.com.cn/js/jsref_unescape.asp
有的网站会将中文字进行Escape编码,然后在显示时用unescape再进行转换.比如有这么一段代码
<title>广州公交查询-由%u91D1%u6CFD%u5927%u53A6到%u767E%u5F81%u79D1%u6280%u5927%u53A6的乘车路线</title>
这个是经过Escape编码的.我们需要在PHP中将其解密.在网上搜索后,得到加密和解密代码.
<?php
function unescape($str) { //这个是解密用的
$str = rawurldecode($str);
preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
elseif(substr($v,0,3) == "&#x")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
function phpescape($str){//这个是加密用的
preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$newstr);
$ar = $newstr[0];
foreach($ar as $k=>$v){
if(ord($ar[$k])>=127){
$tmpString=bin2hex(iconv("GBK","ucs-2",$v));
if (!eregi("WIN",PHP_OS)){
$tmpString = substr($tmpString,2,2).substr($tmpString,0,2);
}
$reString.="%u".$tmpString;
} else {
$reString.= rawurlencode($v);
}
}
return $reString;
}
?>
我们测试一下
echo unescape("由%u91D1%u6CFD%u5927%u53A6到%u767E%u5F81%u79D1%u6280%u5927%u53A6的乘车路线");
可以得到 由金泽大厦到百征科技大厦的乘车路线
联系我们
联系电话
-
0551-62864156
QQ邮件订阅
最新评论
- industrialegy
<a href="http://www.... - inve
这个采集到的视频地址 应该不是真实地址... - 云南桥架厂
我能说这个妹不错么 - 密密麻麻
win10 64位,处理后会留下原压缩包... - 平行进口车
以前经常用火车,来支持一下。 - 天津网站建设
文章采集器,厉害了 - 骗子医院
这个可以试试! - qq昵称
这么好的帖子,必须顶起来!! - 哈尔滨舒家网
试用一下,看是否能用。希望能用。火车头业... - 誉非
这个下载下来是安装程序,不是视频教程啊。