隨著網路資訊的爆炸性成長,大量的資料都儲存在網站上,這些資料對於許多使用者都具有重要價值。因此,爬蟲技術逐漸成為了一種強大的利用網路數據的手段。
本文介紹了一個基於 PHP 語言的爬蟲框架:Guzzle和Goutte。 Guzzle是為 PHP 開發的 HTTP 用戶端,可以用來傳送 HTTP 請求和與 REST 資源進行互動。 Goutte是它的補充,它是一個基於 Guzzle 的 Web 爬蟲框架,可以方便地獲取網頁內容並進行資料的提取分析。
首先,我們要在 PHP 中安裝 Guzzle 和 Goutte。可以透過 Composer 進行安裝,具體指令如下:
composer require guzzlehttp/guzzle composer require fabpot/goutte
安裝完成後,先來了解一下 Guzzle 的使用方法。我們可以透過以下程式碼來傳送HTTP GET 請求,並取得回應內容:
<?php use GuzzleHttpClient; $client = new Client(); $response = $client->get('https://www.example.com'); echo $response->getBody();
這段程式碼首先建立了一個GuzzleClient 對象,然後使用get() 方法向指定網址發送了一個GET 請求,並獲取到了響應內容。呼叫 getBody() 方法可以取得到響應體的內容。
Goutte 是基於 Guzzle 開發的 Web 爬蟲框架,其使用方法也很簡單。以下是一個簡單的Goutte 使用範例:
<?php use GoutteClient; $client = new Client(); $crawler = $client->request('GET', 'https://www.example.com'); $crawler->filter('h1')->each(function ($node) { echo $node->text() . " "; });
這段程式碼使用Goutte 建立了一個Client 對象,並向指定網址發送GET 請求,然後取得了回應體,並將其解析成了一個DOM 對象。 $crawler->filter('h1') 是一個篩選器,它指定了頁面上所有h1 標籤的節點,然後它呼叫了each() 方法,對於每個h1 標籤的節點,都會執行指定的匿名函數,其中$node 是目前節點對象,它的text() 方法可以取得到節點的文字內容。
下面我們來看一個更完整的範例,它示範如何使用Goutte 爬取知乎上的問題和回答,並將其中的使用者姓名、回答內容、按讚數和回答時間儲存到一個CSV 檔案中:
<?php use GoutteClient; $client = new Client(); $crawler = $client->request('GET', 'https://www.zhihu.com/question/21774949'); $fp = fopen('output.csv', 'w'); fputcsv($fp, ['User', 'Content', 'Votes', 'Time']); $crawler->filter('.List-item')->each(function ($node) use ($fp) { $user = $node->filter('.AuthorInfo .Popover')->text(); $content = $node->filter('.RichText')->text(); $votes = $node->filter('.Voters')->text(); $time = $node->filter('.ContentItem-time')->text(); fputcsv($fp, [$user, $content, $votes, $time]); }); fclose($fp);
這段程式碼首先爬取了知乎上問題ID 為21774949 的頁面,然後使用一個檔案句柄向output.csv 檔案寫入了CSV 表頭行。接下來,使用 filter() 方法找到頁面上所有的問題和回答節點,然後對每個節點執行匿名函數。在匿名函數中,使用 filter() 方法找到每個使用者的姓名、回答內容、按讚數和回答時間,並使用 fputcsv() 方法將這四個欄位寫入到檔案中。最後關閉文件句柄。
總結來說,使用Guzzle 和Goutte 建立一個爬蟲框架非常簡單,並且具有很強的靈活性和可擴展性,可以應用於各種不同的場景,包括但不限於資料探勘、SEO優化等領域。但是,請注意,任何爬蟲都需要遵守網站的 robots.txt 文件,避免對目標網站造成過大的負擔以及侵犯用戶隱私。
以上是基於 PHP 的爬蟲框架簡介及應用實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!