预览模式: 普通 | 列表

Php图文采集的基本原理和代码实例

原理:
1.以字符串形式得到某网页。
2.在字符串中截取想要的内容。
3.对截取到的内容进行相应的处理。本例程中主要对截取内容中的图片进行本地话处理 。

PHP代码
  1. //本程序为初学者入门,你可以随意更改使用  
  2. //如有问题或有什么改进和优化,还望与我分享 QQ:297535861  
  3. //与你一块进步。  
  4. //2007-12-26  
  5. function str_substr($str ,$statr$end) { //字符串截取函数  
  6.   $x = strpos($str$statr);  
  7.   return substr($str,  $x+strlen($start), strpos($str$end)-$x+strlen($end));    
  8. }  
  9. //////////////////////////////////////////////////  
  10. $url="http://www.XXXXXXX.XXX/XXX";//给据采集内容自己定,这句上传后给自动加了连接,请去掉  
  11. $str=file_get_contents($url); ///file_get_contents -- 将整个文件读入一个字符串  
  12. $start='#######';//截取内容前的html  最后网页中唯一  
  13. $end='########';//截取内容后的html 最后网页中唯一  
  14. $content=str_substr($str , $start$end);  
  15. //echo $content; //测试采集到的内容  
  16. echo '<hr>';  
  17. ///////////////////////////////////////////////////  
  18. $img_array = array();   
  19. $content1 = stripslashes($content); //stripslashes函数作用是去掉字符串中的转义字符\  
  20. if (get_magic_quotes_gpc()) $content1 = stripslashes($content1);   
  21. //echo $content1;//文章内容嘿嘿开始处理了   
  22. preg_match_all("/(src|SRC)=\"(http:\/\/(.+)\/(.+).(gif|jpg|jpeg|bmp|png))/isU",$content1,$img_array,PREG_PATTERN_ORDER);//正则开始匹配所有的图片并放入数组$img_array中 ,=匹配规则可根据具体情况改写,这个通用性不强,还望那位高手给个通吃的匹配=  
  23. $img_array = array_unique($img_array[2]); //array_unique -- 移除数组中重复的值,$img_array[2]到现在没有高清楚,猜想可能是取出二维数组中的某组。  
  24. //print_r($img_array); //测试匹配到的内容  
  25. set_time_limit(0); //限定最大执行时间  
  26.   
  27. //开始保存匹配内容中图片,修改名称并保存的本地文件夹中  
  28. foreach ($img_array as $key => $value) { //使用循环语句把匹配到的数组内容(图片)进行一一处理  
  29. if(file_get_contents($value)) $get_file = file_get_contents($value);//开始获取图片了哦 使用file_get_contents得到文件  
  30. else dir("出错");  
  31. $filetime = time(); //得到时间戳  
  32. $filepath = "pic2/".date("Ym",$filetime)."/";//图片保存的路径目录   
  33. !is_dir($filepath) ? mkdir($filepath) : null;  //如果目录不存在,则创建目录,注意:要有相应的目录权限。  
  34. $filename = date("YmdHis",$filetime).rand(100,999).'.'.substr($value,-3,3); //生成文件名,rand(100,999)的作用是防止文件名重复  
  35. $fp = @fopen($filepath.$filename,"w"); //以写方式打开文件  
  36. @fwrite($fp,$get_file); //  
  37. fclose($fp);//完工,哈   
  38. $content1 = preg_replace("/".addcslashes($value,"/")."/isU""pic2/".date("Ym",$filetime)."/".$filename$content1);  //顺便替换一下文章里面的图片地址  
  39. echo $value.'=>'.'pic2/'.date('Ym',$filetime).'/'.$filename.'<br>';  //测试图片复制前后,路径是否正常。  
  40. }   
  41. echo '<hr>';  
  42. echo $content1//可把$content1存入数据库  

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2027

PHP中使用curl取得HTTP状态码

PHP中使用curl取得HTTP状态码 

PHP代码
  1. $curl = curl_init();  
  2. $url=’http://www.smdcn.net’;  
  3. curl_setopt($curl, CURLOPT_URL, $url); //设置URL  
  4. curl_setopt($curl, CURLOPT_HEADER, 1); //获取Header  
  5. curl_setopt($curl,CURLOPT_NOBODY,true); //Body就不要了吧,我们只是需要Head  
  6. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //数据存到成字符串吧,别给我直接输出到屏幕了  
  7. $data = curl_exec($curl); //开始执行啦~  
  8. echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦~  
  9. curl_close($curl); //用完记得关掉他  

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3333

Php远程获取图片类

PHP代码
  1. if ( ! defined('BASEPATH')) exit('No direct script access allowed');  
  2. /* 
  3.  * 远程获取图片类 
  4.  *  
  5.  * 要求开启curl扩展 
  6.  * 模拟php上传原理,创建一个缓存目录,将远程获取的文件存放到缓存目录下.  
  7.  *  
  8.  *  
  9.  */  
  10.   
  11. class url_pic{  
  12.       
  13.     protected $cache//缓存路径  
  14.       
  15.     public function  __construct($cache='')  
  16.     {  
  17.         if(!emptyempty($cache))  
  18.         {  
  19.             $this->cache = $cache;  
  20.         }  
  21.         else  
  22.         {  
  23.             $this->cache = 'uploads/cache/';  
  24.         }  
  25.     }  
  26.       
  27.     //设置缓存目录  
  28.     public function set_cache($cache='')  
  29.     {  
  30.         if(!emptyempty($cache))  
  31.         {  
  32.             $this->cache = $cache;  
  33.         }  
  34.     }  
  35.     /* 
  36.      * 获取远程图片 将文件存入cache文件夹 
  37.      *  
  38.      * $url 获取远程的文件的链接 
  39.      * $error  
  40.      * @return 777 则返回不能建立文件夹  
  41.      * @return 存入缓存的文件名 
  42.      */  
  43.     public function get_file($url,$error=777)  
  44.     {  
  45.             $path = $this->build_folder($this->cache);  
  46.             if($path==false) return $error;  
  47.               
  48.             $curl = curl_init();  
  49.             // 设置你需要抓取的URL  
  50.             curl_setopt($curl, CURLOPT_URL, $url);  
  51.             // 设置header  
  52.             curl_setopt($curl, CURLOPT_HEADER, 0);  
  53.             // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。  
  54.             curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  55.             // 运行cURL,请求网页  
  56.             $file = curl_exec($curl);  
  57.             // 关闭URL请求  
  58.             curl_close($curl);  
  59.               
  60.             //将文件写入获得的数据  
  61.             $filename = $this->cache.date("YmdHis");  
  62.             if(self::build_file($file$filename)==false)  
  63.             {  
  64.                 return false;  
  65.             }  
  66.             return $filename;  
  67.     }  
  68.       
  69.     //建立文件夹  
  70.     public function build_folder($dir)  
  71.     {  
  72.         if (!is_dir($dir))  
  73.         {  
  74.             if (!mkdir($dir,0777,TRUE) || !chmod($dir,0777))  
  75.             {  
  76.                     return false;  
  77.             }  
  78.         }  
  79.         return true;  
  80.     }  
  81.       
  82.     /* 
  83.      * 移动文件 模拟php的move_uploaded_file方法 
  84.      *  
  85.      * $cache 缓存文件路径 
  86.      * $filename 需要生成的文件名的绝对路径 
  87.      *  
  88.      * @return $filename 
  89.      */  
  90.     public function move_file($cache,$filename)  
  91.     {  
  92.         $file = @file_get_contents($cache);  
  93.         if(self::build_file($file$filename)==false)  
  94.         {  
  95.             return false;  
  96.         }  
  97.         unlink($cache); //清除缓存图片  
  98.         return $filename;  
  99.     }  
  100.       
  101.     /* 
  102.      * 生成文件 
  103.      * $file 需要写入的文件或者二进制流 
  104.      * $newname 需要生成的文件名的绝对路径 
  105.      */  
  106.     protected static function build_file($file,$filename)  
  107.     {  
  108.         $write = @fopen($filename,"w");  
  109.         if($write==false)  
  110.         {  
  111.             return false;  
  112.         }  
  113.         if(fwrite($write,$file)==false)  
  114.         {  
  115.             return false;  
  116.         }  
  117.         if(fclose($write)==false)  
  118.         {  
  119.             return false;  
  120.         }  
  121.         return true;   
  122.     }  
  123.   
  124. }  
 

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2323

Php中curl应用实例

 

PHP代码
  1. /*curl实例 
  2. */  
  3. $curl = curl_init();  
  4.    
  5. // 设置你需要抓取的URL  
  6. curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/img/baidu_sylogo1.gif');  
  7.    
  8. // 设置header  
  9. curl_setopt($curl, CURLOPT_HEADER, 0);  
  10.    
  11. // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。  
  12. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  13.   
  14. // 设置超时时间  
  15. curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);   
  16.    
  17. // 运行cURL,请求网页  
  18. $data = curl_exec($curl);  
  19. if($data === false){  
  20.     echo curl_error($curl);exit;  
  21. }  
  22. $info = curl_getinfo($curl);  
  23. // 关闭URL请求  
  24. curl_close($curl);  
  25.    
  26.    
  27. // 显示获得的数据  
  28. //var_dump($info);  
  29. var_dump($data);  

 

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2021

PHP中使用CURL伪造来路抓取页面或文件

PHP中使用CURL伪造来路抓取页面或文件

PHP代码
  1. // 初始化   
  2. $curl = curl_init();   
  3. // 要访问的网址   
  4. curl_setopt($curl, CURLOPT_URL, 'https://blog.guanjianci.net/');   
  5. // 设置来路   
  6. curl_setopt($curl, CURLOPT_REFERER, 'http://google.com/');   
  7. // 不直接输入内容   
  8. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   
  9. // 降结果保存在$result中   
  10. $result = curl_exec($curl);   
  11. // 关闭   
  12. curl_close($curl);   

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2653

 广告位

↑返回顶部↑