最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP中使用DOMDocument來處理HTML、XML文檔的示例

 更新時間:2021年04月29日 11:28:35   作者:硬核項目經(jīng)理  
這篇文章主要介紹了PHP中使用DOMDocument來處理HTML、XML文檔的示例,幫助大家更好的理解和學(xué)習(xí)使用php語言,感興趣的朋友可以了解下

其實從PHP5開始,PHP就為我們提供了一個強大的解析和生成XML相關(guān)操作的類,也就是我們今天要講的 DOMDocument 類。不過我估計大部分人在爬取網(wǎng)頁時還是會喜歡用正則去解析網(wǎng)頁內(nèi)容,學(xué)了今天的這個類下回就可以嘗試下使用這個PHP自帶的方式來進行解析分析了。

解析HTML

// 解析 HTML
$baidu = file_get_contents('https://www.baidu.com');

$doc = new DOMDocument();
@$doc->loadHTML($baidu);

// 百度輸出框
$inputSearch = $doc->getElementById('kw');
var_dump($inputSearch);

// object(DOMElement)#2 
//     ....

echo $inputSearch->getAttribute('name'), PHP_EOL; // wd

// 獲取所有圖片的鏈接
$allImageLinks = [];
$imgs = $doc->getElementsByTagName('img');
foreach($imgs as $img){
    $allImageLinks[] = $img->getAttribute('src');
}

print_r($allImageLinks);

// Array
// (
//     [0] => //www.baidu.com/img/baidu_jgylogo3.gif
//     [1] => //www.baidu.com/img/bd_logo.png
//     [2] => http://s1.bdstatic.com/r/www/cache/static/global/img/gs_237f015b.gif
// )

// 利用 parse_url 分析鏈接
foreach($allImageLinks as $link){
    print_r(parse_url($link));
}

// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/baidu_jgylogo3.gif
// )
// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/bd_logo.png
// )
// Array
// (
//     [scheme] => http
//     [host] => s1.bdstatic.com
//     [path] => /r/www/cache/static/global/img/gs_237f015b.gif
// )

是不是感覺好清晰,好有面向?qū)ο蟮母杏X。就像第一次使用 ORM庫 來進行數(shù)據(jù)庫操作一樣的感覺。我們一段一段來看。

$baidu = file_get_contents('https://www.baidu.com');

$doc = new DOMDocument();
@$doc->loadHTML($baidu);

首先是加載文檔內(nèi)容,這個比較好理解,直接使用 loadHTML() 方法加載 HTML 內(nèi)容。它還提供了其它的幾個方法,分別是:load() 從一個文件加載XML;loadXML() 從字符串加載XML;loadHTMLFile() 從文件加載HTML。

// 百度輸出框
$inputSearch = $doc->getElementById('kw');
var_dump($inputSearch);

// object(DOMElement)#2 
//     ....

echo $inputSearch->getAttribute('name'), PHP_EOL; // wd

首先是加載文檔內(nèi)容,這個比較好理解,直接使用 loadHTML() 方法加載 HTML 內(nèi)容。它還提供了其它的幾個方法,分別是:load() 從一個文件加載XML;loadXML() 從字符串加載XML;loadHTMLFile() 從文件加載HTML。

// 百度輸出框
$inputSearch = $doc->getElementById('kw');
var_dump($inputSearch);

// object(DOMElement)#2 
//     ....

echo $inputSearch->getAttribute('name'), PHP_EOL; // wd

接下來我們使用和前端 JS 一樣的 DOM 操作API來操作HTML里面的元素。這個例子中就是獲取百度的文本框,直接使用 getElementById() 方法獲得id為指定內(nèi)容的 DOMElement 對象。然后就可以獲取它的值、屬性之類的內(nèi)容了。

// 獲取所有圖片的鏈接
$allImageLinks = [];
$imgs = $doc->getElementsByTagName('img');
foreach($imgs as $img){
    $allImageLinks[] = $img->getAttribute('src');
}

print_r($allImageLinks);

// Array
// (
//     [0] => //www.baidu.com/img/baidu_jgylogo3.gif
//     [1] => //www.baidu.com/img/bd_logo.png
//     [2] => http://s1.bdstatic.com/r/www/cache/static/global/img/gs_237f015b.gif
// )

// 利用 parse_url 分析鏈接
foreach($allImageLinks as $link){
    print_r(parse_url($link));
}

// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/baidu_jgylogo3.gif
// )
// Array
// (
//     [host] => www.baidu.com
//     [path] => /img/bd_logo.png
// )
// Array
// (
//     [scheme] => http
//     [host] => s1.bdstatic.com
//     [path] => /r/www/cache/static/global/img/gs_237f015b.gif
// )

這一段例子則是獲取HTML文檔中所有的圖片鏈接。相比正則來說,是不是方便很多,而且代碼本身就是自解釋的,不用考慮正則的匹配失效的問題。配合另外一個PHP中自帶的 parse_url() 方法也能非常方便地對鏈接進行分析,提取自己想要的內(nèi)容。

XML的解析和對HTML的解析也是類似的,都使用 DOMDocument 和 DOMElement 提供的這個方法接口就可以很方便的進行解析了。那么我們想要生成一個標準格式的XML呢?當然也非常的簡單,不需要再去拼接字符串了,使用這個類一樣的進行對象化的操作。

生成一個XML

// 生成一個XML文檔
$xml = new DOMDocument('1.0', 'UTF-8');

$node1 = $xml->createElement('First', 'This is First Node.');
$node1->setAttribute('type', '1');

$node2 = $xml->createElement('Second');
$node2->setAttribute('type', '2');
$node2_child = $xml->createElement('Second-Child', 'This is Second Node Child.');
$node2->appendChild($node2_child);

$xml->appendChild($node1);
$xml->appendChild($node2);
print $xml->saveXML();

/*
<?xml version="1.0" encoding="UTF-8"?>
<First type="1">This is First Node.</First>
<Second type="2"><Second-Child>This is Second Node Child.</Second-Child></Second>
*/

其實只要有一點點的前端 JS 的基礎(chǔ)都不難看出這段代碼的含義。使用 createElement() 方法創(chuàng)造 DOMElement 對象,然后就可以為它添加屬性和內(nèi)容。使用 appendChild() 方法就可以為當前的 DOMElement 或者 DOMDocument 添加下級節(jié)點。最后使用 saveXML() 就能夠生成標準的XML格式內(nèi)容了。

總結(jié)

通過上面兩個簡單的小例子,相信大家已經(jīng)對這個 DOMDocument 操作XML類文件解析的方式非常感興趣了。不過相對于正則解析的方式它們的性能有多大的差異并沒有找到相關(guān)的測試,不過一般正常的情況下網(wǎng)站的HMTL文檔都不會太大,畢竟各個網(wǎng)站也會考慮自身的加載速度,如果文檔非常大的話用戶體驗也會很差,所以這套接口用來進行日常爬蟲的分析處理工作基本是沒有任何問題的。

測試代碼: github.com/zhangyue050…

以上就是PHP中使用DOMDocument來處理HTML、XML文檔的示例的詳細內(nèi)容,更多關(guān)于PHP DOMDocument處理HTML、XML的資料請關(guān)注腳本之家其它相關(guān)文章!

  • php+html5基于websocket實現(xiàn)聊天室的方法

    php+html5基于websocket實現(xiàn)聊天室的方法

    這篇文章主要介紹了php+html5基于websocket實現(xiàn)聊天室的方法,實例分析了php結(jié)合html5的websocket通訊的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 解決Yii2郵件發(fā)送結(jié)果返回成功,但接收不到郵件的問題

    解決Yii2郵件發(fā)送結(jié)果返回成功,但接收不到郵件的問題

    最近在使用Yii2發(fā)送郵件的時候遇到了一個問題,發(fā)送返回提示成功但并沒有收到郵件,所以通過查找相關(guān)的資料,下面這篇文章就來給大家介紹了關(guān)于如何解決Yii2郵件發(fā)送結(jié)果返回成功,但接收不到郵件的問題,需要的朋友可以參考下。
    2017-05-05
  • php網(wǎng)頁后退不再出現(xiàn)過期

    php網(wǎng)頁后退不再出現(xiàn)過期

    php網(wǎng)頁后退不再出現(xiàn)過期...
    2007-03-03
  • PHP入門教程之日期與時間操作技巧總結(jié)(格式化,驗證,獲取,轉(zhuǎn)換,計算等)

    PHP入門教程之日期與時間操作技巧總結(jié)(格式化,驗證,獲取,轉(zhuǎn)換,計算等)

    這篇文章主要介紹了PHP入門教程之日期與時間操作技巧,結(jié)合實例形式總結(jié)分析了php針對日期與時間的驗證、格式化、獲取、轉(zhuǎn)換、計算等相關(guān)操作技巧,需要的朋友可以參考下
    2016-09-09
  • PHP屏蔽蜘蛛訪問代碼及常用搜索引擎的HTTP_USER_AGENT

    PHP屏蔽蜘蛛訪問代碼及常用搜索引擎的HTTP_USER_AGENT

    屏蔽蜘蛛相信每一位站長都不希望這樣做吧,因為蜘蛛的訪問就沒有用戶的瀏覽,直接會給我們帶來一定損失,不過也有例外,某些網(wǎng)站就不希望被蜘蛛爬行,接下來為你介紹屏蔽蜘蛛的php代碼
    2013-03-03
  • 淺談web上存漏洞及原理分析、防范方法(安全文件上存方法)

    淺談web上存漏洞及原理分析、防范方法(安全文件上存方法)

    我們知道,上存漏洞常見有,文件名檢測漏洞,還有就是文件格式檢查漏洞。 另外還有個一個,就是保存文件存在漏洞
    2013-06-06
  • apache配置虛擬主機的方法詳解

    apache配置虛擬主機的方法詳解

    本篇文章是對apache配置虛擬主機的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Php部分常見問題總結(jié)

    Php部分常見問題總結(jié)

    [紅色]Php部分常見問題總結(jié)...
    2006-12-12
  • PHP+jQuery實現(xiàn)滾屏無刷新動態(tài)加載數(shù)據(jù)功能詳解

    PHP+jQuery實現(xiàn)滾屏無刷新動態(tài)加載數(shù)據(jù)功能詳解

    這篇文章主要介紹了PHP+jQuery實現(xiàn)滾屏無刷新動態(tài)加載數(shù)據(jù)功能,涉及php動態(tài)讀取數(shù)據(jù)庫及加載數(shù)據(jù)實現(xiàn)滾屏無刷新效果的具體操作技巧,需要的朋友可以參考下
    2017-05-05
  • 最新評論

    灵丘县| 卢氏县| 兰考县| 寻乌县| 梅州市| 泰宁县| 介休市| 江油市| 长兴县| 盘锦市| 庄浪县| 博罗县| 武定县| 广丰县| 靖远县| 大冶市| 庆城县| 镇巴县| 南和县| 明光市| 翁牛特旗| 云安县| 南皮县| 庆元县| 榕江县| 临潭县| 山东| 洛扎县| 台东市| 根河市| 荔波县| 无为县| 太谷县| 登封市| 泽州县| 龙山县| 合水县| 霍州市| 五寨县| 礼泉县| 东乡|