Php图文采集的基本原理和代码实例
作者:admin 日期:2012-04-21
原理:
1.以字符串形式得到某网页。
2.在字符串中截取想要的内容。
3.对截取到的内容进行相应的处理。本例程中主要对截取内容中的图片进行本地话处理 。
PHP代码
- //本程序为初学者入门,你可以随意更改使用
- //如有问题或有什么改进和优化,还望与我分享 QQ:297535861
- //与你一块进步。
- //2007-12-26
- function str_substr($str ,$statr, $end) { //字符串截取函数
- $x = strpos($str, $statr);
- return substr($str, $x+strlen($start), strpos($str, $end)-$x+strlen($end));
- }
- //////////////////////////////////////////////////
- $url="http://www.XXXXXXX.XXX/XXX";//给据采集内容自己定,这句上传后给自动加了连接,请去掉
- $str=file_get_contents($url); ///file_get_contents -- 将整个文件读入一个字符串
- $start='#######';//截取内容前的html 最后网页中唯一
- $end='########';//截取内容后的html 最后网页中唯一
- $content=str_substr($str , $start, $end);
- //echo $content; //测试采集到的内容
- echo '<hr>';
- ///////////////////////////////////////////////////
- $img_array = array();
- $content1 = stripslashes($content); //stripslashes函数作用是去掉字符串中的转义字符\
- if (get_magic_quotes_gpc()) $content1 = stripslashes($content1);
- //echo $content1;//文章内容嘿嘿开始处理了
- preg_match_all("/(src|SRC)=\"(http:\/\/(.+)\/(.+).(gif|jpg|jpeg|bmp|png))/isU",$content1,$img_array,PREG_PATTERN_ORDER);//正则开始匹配所有的图片并放入数组$img_array中 ,=匹配规则可根据具体情况改写,这个通用性不强,还望那位高手给个通吃的匹配=
- $img_array = array_unique($img_array[2]); //array_unique -- 移除数组中重复的值,$img_array[2]到现在没有高清楚,猜想可能是取出二维数组中的某组。
- //print_r($img_array); //测试匹配到的内容
- set_time_limit(0); //限定最大执行时间
- //开始保存匹配内容中图片,修改名称并保存的本地文件夹中
- foreach ($img_array as $key => $value) { //使用循环语句把匹配到的数组内容(图片)进行一一处理
- if(file_get_contents($value)) $get_file = file_get_contents($value);//开始获取图片了哦 使用file_get_contents得到文件
- else dir("出错");
- $filetime = time(); //得到时间戳
- $filepath = "pic2/".date("Ym",$filetime)."/";//图片保存的路径目录
- !is_dir($filepath) ? mkdir($filepath) : null; //如果目录不存在,则创建目录,注意:要有相应的目录权限。
- $filename = date("YmdHis",$filetime).rand(100,999).'.'.substr($value,-3,3); //生成文件名,rand(100,999)的作用是防止文件名重复
- $fp = @fopen($filepath.$filename,"w"); //以写方式打开文件
- @fwrite($fp,$get_file); //
- fclose($fp);//完工,哈
- $content1 = preg_replace("/".addcslashes($value,"/")."/isU", "pic2/".date("Ym",$filetime)."/".$filename, $content1); //顺便替换一下文章里面的图片地址
- echo $value.'=>'.'pic2/'.date('Ym',$filetime).'/'.$filename.'<br>'; //测试图片复制前后,路径是否正常。
- }
- echo '<hr>';
- echo $content1; //可把$content1存入数据库
PHP中使用curl取得HTTP状态码
作者:admin 日期:2012-04-21
PHP中使用curl取得HTTP状态码
PHP代码
- $curl = curl_init();
- $url=’http://www.smdcn.net’;
- curl_setopt($curl, CURLOPT_URL, $url); //设置URL
- curl_setopt($curl, CURLOPT_HEADER, 1); //获取Header
- curl_setopt($curl,CURLOPT_NOBODY,true); //Body就不要了吧,我们只是需要Head
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //数据存到成字符串吧,别给我直接输出到屏幕了
- $data = curl_exec($curl); //开始执行啦~
- echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦~
- curl_close($curl); //用完记得关掉他
Php远程获取图片类
作者:admin 日期:2012-04-21
PHP代码
- if ( ! defined('BASEPATH')) exit('No direct script access allowed');
- /*
- * 远程获取图片类
- *
- * 要求开启curl扩展
- * 模拟php上传原理,创建一个缓存目录,将远程获取的文件存放到缓存目录下.
- *
- *
- */
- class url_pic{
- protected $cache; //缓存路径
- public function __construct($cache='')
- {
- if(!emptyempty($cache))
- {
- $this->cache = $cache;
- }
- else
- {
- $this->cache = 'uploads/cache/';
- }
- }
- //设置缓存目录
- public function set_cache($cache='')
- {
- if(!emptyempty($cache))
- {
- $this->cache = $cache;
- }
- }
- /*
- * 获取远程图片 将文件存入cache文件夹
- *
- * $url 获取远程的文件的链接
- * $error
- * @return 777 则返回不能建立文件夹
- * @return 存入缓存的文件名
- */
- public function get_file($url,$error=777)
- {
- $path = $this->build_folder($this->cache);
- if($path==false) return $error;
- $curl = curl_init();
- // 设置你需要抓取的URL
- curl_setopt($curl, CURLOPT_URL, $url);
- // 设置header
- curl_setopt($curl, CURLOPT_HEADER, 0);
- // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- // 运行cURL,请求网页
- $file = curl_exec($curl);
- // 关闭URL请求
- curl_close($curl);
- //将文件写入获得的数据
- $filename = $this->cache.date("YmdHis");
- if(self::build_file($file, $filename)==false)
- {
- return false;
- }
- return $filename;
- }
- //建立文件夹
- public function build_folder($dir)
- {
- if (!is_dir($dir))
- {
- if (!mkdir($dir,0777,TRUE) || !chmod($dir,0777))
- {
- return false;
- }
- }
- return true;
- }
- /*
- * 移动文件 模拟php的move_uploaded_file方法
- *
- * $cache 缓存文件路径
- * $filename 需要生成的文件名的绝对路径
- *
- * @return $filename
- */
- public function move_file($cache,$filename)
- {
- $file = @file_get_contents($cache);
- if(self::build_file($file, $filename)==false)
- {
- return false;
- }
- unlink($cache); //清除缓存图片
- return $filename;
- }
- /*
- * 生成文件
- * $file 需要写入的文件或者二进制流
- * $newname 需要生成的文件名的绝对路径
- */
- protected static function build_file($file,$filename)
- {
- $write = @fopen($filename,"w");
- if($write==false)
- {
- return false;
- }
- if(fwrite($write,$file)==false)
- {
- return false;
- }
- if(fclose($write)==false)
- {
- return false;
- }
- return true;
- }
- }
Php中curl应用实例
作者:admin 日期:2012-04-21
PHP代码
- /*curl实例
- */
- $curl = curl_init();
- // 设置你需要抓取的URL
- curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/img/baidu_sylogo1.gif');
- // 设置header
- curl_setopt($curl, CURLOPT_HEADER, 0);
- // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- // 设置超时时间
- curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
- // 运行cURL,请求网页
- $data = curl_exec($curl);
- if($data === false){
- echo curl_error($curl);exit;
- }
- $info = curl_getinfo($curl);
- // 关闭URL请求
- curl_close($curl);
- // 显示获得的数据
- //var_dump($info);
- var_dump($data);
PHP中使用CURL伪造来路抓取页面或文件
作者:admin 日期:2012-04-21
PHP中使用CURL伪造来路抓取页面或文件
PHP代码
- // 初始化
- $curl = curl_init();
- // 要访问的网址
- curl_setopt($curl, CURLOPT_URL, 'https://blog.guanjianci.net/');
- // 设置来路
- curl_setopt($curl, CURLOPT_REFERER, 'http://google.com/');
- // 不直接输入内容
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- // 降结果保存在$result中
- $result = curl_exec($curl);
- // 关闭
- curl_close($curl);
广告位