您的位置:晶晶的博客>PHP>PHP小试牛刀--阿狸表情图采集代码

PHP小试牛刀--阿狸表情图采集代码

先来几张,挺好玩的:

阿狸踢球 世界杯期间推出的

阿狸踢球

阿狸啃西瓜

阿狸有点梅西的影子了

------

直接开门见山,放出我采集好的包含1094个阿狸gif的压缩包下载地址,未压缩30几M,压缩完还有27M多,就不放我博客里了,直接百度网盘:

https://pan.baidu.com/s/1pJz7EER

鄙人常用阿狸系列的gif动态图做QQ聊天中的表情,找啊,找啊,找啊,找,找了半天最新的一些表情包网上都木有现成的打好包的文件,就直接去阿狸官方站瞧一瞧,果然有,不过只在https://www.a-li.com.cn/download/qq_emotion/index.php这个页面里有呢,37页,还不给打包下载,没办法只好自己写PHP代码自动去抓了,要是手动去一个一个下载,1094个gif图那不得烦死!

看了下阿狸官方站提供gif表情的网页,代码十分混乱;还是表格布局的网站,对我这种有代码洁癖的人来说,看到dd、dl这种标签就烦透了......最搞人的是他这个网页里竟然重复出现如下代码段:

<script src="./static/js/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function kq_zan(topic_id) {
   $.post("zan.php", { "aid": topic_id },function(data) {
		if(data=="ok"){
			alert("感谢您的支持!");
			location.reload();
		}else{
			alert("对不起,失败了!");
		}
	}, "text");
}
function need_login(){
   alert("对不起,请先登陆!");
   window.location.href='member.php?mod=logging&action=login';
}
</script>

----

本文不是纯分享一个gif包,也不是调侃阿狸网站的代码有多糟糕,而是分享一段自动抓取阿狸网站中的gif图的PHP代码。

直接上代码了,代码里会有注释。

<?PHP
/**Base Function***/

/**
* get远程文档
* @access public
* @param string $url 远程url
* @return mixed
*/
function GetUrl($url) {
	if (function_exists('file_get_contents')) {
		return file_get_contents($url);
	}
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	curl_setopt($ch, CURLOPT_URL, $url);
	$result =  curl_exec($ch);
	curl_close($ch);
	return $result;
}

/**
* 采集远程文件
* @access public
* @param string $remote 远程文件名
* @param string $local 本地保存文件名
* @return mixed
*/
function curlDownload($remote,$local) {
	$cp = curl_init($remote);
	$fp = fopen($local,"w");
	curl_setopt($cp, CURLOPT_FILE, $fp);
	curl_setopt($cp, CURLOPT_HEADER, 0);
	curl_exec($cp);
	curl_close($cp);
	fclose($fp);
}

/**采集代码开始干活的搞起**/
$BaseUrl 		= 	'https://www.a-li.com.cn/';
$EmotionUrl 	= 	$BaseUrl.'download/qq_emotion/index.php?page=';

//采集页面的开始与结束
$BeginPage 	= 	1;
$EndPage		=	37;//总页面数;阿狸官方站更新后 总页面数可能会变化 在此处配置

//$_SESSION['page'] = null;exit;//不注释该项重新初始化

//采用session记录采集到哪个页面
if(!$_SESSION['page']) {
	$Page = $BeginPage;
	$_SESSION['page'] = $Page;
}else {
	$Page = $_SESSION['page'] + 1;
	$_SESSION['page'] = $Page;
}
if($Page>$EndPage) {exit('活已干完!');}

//开始采集
$url = $EmotionUrl.$Page;
$string = GetUrl($url);
while(!$string) { //while 循环保证采集无误
	sleep(3);
	$string = GetUrl($url);
}
//正则匹配采集到的页面中的阿狸gif图片信息
$match  =	array();
$string = preg_replace('/<!--.*\s*.*-->/i','',$string);//去除html里的注释段  可以删掉
preg_match_all('/<img src="(data\/attachment.*\.gif)"\s+alt="(.*)"\s+.*\s+\/>/i',$string,$match,PREG_SET_ORDER);

//采集后的文件存储位置 检测文件夹不存在就创建
if(!is_dir('./ali/')) {
	mkdir('./ali/');
}

//检测匹配并循环下载采集到的gif图到与该PHP代码文件同级目录下的ali目录中
if($match) {
	foreach($match as $key=>$value) {
		$imgUrl = $BaseUrl.$value[1];
		$imgName = './ali/'.preg_replace('/\./','',$value[2]).'.gif';//使用匹配到的img标签中的alt作为本地保存gif图的文件名
		curlDownload($imgUrl,$imgName);
	}
}else {
	exit('匹配信息出错');
}
echo '<p>采集第'.$Page.'页中的阿狸gif图片完成。</p>';
echo '<p>1秒后继续自动执行下一个页面</p>';
echo '<script>setTimeout(function () {window.location.reload(true);},1000);</script>';
?>

复制如上php代码,保存为php文件,浏览器运行可以自动采集完成;这当中会有一个问题,就是php运行时间限制过短的时候会被kill掉,所以需要修改php运行时间限制与服务器相关运行时间限制,这个就不是今天讨论的问题了,有问题留言反馈吧!

转载请注明本文标题和链接:《PHP小试牛刀--阿狸表情图采集代码

相关推荐

哟嚯,本文评论功能关闭啦~

  1. #1

    博主你好,需要独立IP主机吗,现在有活动“独立IP主机 终生3.8折  最后20个资源”,赶紧抢购。。转发有奖

    香港独立IP主机 10年前 (2014-11-27) 回复
    • @香港独立IP主机:谢谢,不需要。鄙人现在使用的独立IP地址的阿里云主机

      晶晶 10年前 (2014-11-28) 回复
  2. #2

    感谢PO主。。,,,,。。。。

    不能发表? 10年前 (2014-11-16) 回复
  3. #3

    方法不賴。

    汤博客 10年前 (2014-11-06) 回复