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

评论(5) 引用(0) 浏览(9921)

使用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 插件

评论(1) 引用(0) 浏览(8849)

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 插件

评论(6) 引用(0) 浏览(10509)

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的乘车路线");

可以得到  由金泽大厦到百征科技大厦的乘车路线

标签: escape unescape php

评论(4) 引用(0) 浏览(8435)

Powered by emlog