目錄
开始使用
查找html元素
元素属性操作
在解析器中调用元素属性
在解析器中编辑元素
如何避免解析器消耗过多内存
首頁 php教程 php手册 PHP Simple HTML DOM解析器使用入门

PHP Simple HTML DOM解析器使用入门

Jun 06, 2016 pm 07:54 PM
dom html php simple 使用 入門 解析

一直以来使用php解析html文档树都是一个难题。 Simple HTML DOM parser 帮我们很好地解决了这个问题。可以通过这个php类来解析html文档,对其中的html元素进行操作 (PHP5以上版本)。 解析器不仅仅只是帮助我们验证html文档;更能解析不符合W3C标准的html文档

一直以来使用php解析html文档树都是一个难题。Simple HTML DOM parser 帮我们很好地解决了这个问题。可以通过这个php类来解析html文档,对其中的html元素进行操作 (PHP5+以上版本)。

解析器不仅仅只是帮助我们验证html文档;更能解析不符合W3C标准的html文档。它使用了类似jQuery的元素选择器,通过元素的id,class,tag等等来查找定位;同时还提供添加、删除、修改文档树的功能。当然,这样一款强大的html Dom解析器也不是尽善尽美;在使用的过程中需要十分小心内存消耗的情况。不过,不要担心;本文中,笔者在最后会为各位介绍如何避免消耗过多的内存。

开始使用

上传类文件以后,有三种方式调用这个类:

从url中加载html文档

从字符串中加载html文档

从文件中加载html文档

?

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

// 新建一个Dom实例

$html = new simple_html_dom();

  

// 从url中加载

$html->load_file('http://www.cnphp.info/php-simple-html-dom-parser-intro.html');

  

// 从字符串中加载

$html->load('从字符串中加载html文档演示');

  

//从文件中加载

$html->load_file('path/file/test.html');

?>

如果从字符串加载html文档,需要先从网络上下载。建议使用cURL来抓取html文档并加载DOM中。

查找html元素

可以使用find函数来查找html文档中的元素。返回的结果是一个包含了对象的数组。我们使用HTML DOM解析类中的函数来访问这些对象,下面给出几个示例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?php

  

//查找html文档中的超链接元素

$a = $html->find('a');

  

//查找文档中第(N)个超链接,如果没有找到则返回空数组.

$a = $html->find('a', 0);

  

// 查找id为main的div元素

$main = $html->find('div[id=main]',0);

  

// 查找所有包含有id属性的div元素

$divs = $html->find('div[id]');

  

// 查找所有包含有id属性的元素

$divs = $html->find('[id]');

?>

还可以使用类似jQuery的选择器来查找定位元素:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

// 查找id='#container'的元素

$ret = $html->find('#container');

  

// 找到所有class=foo的元素

$ret = $html->find('.foo');

  

$ret = $html->find('a, img');

  

// 还可以这样用

$ret = $html->find('a[title], img[title]');

?>

解析器支持对子元素的查找

?

1

2

3

4

5

6

7

8

9

<?php

  

// 查找 ul列表中所有的li项

$ret = $html->find('ul li');

  

//查找 ul 列表指定class=selected的li项

$ret = $html->find('ul li.selected');

  

?>

如果你觉得这样用起来麻烦,使用内置函数可以轻松定位元素的父元素、子元素与相邻元素

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?php

// 返回父元素

$e->parent;

  

// 返回子元素数组

$e->children;

  

// 通过索引号返回指定子元素

$e->children(0);

  

// 返回第一个资源速

$e->first_child ();

  

// 返回最后一个子元素

$e->last _child ();

  

// 返回上一个相邻元素

$e->prev_sibling ();

  

//返回下一个相邻元素

$e->next_sibling ();

?>

元素属性操作

使用简单的正则表达式来操作属性选择器。

[attribute] – 选择包含某属性的html元素

[attribute=value] – 选择所有指定值属性的html元素

[attribute!=value]- 选择所有非指定值属性的html元素

[attribute^=value] -选择所有指定值开头属性的html元素

[attribute$=value] 选择所有指定值结尾属性的html元素

[attribute*=value] -选择所有包含指定值属性的html元素

在解析器中调用元素属性

在DOM中元素属性也是对象:

?

1

2

3

4

<?php

// 本例中将$a的锚链接值赋给$link变量

$link = $a->href;

?>

或者:

?

1

2

3

<?php

$link = $html->find('a',0)->href;

?>

每个对象都有4个基本对象属性:

innertext – 返回innerHTML

outertext – 返回outerHTML

在解析器中编辑元素

编辑元素属性的用法和调用它们是类似的:

?

1

2

3

4

5

6

7

8

9

10

11

12

<?php

//给$a的锚链接赋新值

$a->href = 'http://www.cnphp.info';

  

// 删除锚链接

$a->href = null;

  

// 检测是否存在锚链接

if(isset($a->href)) {

//代码

}

?>

解析器中没有专门的方法来添加、删除元素,不过可以变通一下使用:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

  

// 封装元素

$e->outertext = '<div class="wrap">' <code> . $e->outertext . '<div>'<code>;

  

// 删除元素

$e->outertext = '';

  

// 添加元素

$e->outertext = $e->outertext . '<div>foo<div>'<code>;

  

// 插入元素

$e->outertext = '<div>foo<div>' <code>. $e->outertext;

?>

保存修改后的html DOM文档也非常简单:

?

1

2

3

4

5

6

<?php

$doc = $html;

  

// 输出

echo $doc;

?>

如何避免解析器消耗过多内存

在本文的开篇中,笔者就提到了Simple HTML DOM解析器消耗内存过多的问题。如果php脚本占用内存太多,会导致网站停止响应等一系列严重的问题。解决的方法也很简单,在解析器加载html文档并使用完成后,记得清理掉这个对象就可以了。当然,也不要把问题看得太严重了。如果只是加载了2、3个文档,清理或不清理是没有多大区别的。当你加载了5个10个甚至更多的文档的时候,用完一个就清理一下内存绝对是对自己负责啦^_^

?

1

2

3

<?php

$html->clear();

?>

45

PHP Simple HTML DOM解析器使用入门

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 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)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

了解HTML,CSS和JavaScript:初學者指南 了解HTML,CSS和JavaScript:初學者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

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

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

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

See all articles