先来几张,挺好玩的:
阿狸踢球
阿狸啃西瓜
阿狸有点梅西的影子了
------
直接开门见山,放出我采集好的包含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小试牛刀--阿狸表情图采集代码》
博主你好,需要独立IP主机吗,现在有活动“独立IP主机 终生3.8折 最后20个资源”,赶紧抢购。。转发有奖