电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:62日期:2022-09-07 14:46:39

其實從PHP5開始,PHP就為我們提供了一個強大的解析和生成XML相關操作的類,也就是我們今天要講的 DOMDocument 類。不過我估計大部分人在爬取網頁時還是會喜歡用正則去解析網頁內容,學了今天的這個類下回就可以嘗試下使用這個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// )

是不是感覺好清晰,好有面向對象的感覺。就像第一次使用 ORM庫 來進行數據庫操作一樣的感覺。我們一段一段來看。

$baidu = file_get_contents(’https://www.baidu.com’);$doc = new DOMDocument();@$doc->loadHTML($baidu);

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

// 百度輸出框$inputSearch = $doc->getElementById(’kw’);var_dump($inputSearch);// object(DOMElement)#2 // ....echo $inputSearch->getAttribute(’name’), PHP_EOL; // wd

首先是加載文檔內容,這個比較好理解,直接使用 loadHTML() 方法加載 HTML 內容。它還提供了其它的幾個方法,分別是: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為指定內容的 DOMElement 對象。然后就可以獲取它的值、屬性之類的內容了。

// 獲取所有圖片的鏈接$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() 方法也能非常方便地對鏈接進行分析,提取自己想要的內容。

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 的基礎都不難看出這段代碼的含義。使用 createElement() 方法創造 DOMElement 對象,然后就可以為它添加屬性和內容。使用 appendChild() 方法就可以為當前的 DOMElement 或者 DOMDocument 添加下級節點。最后使用 saveXML() 就能夠生成標準的XML格式內容了。

總結

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

測試代碼: github.com/zhangyue050…

以上就是PHP中使用DOMDocument來處理HTML、XML文檔的示例的詳細內容,更多關于PHP DOMDocument處理HTML、XML的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | 学习安徽网| 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 【官网】博莱特空压机,永磁变频空压机,螺杆空压机-欧能优 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 泰国试管婴儿_泰国第三代试管婴儿费用|成功率|医院—新生代海外医疗 | 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 气胀轴|气涨轴|安全夹头|安全卡盘|伺服纠偏系统厂家-天机传动 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 一体化污水处理设备,一体化污水设备厂家-宜兴市福源水处理设备有限公司 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 广东教师资格网-广东教师资格证考试网 |