首頁  >  文章  >  後端開發  >  基於 PHP 的爬蟲框架簡介及應用實例詳解

基於 PHP 的爬蟲框架簡介及應用實例詳解

王林
王林原創
2023-06-14 15:58:191617瀏覽

隨著網路資訊的爆炸性成長,大量的資料都儲存在網站上,這些資料對於許多使用者都具有重要價值。因此,爬蟲技術逐漸成為了一種強大的利用網路數據的手段。

本文介紹了一個基於 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中文網其他相關文章!

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