手机版

PHP批量采集下载美图的实现代码

时间:2021-11-19 来源:互联网 编辑:宝哥软件园 浏览:

设计思路考虑到简单的收集一个网页的图片太麻烦,所以直接收集他的列表页面,获取列表的url然后一个一个的收集。但是列表页面的url匹配php太麻烦了,第一个列表页面有很多无效的URL,这对于我这个普通菜鸟来说确实是个问题。看完列表页面的结构后,我果断的用jquery获取了URL,jquery的通用选择器再次强大起来。Jquery获取url,然后ajax传递url——对应于PHP文件,遍历URL参数——在单个页面上收集和保存图片。jquery程序的复制代码如下: scriptrc=' http3360http://www.cztv.com/uibase/jquery.js'/scriptscript $(文档)。ready (function () {varhrefs=' ')。$('.f _ foldera’)。每个(函数(i){ var href=$(')。f_folder:eq(' i ')a:eq(0 ')。attr(' href ');if(href!=' undefined '){ href=href ',';} }) $.getJSON('http://www。****.com/365/getig . PHP?hrefs=' hrefs '回调=?函数(数据){//alert(data . info);});});/script在这里,url被拼接成一个除以','的字符串来传递url,而getjson则用于跨域需求。关于getjson的一些常见问题,请参考$.getjson遇到的一些问题,PHP收集器的复制代码如下:Php //抓取365图片错误_报告(e _ all e _ notice);set _ time _ limit(0);//设置PHP超时/* * *获取当前时间*/函数get microtime () {list ($ usec,$ sec)=explode(',microtime());return((float)$ usec(float)$ sec);} $ stime=getMicrotime();$ callback=$ _ GET[' callback '];$ hrefs=$ _ GET[' hrefs '];$urlarray=explode(',',$ hrefs);//获取指定url的所有图片。函数getim GS($ URL){ $ dirname=base name($ URL,'。PHP’);if(!file _ exists($ dirname)){ mkdir(' 365/'。$dirname。');} clearstatcache();$ data=file _ get _ contents($ URL);preg _ match _ all('/(href | src)=([' | ']?)([^ ''] .(jpg|png|PNG|JPG|gif))\2/i ',$data,$ matches);//$ matches[3]=array _ unique($ matches[3]);未设置(数据);$ I=0;if(count($ matches[3])0){ foreach($ matches[3]as $ k=$ v){//简单判断是否是标准url而不是相对路径if (substr ($ v,0,4)=' http '){ $ ext=path info(。//图像扩展if(!file_exists('365/')。$dirname。/'.$k。$ext)){ file_put_contents('365/'。$dirname。/'.$k。$ext,file _ get _ contents($ v));$ I;} else { unset($ v);} clearstatcache();} else { unset($ v);} } unset($ matches);返回$ I;} } foreach($ URL array as $ k=$ v){ if($ v!=' '){ $ j=getim GS($ v);} } $ etime=getMicrotime();Echo“共收集了”。$ j. ' picturesEcho' takes。($etime-$stime)。”秒';考虑性能问题:getimgs方法中使用的变量在使用后不设置,以释放内存。专为判断是否是标准有效图片url而设计的几个知识点if(substr($v,0,4)=' http ')这只是简单的判断匹配的图片url是否是标准url,因为采集的图片可能是相对路径的,所以我在这里直接放弃这张图片的采集,当然你也可以将这张图片还原成标准图片路径。另一个问题是,即使在标准的url格式中,这样的图片也可能不会被收集,因为你不知道这张图片是否还存在,也许这张图片的url是无效的。如果你想更严格的判断这个图片网址是否真实有效,可以推荐阅读我之前的《PHP判断远程url是否有效的几种方法》。有三种方法可以验证它是否是有效的url。获取图片格式$ ext=pathinfo ($ v,path info _ extension);//图像扩展这里使用的是pathinfo方法,获取文件格式有七种方法。推荐文章:《PHP判断图片格式的七种方法》下载并保存到本地file _ put _ contents ('365/')。$ dirname。'/'.$ k。$ ext,file _ get _ contents ($ v)。函数的作用是:将一个字符串写入一个文件。这与依次调用fopen()、fwrite()和fclose()函数相同。函数的作用是:将整个文件读入一个字符串。

因为服务器支持file_get_contents,所以如果服务器禁用了这个功能,可以使用curl,它比file_get_contents更强大。建议学习《CURL的学习和应用(附多线程)》,可以使用curl的多线程下载存储,在清除文件操作缓存clearstatcache()函数clearstatcache时更有效。Clearstatcache()函数缓存一些函数的返回信息,以便提供更高的性能。但是,有时,例如,当在脚本中多次检查同一个文件,并且该文件在脚本执行期间有被删除或修改的危险时,您需要一个clearstatcache来获得正确的结果。为此,您需要使用clearstatcache()函数。官方手册:程序执行时间计算的代码如下: /** *获取当前时间*/函数获取microtime () {list ($ usec,$ sec)=explode(',microtime());return((float)$ usec(float)$ sec);}您可以参考这篇博文;103010最后看效果;

在409秒内收集了214张图片,大约2秒内下载并保存了一张图片。图片总尺寸约62M,看起来60*60小时可以下载约1800张美女图片。

版权声明:PHP批量采集下载美图的实现代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。