c 釆集php网页,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

作者:小文 发布于:2011-6-1 14:59 Wednesday

分类:软件培训

有的网站使用多种模板显示分页地址,这种情况下我们要获取分页地址就非常困难了。不过我们可以通过插件的功能,自己编写程序判断并生成分页的地址,然后让采集器去获取到。我们的例子如下:

本次测试的网址:

http://www.diyifanwen.com/fanwen/lunwenzhidao/1141715512857992.htm

http://www.diyifanwen.com/fanwen/zhuchici/20101011222334115874624.htm

我们分析其分页地址,可以看到不同的分页样式和代码

95967f6a7cfece060bf5b3da86638b55.png

0f86ae55f00e84b813369ef2d3462749.png

ed8298b0d995818ee9f22078a12977d4.png

5771f7c8d4d5db3ad152852e58ee70b0.png

对于这种基本没规律的分页,我们无法判断分页的区域,也无法直接得知其总分页数,该怎么办呢?

经分析可以得知,分页的规律是在原网址后加上分页页码,如 默认页是1141715512857992.htm,则分页是 1141715512857992_2.htm 。因为这个分页是全部列出的,我们就有办法了:可以去循环查找是否有分页地址存在,有存在则说明有这个分页,然后我们生成存在的网页地址即可。我们用php来写插件。

0c85d38d286e78d58631cd83aa0ee7e6.png

插件中判断了当前页面类型,然后对整个内容页代码进行修改,生成有分页的代码。

在采集器中,插件使用位置如下

57679af9c881b8cd0ee1e20e1c7beefd.png

最后的结果如下

7cef338de9e4452a868516d421e1e3ca.png

注意设置这里的分页区域和插件中的一致。

到这里,这个分页的处理就完成了。

如果我们有时遇到更复杂的怎么办,如 无法确认有几个分页,是上下页模式的,这时用插件可以使用笨办法,先探测一下下一页是否存在,如果存在则加入,不存在就跳过。

附件中为本次的规则和插件。大家可以再研究一下。

作者:小文 发布于:2010-9-15 11:12 Wednesday

分类:软件培训

火车采集器中列表页插件是用来处理采网址时采集的网页源代码的.插件可以对源代码进行处理,然后采集器从处理过的代码中分析网址或是采集数据和网址.

35024bd4c97079bc8cbbaf71c685a20c.png

今天我们以采集 http://news.hexun.com/ 的网址为例,比如我们只采集包含有当天日期的网址,比如今天是 2010-09-15,那么只有网址中有这个日期代码的才可以被我们采集到.

我们的处理思路就是用插件提取所有符合条件的网址,然后生成链接地址,那么,最后采集器采集到的网址就是符合条件的网址了.

91f8c6bd2e1dcf5e21e5074bcb0d1c5a.png

具体请看插件代码

/*

*火车采集器外部编程接口处理标签内容示范文件

*该文件内自动系统的三个参数$LabelArray $LabelCookie,$LabelUrl

*对任意采集的标签都适用请对标签内容处理后直接将该数组serialize($LabelArray)输出,

*采集器内部即可接收到该标签的内容,对比以前的接口规则,新规则可以实现标签之间的数据调用和处理

*参数说明:

*$LabelArray    -  标签名及标签内容集合 结构如:Array('栏目id' => 2,'出处'=>  'www.locoy.com','作者'=>'火车采集器','内容'=>'

暴笑短信')  ##

*$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']='';

}

}

}

//#############以上为用户操作区域#############################################################################################################################

//#############以下语句必须保留,建议不更改###################################################################################################################

//ob_clean();

echo serialize($LabelArray);

?>

作者:小文 发布于:2010-8-28 12:53 Saturday

分类:其它资源

有的网站会将中文字进行Escape编码,然后在显示时用unescape再进行转换.比如有这么一段代码

广州公交查询-由%u91D1%u6CFD%u5927%u53A6到%u767E%u5F81%u79D1%u6280%u5927%u53A6的乘车路线

这个是经过Escape编码的.我们需要在PHP中将其解密.在网上搜索后,得到加密和解密代码.

function unescape($str) { //这个是解密用的

$str = rawurldecode($str);

preg_match_all("/%u.{4}|.{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) == "")

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值