首頁 後端開發 php教程 PHP 實戰:高效網路爬蟲程式開發

PHP 實戰:高效網路爬蟲程式開發

Jun 13, 2023 pm 08:19 PM
php 網路 爬蟲

網路爬蟲程序是指一種自動取得並解析網路上資訊的程序,也是資料收集和資訊處理的重要工具之一。在網路時代,數據是一種極其寶貴的資產,能夠快速、準確地獲取目標網站上的資訊對於企業和個人來說​​都是非常重要的。而使用網路爬蟲程式則能夠更有效率地實現這一目標。

PHP 作為一種高效的程式語言,其優秀的網路程式設計特性和豐富的開源程式庫使其成為一個非常適合開發網路爬蟲程式的語言。本文將詳細介紹如何使用 PHP 開發高效能網路爬蟲程式。

一、爬蟲程序基本原理

網絡爬蟲程序的基本工作原理是通過網絡協議獲取網頁源碼,然後根據特定規則解析信息,最終將需要的數據存儲到數據庫或其他文件中。其大致流程如下:

1.向目標URL發送請求,獲取網頁源碼
2.解析源碼中的信息,如鏈接、文本、圖片等
3.將需要的信息存儲到資料庫或其他文件中
4.重複以上步驟,直到完成爬取任務

爬蟲程式的核心部分是解析器,其任務是解析獲取到的網頁源碼,提取出所需的信息。網頁原始碼解析通常使用正規表示式或框架提供的解析函數實作。正規表示式使用較為靈活,但複雜度高,易出錯;使用框架提供的解析函數則易於使用,但也有限制。

二、網路爬蟲程式開發實戰

本文以開發一個簡單的網路爬蟲程式為例,介紹其開發過程。

  1. 確定需求

在開發網路爬蟲程式前,首先需要先明確爬取的目標網站以及需要爬取的資訊。本文以爬取新浪新聞熱門推薦為例。需求為:爬取新浪新聞主頁上的熱門新聞推薦標題和鏈接,並將其儲存到資料庫中。

  1. 取得網頁原始碼

在 PHP 中可以使用 curl 函數庫取得網頁原始碼。下面的程式碼示範如何使用 curl 函數庫來取得新浪新聞首頁的網頁原始碼。

<?php

$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

?>
登入後複製

上述程式碼透過 curl 函數庫向新浪新聞主頁發送請求並取得其網頁原始碼。其中 curl_setopt() 函數設定了取得頁面後將傳回的結果以字串傳回、自動設定請求網頁的Referer。

  1. 解析資訊

取得網頁原始碼後,需要解析其中的資訊以擷取所需資料。在 PHP 中,可以使用正規表示式或框架提供的解析函數實作。下面的程式碼示範如何使用 PHP 內建 DOMDocument 類別來提取新聞標題和連結。

<?php

$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    echo $title . ' ' . $link . PHP_EOL;
}

?>
登入後複製

上述程式碼中,//div[@class="blk12"]/h2/a 是XPath 表達式,用來選擇class 屬性為"blk12" 的div 元素下的所有h2 元素下的a 元素。程式使用 foreach 迴圈遍歷取得到的所有 a 元素,操作 DOMNode 的 nodeValue 和 getAttribute() 方法取得其文字和 href 屬性值。

  1. 儲存資料

在取得到爬取的資訊後,需要將其儲存到資料庫中。本文使用 MySQL 資料庫為例。下面的程式碼示範如何將爬取的新聞標題和連結儲存到 MySQL 資料庫中。

<?php

// 连接数据库
$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'test';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};dbname={$database};charset={$charset}";
$pdo = new PDO($dsn, $user, $password);

// 获取新浪新闻主页热门推荐新闻标题和链接
$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

// 插入数据库
$sql = "INSERT INTO news(title, link) VALUES(:title, :link)";
$stmt = $pdo->prepare($sql);

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    $stmt->bindParam(':title', $title);
    $stmt->bindParam(':link', $link);
    $stmt->execute();
}

?>
登入後複製
登入後複製

在上述程式碼中,使用 PDO 連接到 MySQL 資料庫,並定義了一個名為 news 的資料表用於儲存新聞標題和連結。程式使用了 PDO 的 prepare() 函數和 bindParam() 函數,以避免 SQL 注入攻擊和資料類型錯誤。

  1. 完整程式碼

將上述程式碼組合在一起就可以得到一個簡單的網路爬蟲程序,其完整程式碼如下:

<?php

// 连接数据库
$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'test';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};dbname={$database};charset={$charset}";
$pdo = new PDO($dsn, $user, $password);

// 获取新浪新闻主页热门推荐新闻标题和链接
$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

// 插入数据库
$sql = "INSERT INTO news(title, link) VALUES(:title, :link)";
$stmt = $pdo->prepare($sql);

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    $stmt->bindParam(':title', $title);
    $stmt->bindParam(':link', $link);
    $stmt->execute();
}

?>
登入後複製
登入後複製

三、總結

網路爬蟲程式的開發需要用到多個技術,包括網路程式設計、資訊解析、資料儲存等。 PHP 作為一種高效的程式語言,在網路程式設計方面有著突出的優勢,加上其豐富的開源類別庫,使其成為一個非常適合開發網路爬蟲程式的語言。

在實際開發中,網路爬蟲程式需要注意法律合規性、資料隱私和反爬蟲機制等問題。開發者應在合法合規的前提下進行相關開發。同時,合理設定程式請求速度、隨機 HTTP 請求頭、使用代理 IP 等方式可以有效避免反爬蟲機制的阻擋。

開發網路爬蟲程式需要充分考慮其實際需求與可行性,選擇合適的技術和策略。本文提供的實例程式碼只是其中一個簡單的實現,如需更完善的爬蟲程序,還需要進一步深入學習相關知識。

以上是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 無盡。

熱門文章

倉庫:如何復興隊友
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
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)

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

在本章中,我們將了解CakePHP中的環境變數、常規配置、資料庫配置和電子郵件配置。

適用於 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

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

為了在 cakephp4 中處理日期和時間,我們將使用可用的 FrozenTime 類別。

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

在本章中,我們將學習以下與路由相關的主題?

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 建立驗證器 CakePHP 建立驗證器 Sep 10, 2024 pm 05:26 PM

可以透過在控制器中新增以下兩行來建立驗證器。

如何設定 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 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

See all articles