高考试题库采集插件

某君要采集一个网站的收费试题,给写了一个插件,一个比较怪异的网站,下载算法有点意思,花了一点心思。没有使用Snoopy,而是使用了CURL函数。

这段时间在采集国内Android应用,逐渐开始封装一些常用Curl方法,在工作中能实现逐步调试和个性化数据请求。

这个插件是支持火车采集器内置插件的,但我机器上只有php5.2.11的环境,所以随带着把火车采集器的PHP版本库升级了一下。

升级方法很简单,将PHP5.2.11目录下的所有文件拷贝到火车的system目录下,然后把php.exe改成site.exe,site.ini就是php.ini了,可以进行各种配置。

注:以下代码非完整代码,仅供学习

[php]

<?php
/* 返回给火车的标签名 */
$label = 'download';

/* Cookie,用于模拟登陆 */
$cookie = "YOURCOOKIEHERE";

$id = $LabelArray [$label] ? $LabelArray [$label] : '44198cf44fafff9c';

/* 获取文件路径的地址,不用修改 */
$URI = 'http://www.4wei.cn/inc/chk_download.php';

/* 伪造数据 */
$headers [] = "Cookie: {$cookie}";
$headers [] = "Referer: http://www.4wei.cn/test/{$id}.html";

$url = "http://www.4wei.cn/speed.php?d={$id}";

$fileUrl = curl ( $url, '', $headers );
$fileUrl = curl ( $url, '', $headers );

if (empty ( $fileUrl )) {
$LabelArray [$label] = '';
} else {
preg_match('@href="([^"]+)"@is', $fileUrl, $match);

$LabelArray [$label] = $match[1];
}

echo serialize ( $LabelArray );

/*
* 提交数据
* $url 提交地址
* $content 提交内容
* $headers 请求头信息
*/
function curl($url, $content = "", $headers = "") {
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_TIMEOUT, 2 );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $content );

$data = curl_exec ( $ch );

if (curl_errno ( $ch )) {

return FALSE;

/*debug info*/
return curl_error ( $ch );
} else {
curl_close ( $ch );
}

return $data;
}

[/php]

以上的CURL方法由火车采集器官方的孤魂同志整理提供,将CURL常用的参数一一做了中文注释,造福我辈呀。

发表评论

回复 取消回复

评论列表(1)

  • 2011.12.9 12:12

    貌似我找孤魂写的。。。。。

    回复