<?php /*------------------------ 根据给出地址,获取网页及页面内的js,css文件按原文件名保存到本地 -------------------------*/ $url = 'http://www.zzzzz.com/html_13.html';//页面路径 $dir = APP_PATH.'save-xiaohaopin/';//保存数据的文件夹路径,因框架不同而定APP_PATH //路径不存在则创建 if(!is_dir($dir)){ mkdir($dir); } $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); $html = curl_exec($ch); //html保存 $hpath = @fopen($dir.'html_13.html','wb'); fwrite($hpath,$html); fclose($hpath); //正则表达式 $pre = '/"([^"]*\.(js|css)[^"]*)"/i';//js&css $urlarr = array(); preg_match_all($pre,$html,$urlarr); $urlarr = $urlarr[1]; //url处理&&根据url获取结果不同而自定义处理 //./templates/js/gongjutiao.js&&&&&./templates/css/gongjutiao.css $mainurl = 'http://www.zzzzz.com/'; //just save it foreach($urlarr as $k => $u){ $surl = str_replace('./','',$u); $dourl = $mainurl.$surl; $fileName = substr($u,strrpos($u,'/')+1); $savePath = $dir.$fileName; $con = file_get_contents($dourl); $fop = @fopen($savePath,'wb'); fwrite($fop,$con); fclose($fop); } exit('Obtain all'); /*----------------end ---------------------*/ /*------------------------ 获取某个网站过多数据或者抓取过快等因素,都会经常导致IP被封的风险,但我们可以自己利用PHP构造IP地址的方式,获取数据。 -------------------------*/ $headers['CLIENT-IP'] = $headers['X-FORWARDED-FOR'] = '127.0.0.1'; //些处只是个例,IP可以自己定义 $headerArr = array(); foreach( $headers as $n => $m ) { $headerArr[] = $n .':' . $m; } //$refer = $_SERVER["HTTP_REFERER"]; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); curl_setopt ($ch, CURLOPT_HTTPHEADER , $headerArr); //构造IP $html = curl_exec($ch); curl_close($ch); //下面就可以写自己抓取数据的正则表达式 $reg = '/.*/'; //正则匹配后放到相应的数组里面 $arr= array(); preg_match($reg,$html,$arr); //可以做数据处理,例: $val = $arr[1]; //数据组装 $data = array( 'val' =>$val, ); //var_dump($data);exit; //数据添加到数据库,下面是ThinkPHP框架用法 M('WeaponAttr')->add($data); //如果有封IP风险,可以调节抓取的速度或者做一些其它的优化 sleep(5); echo 'ok';exit; /*----------------end ---------------------*/ /*------------------------ 在获取某网站的数据的过程中,往往网页会通过网页点击传送js参数,利用ajax去获取数据,形成无刷新页面,在翻页的过程当中有些网站在第一次获取回来的信息之后,就在当前页面保存一个cookie,然后分页面就可以根据cookie的值去获取下一页,而且用同一种分页方式表现:例如:show_1.html,第二页就是show_2.html以此类推,。不管你访问的是哪一个分类,或者其它的一些栏目。它们获取回来的列表分页页面都是以这种形式去表现的,如果删除了cookie页面就会变为空。没有数据。 -------------------------*/ function getdata(){ define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) ); $url = 'http://'; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIEJAR);//连接结束后保存cookie信息的文件。 $html = curl_exec($ch); curl_close($ch); //$html是第一次传参数的时候获取回来的数据,用get函数来对获取回来的数据处理 $this->get($html); //class="page">4</li>//获取分页的信息 $parr = array(); $page = '/class="page">(\d+)</'; preg_match_all($page,$html,$parr); if(!empty($parr[1])){ $cnum = array_pop($parr[1]); for($i = 2;$i <= $cnum;$i++){ $n = $this->jdoit($i);//根据coodie去获取下一页的内容回来 $this->get($n);//内容处理 } } echo 'okk'; } function jdoit($num){ $url = 'http://www.xxxx.com/fenye-'.$num.'.html'; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIEJAR); //包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。 curl_setopt ($ch, CURLOPT_COOKIEFILE, COOKIEJAR); $html = curl_exec($ch); curl_close($ch); return $html; } function get($html){ //正则表达式 $reg = '/<dd[^>]*>([\s\S]*?)<\/dd>/'; /*获取回来的内容可以在此处理*/ } /*----------------end ---------------------*/ /*------------------------ 根据地址,把图片保存到本地 -------------------------*/ $pic_url = 'http://www.picture.com/'; $path = 'D:\picdir';//保存路径 if(!is_dir($path)){ mkdir($path,0777); } $filename = $path.'name'; ob_start(); readfile($pic_url); $img = ob_get_contents(); ob_end_clean(); //$size = strlen($img); $fp2=@fopen($filename, "a"); fwrite($fp2,$img); fclose($fp2); /*----------------end ---------------------*/ ?>
/*===========================*/ //$proxy_host->代理服务器地址,,$proxy_port->端口 //通过代理获取网页内容 function proxy_get_content($proxy_host,$proxy_port,$proxy_user,$proxy_password,$url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_PROXY,"$proxy_host:$proxy_port"); curl_setopt($ch, CURLOPT_PROXYUSERPWD, "$proxy_user:$proxy_password"); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER,0); $bcon = curl_exec($ch); echo curl_error($ch); curl_close($ch); return $bcon; }