<p>首先file_get_contents批量获取网页/远程图片的时候会很慢, 如果文件太大太多可能会服务器会卡死影响其它用户, 那么用Curl替代file_get_contents是比较完美的方式, php的curl很强大, 支持多线程, 当然也可以在抓取的时候伪装成百度蜘蛛来防止被发现封ip.</p><p>分享点干货, file_get_contents 获取远程图片的时候很慢, 用Curl伪装成百度蜘蛛替代file_get_contents 批量获取网页/图片则非常高效.</p><p>Curl 批量抓取网页或远程图片的代码:</p><pre class="brush:php;toolbar:false">&lt;?php header(&quot;Content-Type:text/html;charset=utf-8&quot;); date_default_timezone_set(&#39;PRC&#39;); error_reporting(E_ALL|E_STRICT); ini_set(&quot;display_errors&quot;,&quot;On&quot;); echogetcontent(&quot;http://www.lao8.org&quot;);//调用方式比较简单 functiongetcontent($weburl){ /* 本段代码由老修提供,转载请备注出处www.lao8.org 调用方式比较简单:echogetcontent($url);可以抓取网页/也可以抓取图片 批量抓取的时候用file_get_contents可能会飙升服务器cpu和内存,而curl方式则不会,而且还可以伪装马甲防止批量抓取被发现封ip. */ $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$weburl); curl_setopt($curl,CURLOPT_REFERER,&#39;http://www.lao8.org&#39;);//伪装一个来路 curl_setopt($curl,CURLOPT_USERAGENT,&#39;Baiduspider+(+http://www.baidu.com/search/spider.htm)&#39;);//伪装成百度蜘蛛 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);//抓取转跳 curl_setopt($curl,CURLOPT_BINARYTRANSFER,true); curl_setopt($curl,CURLOPT_ENCODING,&#39;gzip,deflate&#39;);//gzip解压 curl_setopt($curl,CURLOPT_USERAGENT,&quot;Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR1.1.4322;.NETCLR2.0.50727)&quot;); $data=curl_exec($curl); //$infos=(curl_getinfo($curl));//返回抓取网页参数的值(数组); curl_close($curl); return$data; } ?&gt;</pre>
T:0.016223s,M:157.16 KB
返回顶部 留言