PHP网页编程之本人写的一个php基于phpQuery的通用收罗...
培训的第二阶段,开始了PHP语言语法结构和应用的学习。仍是小菜,第一次分享代码哈,这是本人之前写的一个php的收罗类,本人一向在用,自我感到很复杂很壮大,只需懂一点点选择器的常识就能够收罗任何页面了,也撑持https页面,做复杂的收罗充足用了。<?php/***通用列表收罗类*版本V1.3*作者:JAE*博客:http://blog.jaekj.com*/require_once../phpQuery/phpQuery/phpQuery.php;classQueryList{private$pageURL;private$regArr=array();public$jsonArr=array();private$regRange;private$html;/*************************************************参数:页面地点选择器数组块选择器*【选择器数组】申明:格局array("称号"=>array("选择器","范例"),.......)*【范例】申明:值"text","html","属性"*【块选择器】:指先依照划定规矩选出几个年夜块,然后再分离再在块内里举行相干的选择*************************************************/functionQueryList($pageURL,$regArr=array(),$regRange=){$this->pageURL=$pageURL;//为了能猎取https://$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$this->pageURL);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$this->html=curl_exec($ch);curl_close($ch);if(!empty($regArr)){$this->regArr=$regArr;$this->regRange=$regRange;$this->getList();}}functionsetQuery($regArr,$regRange=){$this->jsonArr=array();$this->regArr=$regArr;$this->regRange=$regRange;$this->getList();}privatefunctiongetList(){$hobj=phpQuery::newDocumentHTML($this->html);if(!empty($this->regRange)){$robj=pq($hobj)->find($this->regRange);$i=0;foreach($robjas$item){while(list($key,$reg_value)=each($this->regArr)){$iobj=pq($item)->find($reg_value);switch($reg_value){casetext:$this->jsonArr[$i][$key]=trim(pq($iobj)->text());break;casehtml:$this->jsonArr[$i][$key]=trim(pq($iobj)->html());break;default:$this->jsonArr[$i][$key]=pq($iobj)->attr($reg_value);break;}}//重置数组指针reset($this->regArr);$i++;}}else{while(list($key,$reg_value)=each($this->regArr)){$lobj=pq($hobj)->find($reg_value);$i=0;foreach($lobjas$item){switch($reg_value){casetext:$this->jsonArr[$i++][$key]=trim(pq($item)->text());break;casehtml:$this->jsonArr[$i++][$key]=trim(pq($item)->html());break;default:$this->jsonArr[$i++][$key]=pq($item)->attr($reg_value);break;}}}}}functiongetJSON(){returnjson_encode($this->jsonArr);}}
<?phprequireQuery/QueryList.class.php;//收罗OSC的代码分享列表,题目链接作者$url="http://www.oschina.net/code/list";$reg=array("title"=>array(".code_titlea:eq(0)","text"),"url"=>array(".code_titlea:eq(0)","href"),"author"=>array("img","title"));$rang=".code_listli";$hj=newQueryList($url,$reg,$rang);$arr=$hj->jsonArr;print_r($arr);//假如还想采以后页面右侧的TOP40活泼奉献者图象,失掉JSON数据,能够如许写$reg=array("portrait"=>array(".hot_topimg","src"));$hj->setQuery($reg);$json=$hj->getJSON();echo$json."<hr/>";//采OSC内容页内容$url="http://www.oschina.net/code/snippet_186288_23816";$reg=array("title"=>array(".QTitleh1","text"),"con"=>array(".Content","html"));$hj=newQueryList($url,$reg);$arr=$hj->jsonArr;print_r($arr);//就举这么多例子吧,是否是用来做收罗很便利<?php/***本人写的百度和谷歌搜刮API*版本V2.0*作者:JAE*博客:http://blog.jaekj.com**/require_onceQueryList_class.php;classSearcher{private$searcher;private$key;private$num;private$page;private$regArr;private$regRange;private$regZnum;public$jsonArr;//参数搜刮引擎搜刮关头字前往的了局条数第几页functionSearcher($searcher,$key,$num,$page){if($searcher==baidu){$this->regArr=array("title"=>array("h3.ta,#ting_singlesong_boxa","text"),"tCon"=>array("div.c-abstract,font:slice(0,2),div#weibo,tabletr:eq(0),div.c-abstract-sizep:eq(0),div.vd_sitcom_new_tinfo","text"),"url"=>array("h3.ta,#ting_singlesong_boxa","href"));$this->regRange=table.result,table.result-op;$this->regZnum=array("zNum"=>array("span.nums","text"));}elseif($searcher==google){$this->regArr=array("title"=>array("h3.ra","text"),"tCon"=>array("span.st","text"),"url"=>array("h3.ra","href"));$this->regRange=li.g;$this->regZnum=array("zNum"=>array("div#resultStats","text"));}$this->searcher=$searcher;$this->key=$key;$this->num=$num;$this->page=$page-1;$this->getList();}privatefunctiongetList(){$s=urlencode($this->key);$num=$this->num;$start=$this->num*$this->page;if($this->searcher==baidu){$url="http://www.baidu.com/s?pn=$start&rn=$num&wd=$s";$reg_znum=/+/;}elseif($this->searcher==google){$url="https://www.google.com.hk/search?filter=0&lr=&newwindow=1&safe=images&hl=en&as_qdr=all&num=$num&start=$start&q=$s";$reg_znum=/(+)result(s)?/;}$searcherObj=newQueryList($url,$this->regArr,$this->regRange);for($i=0;$i<count($searcherObj->jsonArr);$i++){if($this->searcher==baidu){$searcherObj->jsonArr[$i]=$this->getBaiduRealURL($searcherObj->jsonArr[$i]);}elseif($this->searcher==google){$searcherObj->jsonArr[$i]=$this->getGoogleRealURL($searcherObj->jsonArr[$i]);}}$this->jsonArr=$searcherObj->jsonArr;//猎取统共了局条数$searcherObj->setQuery($this->regZnum);$zNum=$searcherObj->jsonArr;preg_match($reg_znum,$zNum,$arr)?$zNum=$arr:$zNum=0;$zNum=(int)str_replace(,,,$zNum);//盘算总页数$zPage=ceil($zNum/$this->num);$this->jsonArr=array(num=>$this->num,page=>((int)$this->page+1),zNum=>$zNum,zPage=>$zPage,"s"=>"$this->key",other=>array(author=>JAE,QQ=>734708094,blog=>http://blog.jaekj.com),data=>$this->jsonArr);}functiongetJSON(){returnjson_encode($this->jsonArr);}privatefunctiongetBaiduRealURL($url){//失掉百度跳转的真正地点$header=get_headers($url,1);if(strpos($header,301)strpos($header,302)){if(is_array($header)){//return$header)-1];return$header;}else{return$header;}}else{return$url;}}privatefunctiongetGoogleRealURL($url){$reg_url=/q=(.+)&/U;returnpreg_match($reg_url,$url,$arr)?urldecode($arr):$url;}}//$hj=newSearcher(google,oschina,20,2);//print_r($hj->jsonArr);//效果演示地点//http://blog.jaekj.com//jae/demo/searcher/Searcher_class.php?searcher=baidu&s=jaekj&num=20&page=1学会了PHP,那么学其他的语言,肯定速成,反过来也一样,如果你之前学过其他的语言,那么学PHP肯定快。 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。 当然这种网站的会员费就几十块钱。 装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
页:
[1]