首頁 後端開發 php教程 PHP爬蟲實戰:抓取慕課網課程資訊

PHP爬蟲實戰:抓取慕課網課程資訊

Jun 13, 2023 am 11:35 AM
php 爬蟲 課程資訊

隨著網路的發展,爬蟲技術在現代化的資料收集、資料分析和商業決策當中已經扮演了越來越重要的角色。學會如何利用爬蟲技術,將會極大的提高我們處理資料的效率和準確性。在這篇文章中,我們將使用PHP編寫一個爬蟲,用於抓取慕課網路上的課程資訊。

本文將使用的工具如下:

  • PHP程式語言,版本為PHP 7.0
  • 第三方函式庫Guzzle HTTP Client,用於傳送HTTP請求與接收HTTP回應
  • 一個簡單的MySQL資料庫,用於儲存我們抓取到的課程資訊

#1.準備工作

首先,我們需要在本地環境中安裝PHP 7.0版本,安裝過程略為。

Guzzle HTTP Client是常用的HTTP客戶端工具庫,我們可以使用Composer來安裝。在命令列中切換到一個空白目錄下,然後創建一個新的composer.json文件,添加如下內容:

{

"require": {
    "guzzlehttp/guzzle": "^6.3"
}
登入後複製

}

然後在同級目錄下執行composer install,等待執行完成後,我們就成功安裝了Guzzle HTTP Client。

2.分析目標網站結構

在開始編寫程式碼之前,我們需要對目標網站的結構進行分析。我們選擇的是慕課網(www.imooc.com)的Python課程,我們需要抓取的資訊包括課程名稱、課程編號、課程難度、課程長度和課程連結。

開啟目標網站並進行一定的操作後(例如搜尋「Python」課程),我們可以查看到網站返回的回應內容。我們可以使用瀏覽器的開發工具來查看回應內容和網頁結構。

我們可以看到,在慕課網路上Python課程的清單是透過AJAX進行動態載入的。為了方便爬取數據,我們可以直接去找AJAX請求的URL和參數,然後建構自己的HTTP請求來取得數據。

透過查看目標網站的XHR請求,我們可以發現Python課程實際請求的URL是 http://www.imooc.com/course/AjaxCourseMore?&page=1。

請求參數中的page表示目前要存取的頁碼。我們可以透過HTTP GET方法向該URL發送請求,並根據返回結果進行解析。

3.寫爬蟲程式

在上一步我們已經取得了目標網站Python課程的清單URL,現在我們只需要寫PHP程式碼,使用Guzzle HTTP Client發送HTTP請求,然後解析返回結果即可。

首先,我們需要引入Guzzle HTTP Client函式庫。在PHP檔案的頂端加入以下程式碼:

require 'vendor/autoload.php';

然後建立一個Guzzle HTTP Client物件:

$client = new GuzzleHttpClient( );

接下來,我們可以使用該物件發送HTTP請求:

$response = $client->request('GET', 'http://www.imooc.com /course/AjaxCourseMore?&page=1');

上述程式碼中,我們使用了Guzzle HTTP Client物件的request()方法,指定請求的方式是GET,請求的URL是我們在上一步中取得到的URL。

最後,我們需要從HTTP回應中取得到我們需要的課程資訊。透過檢查回應內容,我們可以看到課程資訊包含在一個HTML標籤中,標籤的class屬性為course-card-container。

我們可以使用PHP的DOMDocument類別來遍歷HTML標籤,將符合條件的標籤解析出來。

最終的程式碼實作如下:

require 'vendor/autoload.php';

use GuzzleHttpClient;

$client = new Client([

'base_uri' => 'http://www.imooc.com'
登入後複製
登入後複製

]);

$response = $client->request('GET', '/course/AjaxCourseMore?&page=1');

#if ($ response->getStatusCode() == 200) {

$dom = new DOMDocument();
@$dom->loadHTML($response->getBody());

$xpath = new DOMXPath($dom);

$items = $xpath->query("//div[@class='course-card-container']");

foreach ($items as $item) {
    $courseName = trim($xpath->query(".//h3[@class='course-card-name']/a", $item)->item(0)->textContent);
    $courseId = trim($xpath->query(".//div[@class='clearfix']/a[@class='course-card'], $item)->item(0)->getAttribute('href'));
    $courseDifficulty = trim($xpath->query(".//p[@class='course-card-desc']", $item)->item(0)->textContent);
    $courseDuration = trim($xpath->query(".//div[@class='course-card-info']/span[@class='course-card-time']", $item)->item(0)->textContent);
    $courseLink = trim($xpath->query(".//h3[@class='course-card-name']/a", $item)->item(0)->getAttribute('href'));

    // 将抓取到的数据存储到MySQL数据库中
    // ...

    echo "课程名称:" . $courseName . "
登入後複製

";

    echo "课程编号:" . $courseId . "
登入後複製

";

    echo "课程难度:" . $courseDifficulty . "
登入後複製

";

    echo "课程时长:" . $courseDuration . "
登入後複製

";

    echo "课程链接:" . $courseLink . "
登入後複製

";

}
登入後複製

}

我們使用DOMDocument讀取HTML回應內容,在使用DOMXPath遍歷標籤。最終,我們將抓取到的資訊列印到螢幕上。

4.儲存資料

現在我們已經成功的抓取到了Python課程的信息,並將資訊列印到了螢幕上。但是,將資料列印到螢幕上並不實用,我們需要將資料儲存到資料庫中。

在MySQL資料庫中,我們建立了一個表格來儲存Python課程的資訊。表格結構如下:

##CREATE TABLE

python_courses (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
course_name varchar(255) NOT NULL DEFAULT '',
course_id# varchar(255) NOT NULL DEFAULT '',
course_difficulty varchar(255) NOT NULL DEFAULT '',
course_duration varchar(255) NOT NULL DEFAULT ''
course_link varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (
id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在程式碼中,我們使用PDO連接MySQL資料庫,並使用prepare()方法和execute()方法執行插入操作。最後的程式碼如下:

require 'vendor/autoload.php';

use GuzzleHttpClient;

$client = new Client([

'base_uri' => 'http://www.imooc.com'
登入後複製
登入後複製

] );

$response = $client->request('GET', '/course/AjaxCourseMore?&page=1');

if ($response->getStatusCode() == 200) {

$dom = new DOMDocument();
@$dom->loadHTML($response->getBody());

$xpath = new DOMXPath($dom);

$items = $xpath->query("//div[@class='course-card-container']");

$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = '';
$pdo = new PDO($dsn, $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

$stmt = $pdo->prepare("INSERT INTO `python_courses` (`course_name`, `course_id`, `course_difficulty`, `course_duration`, `course_link`) VALUES (:course_name, :course_id, :course_difficulty, :course_duration, :course_link)");
foreach ($items as $item) {
    $courseName = trim($xpath->query(".//h3[@class='course-card-name']/a", $item)->item(0)->textContent);
    $courseId = trim($xpath->query(".//div[@class='clearfix']/a[@class='course-card']", $item)->item(0)->getAttribute('href'));
    $courseDifficulty = trim($xpath->query(".//p[@class='course-card-desc']", $item)->item(0)->textContent);
    $courseDuration = trim($xpath->query(".//div[@class='course-card-info']/span[@class='course-card-time']", $item)->item(0)->textContent);
    $courseLink = trim($xpath->query(".//h3[@class='course-card-name']/a", $item)->item(0)->getAttribute('href'));

    $stmt->bindParam(':course_name', $courseName);
    $stmt->bindParam(':course_id', $courseId);
    $stmt->bindParam(':course_difficulty', $courseDifficulty);
    $stmt->bindParam(':course_duration', $courseDuration);
    $stmt->bindParam(':course_link', $courseLink);
    $stmt->execute();
}
登入後複製

}

现在,我们已经成功的构建了一个简单的PHP爬虫,用于抓取慕课网上的Python课程信息。经过这个例子的介绍,你应该可以使用PHP编写你自己的爬虫程序,并获取到你需要的数据了。

以上是PHP爬蟲實戰:抓取慕課網課程資訊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles