搜尋
首頁web前端html教學使用DiDOM解析HTML的PHP​​程式碼

使用DiDOM解析HTML的PHP​​程式碼

開發人員不時需要抓取網頁以從網站獲取一些資訊。例如,假設您正在開發一個個人項目,您必須從維基百科獲取有關不同國家首都的地理資訊。手動輸入會花費很多時間。不過,您可以藉助 PHP 抓取維基百科頁面,非常快速地完成此操作。您還可以自動解析 HTML 以獲取特定信息,而無需手動瀏覽整個標記。

在本教學中,我們將了解一種名為 DiDOM 的快速且易於使用的 HTML 解析器。我們將從安裝過程開始,然後學習如何使用不同類型的選擇器(如標籤、類別等)從網頁上的不同元素中提取資訊。

安裝與使用

您可以透過執行以下命令輕鬆在專案目錄中安裝 DiDOM:

composer require imangazaliev/didom

在執行上述命令後,您將能夠從字串、本機檔案或網頁載入 HTML。這是一個例子:

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document($washington_dc_html_string);

$document = new Document('washington_dc.html', true);

$url = 'https://en.wikipedia.org/wiki/Washington,_D.C.';
$document = new Document($url, true);

當您決定從文件中解析 HTML 時,它可能已經載入並儲存在變數中。在這種情況下,您只需將該變數傳遞給 Document(),DiDOM 將準備要解析的字串。

如果必須從檔案或 URL 載入 HTML,您可以將其作為第一個參數傳遞給 Document() 並將第二個參數設為 true

您也可以使用不含任何參數的 new Document() 建立一個新的 Document 物件。在這種情況下,您可以呼叫方法 loadHtml() 從字串載入 HTML,並呼叫 loadHtmlFile() 從檔案或網頁載入 HTML。

尋找 HTML 元素

從元素取得 HTML 或文字之前要做的第一件事是找到元素本身。最簡單的方法是使用 find() 方法並將所需元素的 CSS 選擇器作為第一個參數傳遞。

您也可以將元素的 XPath 作為 find() 方法的第一個參數傳遞。但是,這需要您傳遞 Query::TYPE_XPATH 作為第二個參數。

如果您只想使用XPath 值來尋找HTML 元素,則可以簡單地使用xpath() 方法,而不是傳遞Query::TYPE_XPATH每次作為 find() 的第二個參數。

如果 DiDOM 可以找到與傳遞的 CSS 選擇器或 XPATH 表達式相符的元素,它將傳回 DiDom\Element 實例的陣列。如果沒有找到這樣的元素,它將傳回一個空數組。

由於這些方法傳回一個數組,因此您可以使用 find()[n-1] 直接存取第 n 個匹配元素。

一個例子

在下面的範例中,我們將從華盛頓特區的維基百科文章中的所有一級和二級標題中獲取內部 HTML

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

$main_heading = $document->find('h1.firstHeading')[0];
echo $main_heading->html();

$sub_headings = $document->find('h2');

foreach($sub_headings as $sub_heading) {
    if($sub_heading->text() !== 'See also') {
        echo $sub_heading->html();
    } else {
        break;
    }
}

我們首先透過傳遞華盛頓特區的維基百科文章的 URL 來建立一個新的 Document 物件。之後,我們使用 find() 方法來取得主標題元素並將其儲存在名為 $main_heading 的變數內。我們現在可以在此元素上呼叫不同的方法,例如 text()innerHtml()html()

對於主標題,我們只需呼叫 html() 方法即可傳回整個標題元素的 HTML。同樣,我們可以使用 innerHtml() 方法來取得特定元素內的 HTML。有時,您會對元素的純文字內容而不是其 HTML 更感興趣。在這種情況下,您只需使用 text() 方法即可完成。

二級標題將我們的維基百科頁面劃分為定義明確的部分。但是,您可能想要刪除其中一些副標題,例如“另請參閱”、“註釋”等。

一種方法是循環遍歷所有二級標題並檢查 text() 方法傳回的值。如果傳回的標題文字是“另請參閱”,我們將跳出循環。

使用$document->find('h2')[3]$document- 可以直接到達第四或第六級二級標題>find('h2' )[5] 分別。

上下遍歷 DOM

一旦您可以存取特定元素,該程式庫就可以讓您上下遍歷 DOM 樹以輕鬆存取其他元素。

您可以使用 parent() 方法來前往 HTML 元素的父元素。同樣,您可以使用 nextSibling()previousSibling() 方法來取得元素的下一個或上一個同級元素。

还有很多方法可用于访问 DOM 元素的子元素。例如,您可以使用 child(n) 方法获取特定的子元素。同样,您可以使用 firstChild()lastChild() 方法访问特定元素的第一个或最后一个子元素。您可以使用 children() 方法循环遍历特定 DOM 元素的所有子元素。

一旦到达特定元素,您将能够使用 html()innerHtml()text() 方法。

在下面的示例中,我们从二级标题元素开始,并继续检查下一个同级元素是否包含一些文本。一旦我们找到带有一些文本的同级元素,我们就会将其输出到浏览器。

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

$sub_headings = $document->find('h2');

for($i = 1; $i < count($sub_headings); $i++) {
    if($sub_headings[$i]->text() !== 'See also') {
        $next_sibling = $sub_headings[$i]->nextSibling();
        while(!$next_elem->html()) {
            $next_sibling = $next_sibling->nextSibling();
        }

        echo $next_elem->html()."<br>";
    } else {
        break;
    }
}

您可以使用类似的技术循环遍历所有同级元素,并且仅在文本包含特定字符串或同级元素是段落标记等时输出文本。一旦您了解了基础知识,找到正确的信息就是简单的。

操作元素属性

在某些情况下,获取或设置不同元素的属性值的能力非常有用。例如,我们可以使用 $image_elem->attr( 'src').以类似的方式,您可以获得文档中所有 a 标记的 href 属性的值。

可以通过三种方法获取 HTML 元素的给定属性的值。您可以使用 getAttribute('attrName') 方法并将您感兴趣的属性名称作为参数传递。您还可以使用 attr('attrName') 方法,其工作方式与 getAttribute() 类似。最后,该库还允许您使用 $elem->attrName 直接获取属性值。这意味着您可以使用 $imageElem->src 直接获取图像元素的 src 属性值。

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

$images = $document->find('img');

foreach($images as $image) {
    echo $image->src."<br>";
}

一旦您有权访问src属性,您就可以编写代码来自动下载所有图像文件。这样,您将能够节省大量时间。

您还可以使用三种不同的技术来设置给定属性的值。首先,您可以使用 setAttribute('attrName', 'attrValue') 方法来设置属性值。您还可以使用 attr('attrName', 'attrValue') 方法来设置属性值。最后,您可以使用 $Elem->attrName = 'attrValue' 设置给定元素的属性值。

添加、删除和替换元素

您还可以使用库提供的不同方法对加载的 HTML 文档进行更改。例如,您可以使用 appendChild()replace()从 DOM 树添加、替换或删除元素">删除() 方法。

该库还允许您创建自己的 HTML 元素,以便将它们附加到原始 HTML 文档中。您可以使用 new Element('tagName', 'tagContent') 创建新的 Element 对象。

请记住,如果您的程序在实例化之前不包含行 use DiDom\Element ,您将收到未捕获错误:未找到“Element”类错误元素对象。

获得该元素后,您可以使用 appendChild() 方法将其附加到 DOM 中的其他元素,也可以使用 replace( ) 方法使用新实例化的元素来替换文档中某些旧的 HTML 元素。下面的例子应该有助于进一步阐明这个概念。

require_once('vendor/autoload.php');

use DiDom\Document;
use DiDom\Element;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

// This will result in error.
echo $document->find('h2.test-heading')[0]->html()."\n";

$test_heading = new Element('h2', 'This is test heading.');
$test_heading->class = 'test-heading';

$document->find('h1')[0]->replace($test_heading);

echo $document->find('h2.test-heading')[0]->html()."\n";

最初,我们的文档中没有 test-heading 类的 h2 元素。因此,如果我们尝试访问这样的元素,我们将不断收到错误。

验证不存在这样的元素后,我们创建一个新的h2元素,并将其class属性的值更改为test-heading >.

之后,我们将文档中的第一个 h1 元素替换为新创建的 h2 元素。再次在我们的文档中使用 find() 方法查找带有 test-heading 类的 h2 标题,现在将返回一个元素。

最终想法

本教程介绍了 PHP DiDOM HTML 解析器的基础知识。我们从安装开始,然后学习如何从字符串、文件或 URL 加载 HTML。之后,我们讨论了如何根据 CSS 选择器或 XPath 查找特定元素。我们还学习了如何获取元素的兄弟元素、父元素或子元素。其余部分介绍了如何操作特定元素的属性或在 HTML 文档中添加、删除和替换元素。

如果您希望我在教程中澄清任何内容,请随时在评论中告诉我。

以上是使用DiDOM解析HTML的PHP​​程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
HTML標籤和HTML屬性有什麼區別?HTML標籤和HTML屬性有什麼區別?May 14, 2025 am 12:01 AM

HTMLtagsdefinethestructureofawebpage,whileattributesaddfunctionalityanddetails.1)Tagslike,,andoutlinethecontent'splacement.2)Attributessuchassrc,class,andstyleenhancetagsbyspecifyingimagesources,styling,andmore,improvingfunctionalityandappearance.

HTML的未來:進化和趨勢HTML的未來:進化和趨勢May 13, 2025 am 12:01 AM

HTML的未來將朝著更加語義化、功能化和模塊化的方向發展。 1)語義化將使標籤更明確地描述內容,提升SEO和無障礙訪問。 2)功能化將引入新元素和屬性,滿足用戶需求。 3)模塊化將支持組件化開發,提高代碼復用性。

為什麼HTML屬性對Web開發很重要?為什麼HTML屬性對Web開發很重要?May 12, 2025 am 12:01 AM

htmlattributesarecrucialinwebdevelopment forcontrollingBehavior,外觀和功能

Alt屬性的目的是什麼?為什麼重要?Alt屬性的目的是什麼?為什麼重要?May 11, 2025 am 12:01 AM

alt屬性是HTML中標籤的重要部分,用於提供圖片的替代文本。 1.當圖片無法加載時,alt屬性中的文本會顯示,提升用戶體驗。 2.屏幕閱讀器使用alt屬性幫助視障用戶理解圖片內容。 3.搜索引擎索引alt屬性中的文本,提高網頁的SEO排名。

HTML,CSS和JavaScript:示例和實際應用HTML,CSS和JavaScript:示例和實際應用May 09, 2025 am 12:01 AM

HTML、CSS和JavaScript在網頁開發中的作用分別是:1.HTML用於構建網頁結構;2.CSS用於美化網頁外觀;3.JavaScript用於實現動態交互。通過標籤、樣式和腳本,這三者共同構築了現代網頁的核心功能。

如何在標籤上設置lang屬性?為什麼這很重要?如何在標籤上設置lang屬性?為什麼這很重要?May 08, 2025 am 12:03 AM

設置標籤的lang屬性是優化網頁可訪問性和SEO的關鍵步驟。 1)在標籤中設置lang屬性,如。 2)在多語言內容中,為不同語言部分設置lang屬性,如。 3)使用符合ISO639-1標準的語言代碼,如"en"、"fr"、"zh"等。正確設置lang屬性可以提高網頁的可訪問性和搜索引擎排名。

HTML屬性的目的是什麼?HTML屬性的目的是什麼?May 07, 2025 am 12:01 AM

htmlattributeseresene forenhancingwebelements'functionalityandAppearance.TheyAdDinformationTodeFineBehavior,外觀和互動,使網站互動,響應式,visalalyAppealing.AttributesLikutesLikeSlikEslikesrc,href,href,href,類,類型,類型,和dissabledtransfransformformformformformformformformformformformformformformforment

您如何在HTML中創建列表?您如何在HTML中創建列表?May 06, 2025 am 12:01 AM

toCreateAlistInHtml,useforforunordedlistsandfororderedlists:1)forunorderedlists,wrapitemsinanduseforeachItem,RenderingeringAsabulletedList.2)fororderedlists,useandfornumberedlists,useandfornumberedlists,casundfornumberedlists,casundfornthetthetthetthetthetthetthetttributefordforderfordforderforderentnumberingsnumberingsnumberingStys。

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SecLists

SecLists

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

SublimeText3 Mac版

SublimeText3 Mac版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。