phpquery中文手冊

      網友投稿 1532 2025-04-02

      【簡介】

      phpQuery是一個基于PHP的服務端開源項目,它可以讓PHP開發人員輕松處理DOM文檔內容。更有意思的是,它采用了jQuery的思想,使得可以像使用jQuery一樣處理頁面內容,獲取想要的頁面信息。

      【步驟】

      1.引入phpquery類庫

      下載連接點擊下載

      include 'phpQuery/phpQuery.php';

      1

      2加載需要獲取內容的網頁連接或則文檔

      加載文檔主要通過phpQuery::newDocument()來進行操作,其作用是使得phpQuery可以在服務器預先讀取到指定的文件或文本內容。

      主要的常用方法包括:

      phpQuery::newDocumentFile($file,$contentType = null)

      $file可以是一個網址地址(帶http的)或則html文件路徑,如果 $contentType為空,則根據文檔自動檢測編碼。檢測失敗,則對于text/html類型文檔自動賦予utf-8編碼。

      phpQuery::newDocument($html)

      1

      $html是html格式的字符串或則代碼;

      • 第一行
      • 第二行

      phpQuery::newDocument($file)初始加載時返回html的串后,就可以使用html操作句柄函數——pq(),通過pq()來篩選提取指定的內容。

      3 pq()函數用法

      pq($param, $context = null);

      pq()函數的用法是phpQuery的重點,pq($xpath,$DocumentID)函數有個參數,第一個$xpath是通過html標簽/類/id等定位到某一元素,$DocumentID可以看做為一個指針,指向需要查詢的html文檔(也就是phpQuery::newDocumentFile($file)的返回結果,如:$eg1或$eg2或$eg3——其實也就是html的context)。當同時對多個文檔操作時,需要用到這個參數,如果沒有給出,會自動鄰近匹配匹配,因此如果只對一個文檔操作時,可以省略即使用——pq($xpath)就可以。

      pq(); 相當于 jQuery的$();。

      主要分兩部分:即選擇器和過濾器

      4 選擇器

      【基本選擇器】

      #id 根據給定的ID屬性匹配單個元素。

      element 根據給定的名稱匹配所有符合的元素。

      .class 根據給定的class匹配所有的元素。

      * 選擇所有元素。

      selector1, selector2, selectorN 根據所有制定的選擇器匹配結合結果 選擇結果是取并集

      /* 基本選擇器*/ 1) #id pq("#myDiv"); 2) element pq("div"); 3) .class pq(".myClass"); 4) * pq("*") 5) selector1,selectorN pq("div,span,p.myClass")

      phpquery中文手冊

      【層次選擇器】

      ancestor descendant 匹配由先祖指定的元素的后代指定的所有后代元素。

      parent > child 匹配由父元素指定的子元素指定的所有子元素。

      prev + next 根據指定的”next”和指定的”prev”匹配所有的下一個元素。

      prev ~ siblings 匹配根據”prev” 元素的 所有相鄰元素。

      /* 層次選擇器*/ 1) ancestor descendant pq("form input") 2) parent > child pq("form > input") 3) prev + next pq("label + input") 4) prev ~ siblings pq("form ~ input")

      5 過濾器

      【基礎過濾 】

      :first 匹配第一個被選擇的元素。

      :last 匹配最后一個被選擇的元素。

      :not(selector) 匹配所有不是被選擇的元素。

      :even 匹配所有被選擇的偶數元素,0索引。

      :odd 匹配所有被選擇的奇數元素,0索引。

      :eq(index) 匹配等同于給定的索引的元素。

      :gt(index) 匹配大于給定的索引的元素。

      :lt(index) 匹配小于給定的索引的元素。

      :header 匹配所有header元素,如h1,h2,h3等。

      :animated 匹配正在進行動畫效果的元素。

      /*基礎過濾*/ 1) :first pq("tr:first") 2) :last pq("tr:last") 3) :not(selector) pq("input:not(:checked)") 4) :even pq("tr:even") 5) :odd pq("tr:odd") 6) :eq(index) pq("tr:eq(1)") 7) :gt(index) pq("tr:gt(0)") 8) :lt(index) pq("tr:lt(2)") 9) :header pq(":header").css("background", "#EEE");

      【內容過濾】

      :contains(text) 匹配包含指定文本的元素。

      :empty 匹配所有無子節點的元素(包括文本節點)。

      :has(selector) 匹配至少包含一個對于給定選擇器的元素。

      :parent 匹配所有父元素 - 擁有子元素的,包括文本。

      /*內容過濾*/ 1) :contains(text) pq("div:contains('John')") 2) :empty pq("td:empty") 3) :has(selector) pq("div:has(p)").addClass("test"); 4) :parent pq("td:parent")

      【屬性過濾】

      [attribute] 匹配給定屬性的元素。

      [attribute=value] 匹配給定屬性等于確定值的元素。

      [attribute!=value] 匹配給定屬性不等于確定值的元素。

      [attribute^=value] 匹配給定屬性是確定值開始的元素。

      [attribute$=value] 匹配給定屬性是確定值結尾的元素。

      [attribute*=value] 匹配給定屬性包含確定值的元素。

      [selector1selector2selectorN] 匹配給定屬性并且包含確定值的元素。

      1) [attribute] pq("div[id]") 2) [attribute=value] pq("input[name='newsletter']").attr("checked", true); 3) [attribute!=value] pq("input[name!='newsletter']").attr("checked", true); 4) [attribute^=value] pq("input[name^='news']") 5) [attribute$=value] pq("input[name$='letter']") 6) [attribute*=value] pq("input[name*='man']") 7) [selector1][selectorN] pq("input[id][name$='man']")

      【子元素過濾 】

      :nth-child(index/even/odd/equation) 匹配所有是父元素的第n個的子元素,或者是父元素的偶數或者奇數子元素。

      :first-child 匹配所有是父元素的第一個的子元素。

      :last-child 匹配所有是父元素的最后一個的子元素。

      :only-child 匹配所有是父元素唯一子元素的子元素。

      1) :nth-child(index/even/odd/equation) pq("ul li:nth-child(2)") 2) :first-child pq("ul li:first-child") 3) :last-child pq("ul li:last-child") 4) :only-child pq("ul li:only-child")

      【基于表單 】

      :input 匹配input, textarea, select和button元素。

      :text 匹配所有類型為text的input元素。

      :password 匹配所有類型為password的input元素。

      :radio 匹配所有類型為radio的input元素。

      :checkbox 匹配所有類型為checkbox的input元素。

      :submit 匹配所有類型為submit的input元素。

      :image 匹配所有類型為image的input元素。

      :reset 匹配所有類型為reset的input元素。

      :button 匹配所有類型為button的input元素和button元素。

      :file 匹配所有類型為file的input元素。

      :hidden 匹配所有類型為hidden的input元素或者其他hidden元素。

      1) :input pq(":input") 2) :text pq(":text") 3) :password pq(":password") 4) :radio pq(":radio") 5) :checkbox pq(":checkbox") 6) :submit pq(":submit") 7) :image pq(":image") 8) :reset pq(":reset") 9) :button pq(":button") 10) :file pq(":file") 11) :hidden pq("tr:hidden")

      【表單過濾 】

      :enabled 匹配所有可用元素。

      :disabled 匹配所有不可用元素。

      :checked 匹配所有被勾選的元素。

      :selected 匹配所有被選擇的元素。

      1) :enabled pq("input:enabled") 2) :disabled pq("input:disabled") 3) :checked pq("input:checked") 4) :selected pq("select option:selected")

      【attr屬性獲取】

      attr($name) 訪問第一個給名稱的元素的屬性。這個方法可以很輕易地取得第一個匹配到的元素的屬性值。如果這個元素沒有對應名稱的屬性則返回undefined。

      attr($properties) 對于所有匹配到的元素設置對應屬性。

      attr($key, $value) 對于匹配到的元素設置一個屬性和對應值。

      attr($key, $fn) 對于匹配到的元素設置一個屬性和需要計算的值。

      removeAttr($name) 對匹配到的元素移除給定名稱的屬性。

      addClass($class) 對匹配到的元素添加一個給定的類。

      hasClass($class) 如果有至少一個匹配到的元素包含給定的類則返回true。

      removeClass($class) 對匹配到的元素移除給定名稱的類。

      toggleClass($class) 對匹配到的元素,如果類不存在則添加,如果存在則移除。

      1) attr pq("img")->attr("src"); 2) attr(properties) pq("img")->attr({ src: "test.jpg", alt: "Test Image" }); 3) attr(key,value) pq("img")->attr("src","test.jpg"); 4) attr(key,fn) pq("img")->attr("title", function() { return this.src }); 5) removeAttr(name) pq("img")->removeAttr("src"); 6) addClass(class) pq("p")->addClass("selected"); 7) removeClass(class) pq("p")->removeClass("selected"); 8) toggleClass(class) pq("p")->toggleClass("selected");

      【HTML獲取】

      html() 獲取第一個匹配到的元素的html內容(innerHTML)。這個方法不適用于XML文本(但適用于XHTML。)

      html($val) 對匹配到的元素設置html內容。這個方法不適用于XML文本(但適用于XHTML。)

      1) html() pq("div")->html(); 2) html(val) pq("div")->html("

      Hello Again

      ");

      【text獲取】

      text() 獲取匹配到的所有元素的文本內容。

      text($val) 對匹配到的所有元素設置文本內容。

      1) text() pq("p")->text(); 2) text(val) pq("p")->text("Some new text.");

      【Value 獲取】

      val() 獲取匹配到的第一個元素的value屬性的值。

      val($val) 對匹配到的元素設置value值。val($val) 所有的Checks, selects, radio buttons, checkboxes,和select options都會設置相應給定的值。

      1) val() pq("input")->val(); 2) val(val) pq("input")->val("hello world!")

      【其他篩選和文檔處理】

      \*篩選*\ 1) eq(index) pq("p")->eq(1) 2) hasClass(class) pq("div")->hasClass("protected") 3) filter(expr) pq("p")->filter(".selected") 4) filter(fn) pq("p")->filter(function($index) { return pq("ol", pq($index))->size() == 0; }); 5) is(expr) pq("input[type='checkbox']")->parent()->is("form") 6) map(callback) pq("p")->append(pq("input").map(function(){ return pq(this)->val(); })->get()->join(", ")); 7) not(expr) pq("p")->not(pq("#selected")[0]) 8) slice(start,[end]) pq("p")->slice(0, 1)->wrapInner(""); 9) add(expr) pq("p")->add("span") 10) children([expr]) pq("div")->children() 11) contents() pq("p")->contents()->not("[@nodeType=1]").wrap(""); 12) find(expr) pq("p")->find("span") 13) next([expr]) pq("p")->next() 14) nextAll([expr]) pq("div:first")->nextAll()->addClass("after"); 15) parent([expr]) pq("p")->parent() 16) parents([expr]) pq("span")->parents() 17) prev([expr]) pq("p").prev() 18) prevAll([expr]) pq("div:last")->prevAll()->addClass("before"); 19) siblings([expr]) pq("div")->siblings() 20) andSelf() pq("div")->find("p")->andSelf()->addClass("border"); 21) end() pq("p")->find("span")->end() \*文檔處理*\ 1) append(content) pq("p")->append("Hello"); 2) appendTo(content) pq("p")->appendTo("#foo"); 3) prepend(content) pq("p")->prepend("Hello"); 4) prependTo(content) pq("p")->prependTo("#foo"); 5) after(content) pq("p")->after("Hello"); 6) before(content) pq("p")->before("Hello"); 7) insertAfter(content) pq("p")->insertAfter("#foo"); 8) insertBefore(content) pq("p")->insertBefore("#foo"); 9) wrap(html) pq("p")->wrap("

      "); 10) wrap(elem) pq("p")->wrap(pq("#content")); 11) wrapAll(html) pq("p")->wrapAll("
      "); 12) wrapAll(elem) pq("p")->wrapAll(pq("#content")); 13) wrapInner(html) pq("p")->wrapInner(""); 14) wrapInner(elem) pq("p")->wrapInner(pq(".content")); 15) replaceWith(content) pq("p")->replaceWith("Paragraph. "); 16) replaceAll(selector) pq("Paragraph. ")->replaceAll("p"); 17) empty() pq("p")->empty(); 18) remove([expr]) pq("p")->remove(); 19) clone() pq("b")->clone()->prependTo("p"); 20) clone(true) pq("button")->clone(true)->insertAfter(pq("b"))

      [測試 爬取簡單示例]

      以武漢大學通知公告http://www.whu.edu.cn/tzgg.htm為例進行爬取測試test.php

      html()."
      "; echo pq("title",$eg1->getDocumentID())->html()."
      ";//$eg1與$eg1->getDocumentID()效果等同 echo pq("title")->html()."
      ";//就近匹配 $eg2 phpQuery::selectDocument($eg1); //默認會使用選定的文檔 echo pq("title")->html()."
      "; // $mes=pq("ul")->html();//獲取所有的ul標簽中的html內容 // echo $mes; // echo "
      ___________________
      "; // $mes=pq("ul,li")->html();//獲取所有的ul以及li標簽中的html內容 // echo $mes; // $t=pq("ul[class='article']")->html();//獲取ul class="article"的html內容 // echo $t; $t=pq("ul[class='article']>li:eq(2)")->html();//獲取ul class="article" 下第二個子元素li的html內容 echo $t; $t=pq("ul[class='article']>li:eq(2)>center>div:eq(1)")->html(); echo $t."
      "; $t=pq("(ul[class='article']>li:eq(2)>center>div:eq(1))")->html(); echo $t."
      "; $t=pq("(ul[class='article']>li:eq(3)>div[class='col-xs-12 col-sm-6 col-md-6']>a")->html(); echo $t."
      "; $t=pq("(ul[class='article']>li:eq(3)>div[class='col-xs-12 col-sm-6 col-md-6']>a")->attr("href"); echo $t."
      "; ?>---------------------

      HTML

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:圖片邊框不能用
      下一篇:怎樣將Word文檔中表格部分邊框加粗(word中怎么把表格邊框加粗)
      相關文章
      亚洲youwu永久无码精品| 亚洲国产成人片在线观看无码| 在线亚洲精品福利网址导航| 久久亚洲欧美国产精品| 亚洲中文字幕一二三四区苍井空| 久久亚洲精品成人AV| 无码乱人伦一区二区亚洲| 亚洲精品中文字幕乱码三区| 激情亚洲一区国产精品| 亚洲伊人久久大香线蕉影院| 亚洲福利秒拍一区二区| 亚洲色大成网站WWW久久九九| 亚洲色一色噜一噜噜噜| 亚洲日韩国产精品乱| 国产精品亚洲mnbav网站| 久久久久亚洲精品中文字幕| 久久亚洲2019中文字幕| 亚洲色成人网站WWW永久| 久久综合日韩亚洲精品色| 亚洲成av人片不卡无码久久| 国产成人综合亚洲| 亚洲精品WWW久久久久久| 亚洲精品无码你懂的网站| 国产亚洲?V无码?V男人的天堂 | 亚洲狠狠综合久久| 久久精品国产精品亚洲蜜月| 亚洲第一福利视频| 亚洲酒色1314狠狠做| 亚洲国产精品成人综合色在线婷婷| 亚洲国产成人va在线观看网址| 亚洲二区在线视频| 亚洲色欲色欱wwW在线| 久久精品国产亚洲av天美18 | 精品久久久久久亚洲中文字幕 | 亚洲美女精品视频| 国产日本亚洲一区二区三区 | 亚洲精品免费在线观看| 亚洲成aⅴ人在线观看| 亚洲精品免费视频| 亚洲国产精品久久久久秋霞影院 | 亚洲中文字幕无码日韩|