<?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; }