八大神奇的網絡爬取庫與工具
譯文【51CTO.com快譯】網絡爬取(Web scraping,請詳見:http://www.prowebscraper.com/blog/web-scraping-using-php/)是普通商業(yè)網站的常規(guī)功能之一。不同的網站在不同的應用場景下,會用到不同的爬取任務,其中包括:產品信息和股票價格等方面。
與此同時,在網站系統(tǒng)的后端開發(fā)中,網絡爬取也是備受關注。在程序員的圈子內,您會經常聽到:又有人開發(fā)創(chuàng)建了高質量的解析器或“爬蟲”之類的新聞。
在本文中,我們將和您探討一些實用的網絡爬取庫與工具,以滿足您直接抓取網站信息和數據的業(yè)務需求。
在PHP環(huán)境中,您可以通過如下工具庫,來進行與網絡抓取相關的各項操作:
- Goutte
- Simple HTML DOM
- htmlSQL
- cURL
- Requests
- HTTPful
- Buzz
- Guzzle
1. Goutte
簡介:
- Goutte庫的神奇之處在于:它可以為您提供如何通過使用PHP技術,來抓取各種內容的詳細支持。
- 基于Symfony框架的Goutte,是一種網站爬取類別的專用工具庫。
- Goutte的實用之處在于:它不但提供了各種可用來抓取網站信息的API,而且能夠從HTML和XML的響應信息中抓取各種數據。
- Goutte持有MIT頒發(fā)的許可證。
特征:
- 適用于大型項目。
- 基于OOP(面向對象的程序設計)。
- 具有中等速度的解析能力。
環(huán)境要求:
需要具有PHP 5.5以上和Guzzle 6以上(見下文)的環(huán)境。
文檔鏈接:
https://goutte.readthedocs.io/en/latest/
擴展閱讀:
https://menubar.io/php-scraping-tutorial-scrape-reddit-with-goutte
2. Simple HTML DOM
簡介:
- HTML DOM解析器是由PHP 5以上的版本編寫而成。其優(yōu)勢在于:能夠讓您輕松、便捷地通過訪問和使用HTML,來開展工作。
- 通過它,您可以像使用jQuery那樣,快速地在HTML頁面上找到那些帶有選擇器的標簽。
- 您可以僅使用一行HTML代碼,來實現(xiàn)內容的抓取。
- 與本文介紹到的其他工具庫相比,它的運行速度并不算快。
- Simple HTML DOM持有MIT頒發(fā)的許可證。
特征:
- 它能夠支持那些無效的HTML。
環(huán)境要求:
需要具有PHP 5以上的環(huán)境。
文檔鏈接:
http://simplehtmldom.sourceforge.net/manual.htm
擴展閱讀:
http://www.prowebscraper.com/blog/web-scraping-using-php/
3. htmlSQL
簡介:
- 它實際上是一個實驗性的PHP庫。它的實用之處在于:通過它,您能夠使用類似SQL的語法,去訪問HTML的各種數值。因此,您可以在不需要編寫復雜的函數、或正則表達式的情況下,方便地獲取某些特定值。
- 如果您是SQL的忠實粉絲,那么您一定也會喜歡這款實驗性的爬取庫。
- 您可以將它運用到任何類型的雜項任務、以及對于網頁的快速解析任務之中。
- 雖然早在2006年就停止了更新與支持,但是htmlSQL仍然是一款可靠的解析工具和抓取庫。
- htmlSQL持有BSD頒發(fā)的許可證。
特征:
- 它能夠提供相對快速的解析訪問,但功能比較有限。
環(huán)境要求:
- 各種風格的PHP 4以上環(huán)境。
- Snoopy的PHP類(版本1.2.3,需選用Web傳輸)。
文檔鏈接:
https://github.com/hxseven/htmlSQL
擴展閱讀:
https://github.com/hxseven/htmlSQL/tree/master/examples
4. cURL
簡介:
- 眾所周知,cURL是一款非常流行的、可用于從網頁中提取數據的工具庫。它屬于PHP的內置組件。
- 作為一個標準的PHP庫,它并不包含任何第三方的文件和類。
環(huán)境要求:
- 在使用PHP的cURL功能時,您只需要安裝»libcurl包(請詳見http://curl.haxx.se/)便可。當然,作為PHP,它需要用到libcurl的7.10.5或更高版本。
文檔鏈接:
http://php.net/manual/ru/book.curl.php
擴展閱讀:
http://scraping.pro/scraping-in-php-with-curl/
5.Requests
簡介:
- 它是一個用PHP編寫的HTTP庫。
- 它的API主要基于那些優(yōu)秀的Requests Python庫。
- 您能夠通過Requests來發(fā)送HEAD、GET、POST、PUT、DELETE以及PATCH HTTP等請求。
- 通過Requests,您可以使用簡單數組,來添加標題、表單數據、多個文件和參數、并能以相同的方式訪問各種響應數據。
- Requests持有ISC頒發(fā)的許可證。
特征:
- 持有國際域名和URL。
- 支持瀏覽器式的SSL驗證。
- 提供基本和摘要式的身份驗證。
- 自解壓功能(Automatic Decompression)。
- 連接超時管理。
環(huán)境要求:
需要具有PHP 5.2以上的版本。
參考文檔:
https://github.com/rmccue/Requests/blob/master/docs/README.md
6. HTTPful
簡介:
- HTTPful是一個非常簡單的PHP庫。由于其設計初衷是使得HTTP具有可讀性,因此它本身既可以被作為鏈接,又具備一定的可讀性。
- 它被公認為非常實用的原因在于:它使得開發(fā)人員專注于與API的交互,而不必去關注那些set_opt頁面。同時,它也是一款十分優(yōu)秀的PHP REST客戶端。
- HTTPful持有MIT頒發(fā)的許可證。
特征:
- 可讀式地支持多種HTTP方法(GET、PUT、POST、DELETE、HEAD、PATCH和OPTIONS)。
- 可自定義標題(Headers)。
- 能夠自動且“智能”地進行解析。
- 能夠自動進行載荷的序列化(Payload Serialization)。
- 支持基本認證。
- 提供客戶端證書的身份驗證。
- 帶有請求的“模板”。
環(huán)境要求:
需要具有PHP 5.3以上的版本。
文檔鏈接:
http://phphttpclient.com/docs/
7.Buzz
簡介:
- Buzz是一種實用的輕量級工具庫,您可以用它來發(fā)出HTTP請求。
- 雖然Buzz的設計比較簡單,但是它具有各種Web瀏覽器的特性。
- Buzz持有MIT頒發(fā)的許可證。
特征:
- 簡單的API。
- 具有高性能。
環(huán)境要求:
需要具有PHP 7.1版本。
文檔鏈接:
https://github.com/kriswallsmith/Buzz/blob/master/doc/index.md
擴展閱讀:
https://github.com/kriswallsmith/Buzz/tree/master/examples
8. Guzzle
簡介:
- 作為一款非常實用的PHP HTTP客戶端,Guzzle能夠讓您以簡單的方式發(fā)送各種HTTP請求。同時,它也能很方便地與Web服務相集成。
特征:
- 通過其簡單的界面,您可以構建出各種查詢字符串、POST請求、大量的流式上傳與下載、HTTP Cookie以及可上傳的JSON數據。
- 它可以在同一個接口的幫助下,以同步和異步的方式發(fā)送各種請求。
- 它能夠將PSR-7接口運用于各種請求、響應和數據流之中。您可以籍此使用Guzzle的其他PSR-7兼容庫。
- 通過抽象出底層的HTTP傳輸,您可以用它來編寫出獨立于環(huán)境和傳輸的程序代碼,即:不會對cURL、PHP流、套接字或非阻塞事件的循環(huán)產生強依賴性。
- 其中間件系統(tǒng)使您能夠擴充和組合客戶端的各種行為。
環(huán)境要求:
需要具有PHP 5.3.3以上版本。
文檔鏈接:
http://docs.guzzlephp.org/en/stable/
擴展閱讀:
https://lamp-dev.com/scraping-products-from-walmart-with-php-guzzle-crawler-and-doctrine/958
結論
綜上所述,每一種網絡爬取工具都具有自己的特點和環(huán)境要求。希望上述羅列能夠幫助您更好地了解這些PHP庫與工具。您可以從中挑選出適合于自己網站系統(tǒng)的工具進行試用與調試。
原文標題:8 Awesome PHP Web Scraping Libraries and Tools,作者:Hiren Patel
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】