PHP批量采集下载美女图片的实现代码
内容摘要
设计思路
考虑到单纯的采集一个网页的图片,太麻烦,所以直接采集他的列表页,获取列表的url然后在一一采集,但是用php匹配列表页的url太麻烦,第一列表页有很多无效url这对我这个
考虑到单纯的采集一个网页的图片,太麻烦,所以直接采集他的列表页,获取列表的url然后在一一采集,但是用php匹配列表页的url太麻烦,第一列表页有很多无效url这对我这个
文章正文
设计思路
考虑到单纯的采集一个网页的图片,太麻烦,所以直接采集他的列表页,获取列表的url然后在一一采集,但是用php匹配列表页的url太麻烦,第一列表页有很多无效url这对我这个正则小菜鸟实在是个问题,看了一下列表页的结构,果断采用jquery获取url,jquery的万能选择器又再次强大起来了。
jquery获取url,然后ajax传递url—>对应PHP文件,遍历url参数—->单页面采集保存图片
jquery程序
考虑到单纯的采集一个网页的图片,太麻烦,所以直接采集他的列表页,获取列表的url然后在一一采集,但是用php匹配列表页的url太麻烦,第一列表页有很多无效url这对我这个正则小菜鸟实在是个问题,看了一下列表页的结构,果断采用jquery获取url,jquery的万能选择器又再次强大起来了。
jquery获取url,然后ajax传递url—>对应PHP文件,遍历url参数—->单页面采集保存图片
jquery程序
PHP判断远程url是否有效的几种方法》有三种方法可以验证是否是有效url。
获取图片格式
$ext = pathinfo($v,PATHINFO_EXTENSION);//图片扩展
这里使用了pathinfo的方法,总结有7种方法可以获取到文件的格式,推荐文章:《PHP判断图片格式的七种方法》
下载保存到本地
file_put_contents('365/'.$dirname.'/'.$k.'.'.$ext,file_get_contents($v));
file_put_contents() 函数把一个字符串写入文件中。
与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
file_get_contents() 函数把整个文件读入一个字符串中。
因为服务器支持file_get_contents,如果服务器把这个函数禁用了,可以使用curl,这个工具要比file_get_contents更加强大,推荐学习《CURL的学习和应用(附多线程)》,可以使用curl的多线程下载存储,效果更牛逼
清除文件操作缓存
clearstatcache() 函数清除文件状态缓存。clearstatcache() 函数会缓存某些函数的返回信息,以便提供更高的性能。但是有时候,比如在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存,以便获得正确的结果。要做到这一点,就需要使用 clearstatcache() 函数。官方手册:
程序执行时间计算
获取图片格式
$ext = pathinfo($v,PATHINFO_EXTENSION);//图片扩展
这里使用了pathinfo的方法,总结有7种方法可以获取到文件的格式,推荐文章:《PHP判断图片格式的七种方法》
下载保存到本地
file_put_contents('365/'.$dirname.'/'.$k.'.'.$ext,file_get_contents($v));
file_put_contents() 函数把一个字符串写入文件中。
与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
file_get_contents() 函数把整个文件读入一个字符串中。
因为服务器支持file_get_contents,如果服务器把这个函数禁用了,可以使用curl,这个工具要比file_get_contents更加强大,推荐学习《CURL的学习和应用(附多线程)》,可以使用curl的多线程下载存储,效果更牛逼
清除文件操作缓存
clearstatcache() 函数清除文件状态缓存。clearstatcache() 函数会缓存某些函数的返回信息,以便提供更高的性能。但是有时候,比如在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存,以便获得正确的结果。要做到这一点,就需要使用 clearstatcache() 函数。官方手册:
程序执行时间计算
获取php页面执行时间,数据库读写次数,函数调用次数等【THINKPHP】》
最后看一下效果;
409秒采集了214张图片,大概2秒下载保存了一张图片,图片总大小约62M,这样看来:
一个小时60*60可以大约下载1800张美女图片。
最后看一下效果;
409秒采集了214张图片,大概2秒下载保存了一张图片,图片总大小约62M,这样看来:
一个小时60*60可以大约下载1800张美女图片。
代码注释