WEB技术之后端技术

php解析html类库simple_html_dom(详细介绍)

PHPer 2018-01-23 397次浏览 0条评论 0 0 0
下载地址:https://github.com/samacs/simple_html_dom 解析器不仅仅只是帮助我们验证html文档;更能解析不符合W3C标准的html文档。它使用了类似jQuery的元素选择器,通过元素的id,class,tag等等来查找定位;同时还提供添...

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


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


代码如下:


<?php
// 新建一个Dom实例
$html = new simple_html_dom();

// 从url中加载
$html->load_file('http://www.jb51.net');

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

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

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

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


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

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

查找html元素

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


代码如下:


<?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的选择器来查找定位元素:


代码如下:


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

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

// 查找多个html标签
$ret = $html->find('a, img');

// 还可以这样用
$ret = $html->find('a[title], img[title]');
?>

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


...

登录 | 立即注册

更新于:2018-01-23 13:55:33
    您需要登录后才可以评论。 登录 | 立即注册
    相关内容

    php - php HTMLPurifier iframe和Youtube视频

    将过滤器添加到HTML过滤器配置中 $config->set('Filter.Custom', array(new HTMLPurifier_Filter_MyIframe()));

    PHP向js传数组

    网上https://www.cnblogs.com/jiqing9006/p/9618417.html的答案是错误的

    php知识点学习整理

    这里记录php知识点学习整理 20200422

    PHP preg_quote() 函数

    PHP str_ireplace() 函数

    PHP双引号中变量的判断

    实测,在双引号中,php对变量的判断方式,应该是用的规范的正则匹配/$\w*[^\W]/;匹配出来的结果在进入变量列表,所以当双引号中,某变量后面增加了\w的字符内容,...

    PHP单一入口应用程序概述

    原文链接:https://www.cnblogs.com/lbs8/p/3704767.html 什么是单一入口应用程序?在解释什么是单一入口应用程序之前,我们先来看看传统的 web ...
    推荐内容

    超省心游戏加速:Wireguard+udp加速(CentOS版)--(实测:超不省心),以后搜帖...

    Wireguard+udpspeeder+udp2raw游戏加速方案 ---------------------------------------错误报告及解决-----------...

    wireguard+udpspeeder+udp2raw多用户配置

    Wireguard+udpspeeder+udp2raw游戏加速方案改进版-实测有效

    基于CentOS7 Centos8平台搭建邮件服务器

    EwoMail​在Centos8上安装了,各种坑,各种报错。这个集成包太臃肿了。 20200416 EwoMail 已经弃用,国内的一家公司搞的坑爹产品。 20200418

    如何在RHEL8 / CentOS8上安装Webmin

    设置postfix作为邮件发送服务器

    查问我看笔记功能的实现过程-全文搜索待开启,试试yiisoft/yii2-sphinx

    查问我看笔记功能的实现的重点就是全文搜索,如果不用Yii自带的ActiveRecord的话,就要找扩展,先找了个yii-xunsearch,不行太差了,又找了yiisoft/yii2-elasticsearch,...

    yii2框架中使用sphinx使用搜索引擎 多条件选择搜索

    运行php composer.phar require --prefer-dist yiisoft/yii2-sphinx

    U盘安装U盘启动-U盘启动盘一键U盘装系统

    https://www.upandashi.com/ 先要做U盘启动盘,然后下载Win7镜像或Win7的Ghost文件,放到U盘里,然后插在电脑上做系统,注意主板要改成U盘优先启动。 ...

    MySQL数据库设计总结

    规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字...

    什么是B-Tree

    二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比