Query的選擇器之強大是有目共睹的,phpQuery 讓php也擁有了這樣的能力,它就相當于服務端的jQuery。
先來看看官方簡介:
phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library.
Library is written in PHP5 and provides additional Command Line Interface (CLI).
存在的意義
我們有時需要抓取一個網頁的内容,但隻需要特定部分的資訊,通常會用正則來解決,這當然沒有問題。正則是一個通用解決方案,但特定情況下,往往有更簡單快 捷的方法。比如你想查詢一個程式設計方面的問題,當然可以使用Google,但stackoverflow 作為一個專業的程式設計問答社群,會提供給你更多,更靠譜的答案。
對于html頁面,不應該使用正則的原因主要有3個
1、編寫條件表達式比較麻煩
尤其對于新手,看到一堆”不知所雲”的字元評湊在一起,有種腦袋都要炸了的感覺。如果要分離的對象沒有太明顯的特征,正則寫起來更是麻煩。
2、效率不高
對于php來說,正則應該是沒有辦法的辦法,能通過字元串函數解決的,就不要勞煩正則了。用正則去處理一個30多k的檔案,效率不敢保證。
3、有phpQuery
如果你使用過jQuery,想擷取某個特定元素應該是輕而易舉的事情,phpQuery讓這成為了可能。
淺析phpQuery
phpQuery是基于php5新添加的DOMDocument。而DOMDocument則是專門用來處理html/xml。它提供了強大xpath選 擇器及其他很多html/xml操作函數,使得處理html/xml起來非常友善。那為什麼不直接使用呢?這個,去看一下官網的函數清單 就知道了,如果對自己的記憶力很有信心, 不妨一試。
幾個簡單的例子
擷取藍色理想最熱的招聘職位
Java代碼
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXaucmbpR2bjR3c1p2Lc9CX6MHc0RHaiojIsJye.png)
- <?
- include 'phpQuery.php';
- phpQuery::newDocumentFile('http://job.blueidea.com');
- $companies = pq('#hotcoms .coms')->find('div');
- foreach($companies as $company)
- {
- echo pq($company)->find('h3 a')->text()."<br>";
- }
小結
- pq()就像jQuery裡的$()
- 基本上jQuery的選擇器都可以用在phpQuery上,隻要把’.'變成’->’
- phpQuery提供了好幾種載入檔案的方法,有的使用字元串,有的使用檔案(包括url),選 擇的時候要注意
- 基本上這一頁 就很能說明問題了
其他解析器
simplehtmldom 也是個不錯的html解析器,使用起來也挺友善,是基 于正則的,是以沒有phpQuery那麼強大,如果沒有太高的要求,也基本夠用了。
yql 是yahoo出的一款使用類似SQL的語言,來擷取相應的資料,也很強大,無須任何類 庫,可以直接調用,支援xpath,如果對SQL語句比較熟悉的話,可以考慮yql。