用Curl伪装成百度蜘蛛替代file_get_contents批量获取网页/图片

2014年04月24日 17:06 by:老修

导读: 首先file_get_contents批量获取网页/远程图片的时候会很慢, 如果文件太大太多可能会服务器会卡死影响其它用户, 那么用Curl替代file_get_contents是比较完美的方式, php的curl很强大, 支持多线程, 当然也可以在抓取的时候伪装成百度蜘蛛来防止被发现封ip.

分享点干货, file_get_contents 获取远程图片的时候很慢,  用Curl伪装成百度蜘蛛替代file_get_contents 批量获取网页/图片则非常高效. 

Curl 批量抓取网页或远程图片的代码:

  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. date_default_timezone_set('PRC');
  4. error_reporting(E_ALL | E_STRICT); 
  5. ini_set("display_errors", "On"); 
  6. echo getcontent("http://www.lao8.org");//调用方式比较简单
  7. function getcontent($weburl){
  8. /* 
  9. 本段代码由老修提供, 转载请备注出处 www.lao8.org
  10. 调用方式比较简单: echo getcontent($url); 可以抓取网页/也可以抓取图片
  11. 批量抓取的时候用file_get_contents可能会飙升服务器cpu和内存, 而 curl方式则不会, 而且还可以伪装马甲防止批量抓取被发现封ip.
  12. */
  13. $curl = curl_init();
  14. curl_setopt($curl, CURLOPT_URL, $weburl); 
  15. curl_setopt($curl, CURLOPT_REFERER, 'http://www.lao8.org');//伪装一个来路
  16. curl_setopt($curl, CURLOPT_USERAGENT, 'Baiduspider+(+http://www.baidu.com/search/spider.htm)'); //伪装成百度蜘蛛 
  17. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  18. curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); //抓取转跳
  19. curl_setopt($curl, CURLOPT_BINARYTRANSFER, true) ;
  20. curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); //gzip解压
  21. curl_setopt($curl,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"); 
  22. $data = curl_exec($curl);
  23. // $infos = (curl_getinfo($curl));//返回抓取网页参数的值(数组);
  24. curl_close($curl);
  25. return $data;
  26. }
  27. ?>