如何批量收集表情?——PHP代码解决S1麻将脸表情包实例

最近闲逛帖子,是这样的一个帖子点击进入,不经意在一个论坛看到他们使用的表情很有趣,于是起意想收集起来,看得出这是独自开发过论坛,虽然用的是phpwind,但在界面等方面做了不少修改,论坛的表情包算是亮点吧。网上说法叫S1麻将脸表情包

我大略估算了下:麻将脸:11*16+3=179    大姨妈:9    战斗力:7   扭曲:16        正常向:107    闪光弹:12     动物:11    动漫:18  雀高达:35

第一个分类居多,近200张,总共近400张。这着实工作量不小,所谓得鱼不如习渔,我想干脆就这个问题想一个好的解决方案,能解决类似的问题。我所熟悉的也就是php了,用c处理显然不太靠谱,java又不会,以下是我的求解过程:

一,下载图片用迅雷

显然如果页面全部显示了表情图片的话,使用迅雷或者QQ旋风等下载工具,“下载全部链接”,然后挑选出其中jpg、gif、png的,下载到本地,然后把不需要的剔除。但问题来了,比如第一类中200张做了分页处理,12页也就是我要重复“下载——剔除”的流程12次,这还只是麻将脸第一类。

结论:不可行

二、网页另存为

将网页存为html格式,并且选择“全部页面”的话,css以及图片等都会以一个独立文件夹形式提取出来,这是个不错的办法,但是和下载似乎没有实质区别,也并没有减少什么工作量。

结论:不可行

三、从IE缓存中获取

IE缓存中取图片,我却发现这个表情栏的图片使用的是即时加载,也就是你不点的话,其他分页或者分栏的图片并不下载到本地。而且还有问题,IE缓存在一起之后,不便于我们对表情分类收集,我们确实得到了不少图片,但还得花很多时间对这些表情分类,这无形中增加了额外的工作量。

结论:不可行

四,代码解决

是的,看到表情图片的地址是以数字命名,很自然想到用代码去自己爬取。c语言没有自带联网机制,java和.net有事不错,可惜我不会……,就用php了。

开始思路很简单,先通过php枚举出图片地址,再通过php远程获取图片的函数来获取图片,然后分类储存起来,网上找到了一个实例,代码也不麻烦,不过那两个函数我不熟悉,也懒得查手册。

只是我突然想到,怎么这么糊涂,我可以直接将图片放在img标签在浏览器里展示出来啊,然后借鉴方法二,网页另存为,那么得到的files文件夹里不就全是图片了?代码一点也不高深,也没有用到什么php扩展函数。

另外关于命名,最后发现这几类图片命名规则不统一:

一位命名法:1,2,3,4,5,6,7,8,9,10,11……,比如这个图片:雀高达http://bbs.saraba1st.com/2b/images/post/smile/bundam/7.png

二位命名法:01,02,03,04,05,06,07,08,09,10,11……,比如这个图片:麻将脸http://bbs.saraba1st.com/2b/images/post/smile/face/00.gif

三位命名法:001,002,003,004,005,006,007,008,009,010,011……,比如这个图片:正常向http://bbs.saraba1st.com/2b/images/post/smile/normal/093.gif

 

对不同分类采用的不同命名规则采用不同代码,但只是稍有差异。

代码如下【已预先将3类代码注释掉,使用哪个开启哪个,因为可以同时运行可能出错】:

<?php
 /*
 //二位命名规则部分
 $j[]="face";
 $j[]="dym";
 $j[]="zdl";
 $lei=$j[1];
 for($i=0;$i<300;$i++)
 {
  echo "<img src=\"http://bbs.saraba1st.com/2b/images/post/smile/".$lei."/";
  if($i<10)
  {echo "0";}
  echo $i.".gif\"/>";
  
  echo "<img src=\"http://bbs.saraba1st.com/2b/images/post/smile/".$lei."/";
  if($i<10)
  {echo "0";}
  echo $i.".jpg\"/>";
 }
 */ 

/*
 //三位命名规则部分
 $j[]="nq";
 $j[]="dym";
 $j[]="normal";
 $j[]="flash";
 $j[]="animal";
 $j[]="carton";
 $lei=$j[5]; 

for($i=0;$i<500;$i++)
 {
  echo "<img src=\"http://bbs.saraba1st.com/2b/images/post/smile/".$lei."/";
  if($i<10)
  {echo "0";}
  if($i<100)
  {echo "0";}
  echo $i.".gif\"/>";
  
  echo "<img src=\"http://bbs.saraba1st.com/2b/images/post/smile/".$lei."/";
  if($i<10)
  {echo "0";}
  if($i<100)
  {echo "0";}
  echo $i.".jpg\"/>";
 }
 */ 

/*
 //一位命名规则部分
 $lei="bundam";
 for($i=0;$i<500;$i++)
 {
  echo "<img src=\"http://bbs.saraba1st.com/2b/images/post/smile/".$lei."/";
  echo $i.".gif\"/>";
  
  echo "<img src=\"http://bbs.saraba1st.com/2b/images/post/smile/".$lei."/";
  echo $i.".jpg\"/>";
  
  echo "<img src=\"http://bbs.saraba1st.com/2b/images/post/smile/".$lei."/";
  echo $i.".png\"/>";
 }
 */ 

?> 

将显示的页面另存为“网页,全部”,需在IE内核浏览器中操作,因为显示中存在图像空缺位,其他内核浏览器可能将空缺位作为一张图保存(比如搜狗的高速浏览模式下的webkit内核),你还得自己后期去处理,建议用IE内核浏览器另存。

最后附上成果:S1麻将脸表情包全集下载:点击下载

浏览量(122) | 此条目发表在原百度博客文章分类目录。将固定链接加入收藏夹。