首頁 >後端開發 >php教程 >自己寫的一個php是基於phpQuery的通用採集類

自己寫的一個php是基於phpQuery的通用採集類

WBOY
WBOY原創
2016-07-25 08:50:151196瀏覽
複製程式碼
還是小菜,第一次分享程式碼哈,這是自己以前寫的一個php的採集類,自己一直在用,自我感覺很簡單很強大,只要懂一點點選擇器的知識就可以採集任何頁面了,也支持https頁面,做簡單的採集就夠用了。
  1. /**
  2. *通用列表採集類別
  3. *版本V1.3
  4. *作者:JAE
  5. *部落格:http://blog.jaekj.com
  6. */
  7. require_once '../phpQuery/phpQuery/phpQuery.php';
  8. 類QueryList{
  9. private $pageURL;
  10. private $regArr = array();
  11. public $jsonArr = array();
  12. private $regRange;
  13. private; > /************************************************
  14. *參數: 頁面位址選擇器陣列塊選擇器
  15. * 【選擇器陣列】說明:格式array("名稱"=>array("選擇器","類型"),.......)
  16. * 【類型】說明:值"text" ,"html" ,"屬性"
  17. *【塊選擇器】:指先按照規則選出幾個大塊,然後再分別再在塊裡面進行相關的選擇
  18. ********************************************** ***/
  19. 函數QueryList($pageURL,$regArr=array(),$regRange='')
  20. {
  21. $this->pageURL = $pageURL;
  22. // 為了能夠取得https://
  23. $ch =curl_init();
  24. curl_setopt($ch, CURLOPT_URL,$this->pageURL);
  25. curl_setopt($ch, CURLOPT_pageURL);
  26. curl_setopt($ch, CURLOPT_PESSL_IFYER, );
  27. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  28. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  29. $this->html = curl_exec($ch); ) );
  30. if(!empty($regArr))
  31. {
  32. $this->regArr = $regArr;
  33. $this->regRange = $regRange;
  34. $this->getList();
  35. }
  36. }
  37. 函數setQuery($regArr,$regRange='')
  38. {
  39. $this->jsonArr=array ( );
  40. $this->regArr = $regArr;
  41. $this->; regRange = $regRange;
  42. $this->getList();
  43. }
  44. 中間函數getList( )
  45. {
  46. $hobj = phpQuery::newDocumentHTML($this-> html);
  47. if(!empty($this->regRange))
  48. {
  49. $empty($this->regRange))
  50. {
  51. $robjrob = pq($hobj)->find($this->regRange);
  52. $i=0;
  53. foreach($robj as $item)
  54. {
  55. while ( list($key,$reg_value)=each($this->regArr ))
  56. {
  57. $iobj = pq($item)->find($reg_value[0]);
  58. switch($reg_value[1])
  59. {
  60. case 'text':
  61. $this->jsonArr[$i][$key] = trim(pq($iobj)->text() ) ;
  62. 中斷;
  63. case 'html' :
  64. $this->jsonArr[$i][$key] = trim(pq($iobj)->html());
  65. 中斷;
  66. 預設值:
  67. $this->jsonArr[$i][$key] = pq($iobj)->attr($reg_value[1]);
  68. break;
  69. }
  70. }
  71. // 重設導覽導覽
  72. reset($this->regArr);
  73. $i ;
  74. }
  75. }
  76. else
  77. {
  78. while(list($key,$reg_value)=each($this->regArr))
  79. {
  80. $lobj = pq($hobj)->find($reg_value[0]);
  81. $ i=0;
  82. foreach($lobj as $item)
  83. {
  84. switch($reg_value[1])
  85. {
  86. case 'text':
  87. $這個->; jsonArr[$i ][$key] = trim(pq($item)->text());
  88. 中斷;
  89. case 'html':
  90. $this->jsonArr[$i ][ $key] = trim(pq($item)->html());
  91. 中斷;
  92. 預設值:
  93. $this->jsonArr[$i ][$key] = pq ($item )->attr($reg_value[1]);
  94. 規則;
  95. }
  96. }
  97. }
  98. } }
  99. function getJSON()
  100. {
  101. return json_encode($this->jsonArr);
  102. }
  103. }
}
複製程式碼
  1. require 'Query/QueryList.class.php';
  2. //採集OSC的程式碼分享列表,標題連結作者
  3. $url = "http://www.oschina.net/code/list";
  4. $reg = array("title"=>array(".code_title a:eq(0)","text "),"url"=>array(".code_title a:eq(0)","href"),"author"=>array("img","title"));
  5. $rang = " .code_list li";
  6. $hj = new QueryList($url,$reg,$rang);
  7. $arr = $hj->jsonArr;
  8. print_r($arr);
  9. //如果還想採目前頁面右邊的TOP40活躍貢獻者影像,得到JSON資料,可以這樣寫
  10. $reg = array("portrait"=>array(".hot_top img","src"));
  11. $hj->setQuery($reg);
  12. $json = $hj->getJSON();
  13. echo $json . "
    ";
  14. //採OSC內容頁內容
  15. $url = "http://www.oschina.net/code/snippet_186288_23816";
  16. $reg = array("title"=>array(".QTitle h1","text"), "con"=>array(".Content","html"));
  17. $hj = new QueryList($url,$reg);
  18. $arr = $hj->jsonArr;
print_r ($arr);
//就舉這麼多例子吧,是不是用來做採集很方便
複製程式碼
  1. /**
  2. *自己寫的百度和Google搜尋API
  3. *版本V2.0
  4. *作者:JAE
  5. *部落格:http://blog.jaekj.com
  6. **/
  7. require_once 'QueryList_class.php' 🎜> private $searcher; 私人$num;
  8. 私人$page;
  9. 私人$regArr; > 公共 $jsonArr; if ($searcher=='baidu')
  10. {
  11. $this-> ;regArr = array("title"=>array("h3.t a,#thing_single_box a","text"),"tCon "=>array("div.c-abstract,font:slice(0,2 ),div#weibo,tabletree:eq(0),div.c-abstract-size p:eq(0),div.vd_sitcom_new_tinfo" ,"text"),"url"=>array("h3.t a, #thing_single_box a","href")); -op';
  12. $this->regZnum=array("zNum"=>array("span.nums","text")); 'google' )
  13. {
  14. $this->regArr = array("title"=>array("h3.r a","text"),"tCon"=>array("span.st", "text"),"url"=>array("h3.r a","href")); >regZnum=array("zNum"=>array("div#resultStates","text")) ;key = $key;
  15. $this->num = $num;
  16. $this->page = $page-1;
  17. $this->getList();私有函數 getList()
  18. {
  19. $s = urlcode($this->key); >num*$this->page;
  20. if($this->searcher=='baidu')
  21. {
  22. $url = "http://www.baidu.com/s ?pn= $start&rn=$num&wd=$s"
  23. $reg_znum='/[d,] /';
  24. }
  25. else if($this->searcher=='google')
  26. {
  27. $url="https://www.google.com.hk/search?filter=0&lr=&newwindow=1&safe=images&hl=one&as_qdr=all&num=$num&start=$start&q=$s";
  28. $reg_znum= '/([d,] ) 結果? {
  29. $searcherObj->jsonArr[$i]['url'] = $this-&getBaiduRealURL($searcherObj->jsonArr[$i]['url']);
  30. else if($this->searcher=='google')
  31. {
  32. $searcherObj ->jsonArr[$i]['url'] = $this->getGoogleRealURL($searcherObj ->jsonArr [$i]['url']);
  33. }
  34. }
  35. $ this->jsonArr = $searcherObj->jsonArr 預設值
  36. $searcherObj->setQuery(this$- >regZnum); $zNum=$arr; [0]:$zNum=0; /方向鍵
  37. $zPage = ceil($zNum/$this->num); 頁'=>((int)$this->第1頁),'zNum'=>$zNum,'zPage'=>$zPage,"s"=>"$this->key" ,'other'= >array('author'=>'JAE', 'QQ'=>'734708094','博客'=>'http://blog.jaekj.com'),'data'=>$this->jsonArr) ;
  38. }
  39. function getJSON()
  40. {
  41. return json_encode($this->jsonArr);
  42. }
  43. private function getBduReunction getBduRe > {
  44. //預設建立預設出口
  45. $header = get_headers($url,1);
  46. if (strpos($header[0],'301') || strpos( $ header [ 0 ] , '302' ) )
  47. {
  48. if ( is_array ( $ header [ ' Location ' ] ) )
  49. {
  50. // 回傳$ header [ ' Location ' ][ count ( $header[ '位置'])-1];
  51. return $header['位置'][0];
  52. }
  53. else
  54. {
  55. return $header['Location'];
  56. }
  57. }
  58. else
  59. {
  60. return $url;
  61. }
  62. {
  63. return $url;
  64. }
  65. }
  66. }
  67. private function getGoogleRealURL($url)
  68. {
  69. $reg_url = '/q=(. )&/U';
  70. return preg_match($reg_url,$url,$arr)?urldecode ($arr[1]):$url;
  71. }
  72. }
// $hj = new Searcher('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


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn