搜尋
首頁後端開發php教程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
超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

解釋PHP 8.1中的纖維以進行並發。解釋PHP 8.1中的纖維以進行並發。Apr 12, 2025 am 12:05 AM

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區:資源,支持和發展PHP社區:資源,支持和發展Apr 12, 2025 am 12:04 AM

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP與Python:了解差異PHP與Python:了解差異Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

php:死亡還是簡單地適應?php:死亡還是簡單地適應?Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來:改編和創新PHP的未來:改編和創新Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

See all articles

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

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版