国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - PHP教程 - php解析html類庫(kù)simple_html_dom(詳細(xì)介紹)

php解析html類庫(kù)simple_html_dom(詳細(xì)介紹)

2020-05-09 12:19PHP教程網(wǎng) PHP教程

一直以來(lái)使用php解析html文檔樹都是一個(gè)難題。Simple HTML DOM parser 幫我們很好地解決了這個(gè)問(wèn)題。可以通過(guò)這個(gè)php類來(lái)解析html文檔,對(duì)其中的html元素進(jìn)行操作 (PHP5+以上版本)

下載地址:https://github.com/samacs/simple_html_dom

解析器不僅僅只是幫助我們驗(yàn)證html文檔;更能解析不符合W3C標(biāo)準(zhǔn)的html文檔。它使用了類似jQuery的元素選擇器,通過(guò)元素的id,class,tag等等來(lái)查找定位;同時(shí)還提供添加、刪除、修改文檔樹的功能。當(dāng)然,這樣一款強(qiáng)大的html Dom解析器也不是盡善盡美;在使用的過(guò)程中需要十分小心內(nèi)存消耗的情況。不過(guò),不要擔(dān)心;本文中,筆者在最后會(huì)為各位介紹如何避免消耗過(guò)多的內(nèi)存。
開(kāi)始使用
上傳類文件以后,有三種方式調(diào)用這個(gè)類:
從url中加載html文檔
從字符串中加載html文檔
從文件中加載html文檔

復(fù)制代碼 代碼如下:


<?php
// 新建一個(gè)Dom實(shí)例
$html = new simple_html_dom();

// 從url中加載
$html->load_file('//www.jfrwli.cn');

// 從字符串中加載
$html->load('<html><body>從字符串中加載html文檔演示</body></html>');

//從文件中加載
$html->load_file('path/file/test.html');
?>


如果從字符串加載html文檔,需要先從網(wǎng)絡(luò)上下載。建議使用cURL來(lái)抓取html文檔并加載DOM中。
查找html元素
可以使用find函數(shù)來(lái)查找html文檔中的元素。返回的結(jié)果是一個(gè)包含了對(duì)象的數(shù)組。我們使用HTML DOM解析類中的函數(shù)來(lái)訪問(wèn)這些對(duì)象,下面給出幾個(gè)示例:

復(fù)制代碼 代碼如下:


<?php

//查找html文檔中的超鏈接元素
$a = $html->find('a');

//查找文檔中第(N)個(gè)超鏈接,如果沒(méi)有找到則返回空數(shù)組.
$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的選擇器來(lái)查找定位元素:

復(fù)制代碼 代碼如下:


<?php
// 查找id='#container'的元素
$ret = $html->find('#container');

// 找到所有class=foo的元素
$ret = $html->find('.foo');

// 查找多個(gè)html標(biāo)簽
$ret = $html->find('a, img');

// 還可以這樣用
$ret = $html->find('a[title], img[title]');
?>


解析器支持對(duì)子元素的查找

復(fù)制代碼 代碼如下:


<?php

// 查找 ul列表中所有的li項(xiàng)
$ret = $html->find('ul li');

//查找 ul 列表指定class=selected的li項(xiàng)
$ret = $html->find('ul li.selected');

?>


如果你覺(jué)得這樣用起來(lái)麻煩,使用內(nèi)置函數(shù)可以輕松定位元素的父元素、子元素與相鄰元素

復(fù)制代碼 代碼如下:


<?php
// 返回父元素
$e->parent;

// 返回子元素?cái)?shù)組
$e->children;

// 通過(guò)索引號(hào)返回指定子元素
$e->children(0);

// 返回第一個(gè)資源速
$e->first_child ();

// 返回最后一個(gè)子元素
$e->last _child ();

// 返回上一個(gè)相鄰元素
$e->prev_sibling ();

//返回下一個(gè)相鄰元素
$e->next_sibling ();
?>


元素屬性操作
使用簡(jiǎn)單的正則表達(dá)式來(lái)操作屬性選擇器。
[attribute] – 選擇包含某屬性的html元素
[attribute=value] – 選擇所有指定值屬性的html元素
[attribute!=value]- 選擇所有非指定值屬性的html元素
[attribute^=value] -選擇所有指定值開(kāi)頭屬性的html元素
[attribute$=value] 選擇所有指定值結(jié)尾屬性的html元素
[attribute*=value] -選擇所有包含指定值屬性的html元素
在解析器中調(diào)用元素屬性
在DOM中元素屬性也是對(duì)象:

復(fù)制代碼 代碼如下:


<?php
// 本例中將$a的錨鏈接值賦給$link變量
$link = $a->href;
?>


或者:

復(fù)制代碼 代碼如下:


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


每個(gè)對(duì)象都有4個(gè)基本對(duì)象屬性:
tag – 返回html標(biāo)簽名
innertext – 返回innerHTML
outertext – 返回outerHTML
plaintext – 返回html標(biāo)簽中的文本
在解析器中編輯元素
編輯元素屬性的用法和調(diào)用它們是類似的:

復(fù)制代碼 代碼如下:


<?php
//給$a的錨鏈接賦新值
$a->href = '//www.jfrwli.cn';

// 刪除錨鏈接
$a->href = null;

// 檢測(cè)是否存在錨鏈接
if(isset($a->href)) {
//代碼
}
?>


解析器中沒(méi)有專門的方法來(lái)添加、刪除元素,不過(guò)可以變通一下使用:

復(fù)制代碼 代碼如下:


<?php
// 封裝元素
$e->outertext = '<div class="wrap">' . $e->outertext . '<div>';

// 刪除元素
$e->outertext = '';

// 添加元素
$e->outertext = $e->outertext . '<div>foo<div>';

// 插入元素
$e->outertext = '<div>foo<div>' . $e->outertext;
?


保存修改后的html DOM文檔也非常簡(jiǎn)單:

復(fù)制代碼 代碼如下:


<?php
$doc = $html;
// 輸出
echo $doc;
?>


如何避免解析器消耗過(guò)多內(nèi)存
在本文的開(kāi)篇中,筆者就提到了Simple HTML DOM解析器消耗內(nèi)存過(guò)多的問(wèn)題。如果php腳本占用內(nèi)存太多,會(huì)導(dǎo)致網(wǎng)站停止響應(yīng)等一系列嚴(yán)重的問(wèn)題。解決的方法也很簡(jiǎn)單,在解析器加載html文檔并使用完成后,記得清理掉這個(gè)對(duì)象就可以了。當(dāng)然,也不要把問(wèn)題看得太嚴(yán)重了。如果只是加載了2、3個(gè)文檔,清理或不清理是沒(méi)有多大區(qū)別的。當(dāng)你加載了5個(gè)10個(gè)甚至更多的文檔的時(shí)候,用完一個(gè)就清理一下內(nèi)存絕對(duì)是對(duì)自己負(fù)責(zé)啦^_^

復(fù)制代碼 代碼如下:


<?php
$html->clear();
?>


延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久久久久久久久久亚洲 | 欧美 亚洲 另类 激情 另类 | 午夜久久久久 | 亚洲 欧美 日韩在线 | 久久精品久久综合 | 久久精品| 精品国产三级 | 国产成人精品一区二区 | 网站黄色在线观看免费 | 欧美中文字幕一区二区三区亚洲 | 久久久在线免费观看 | 一区二区不卡视频 | 日韩在线资源 | 欧美日韩精品一区 | 欧美视频二区 | 亚洲欧美在线观看 | 色精品| 亚洲精品国产a | 黄色影片免费在线观看 | 伊人干 | 成人爱情偷拍视频在线观看 | 中文字幕欧美激情 | 亚洲国产精品久久久久秋霞蜜臀 | 中文字幕不卡 | 国产中文字幕观看 | 欧美精品成人一区二区三区四区 | 黄色美女免费 | 欧美激情二区 | 国产精品免费看片 | 亚洲情在线| 国产精品综合一区二区 | 秋霞午夜 | 日韩无在线| 宅男lu666噜噜噜在线观看 | 欧美一区二区三区在线播放 | 欧美一区二区三区在线观看视频 | 天天看天天操 | 自拍视频网站 | 精品少妇一区二区三区日产乱码 | 免费一级a毛片免费观看 | 久久久久网站 |