php html解析器Simple HTML Dom

最近在每天工作之余抽取一点小时间做一个小的web应用,中间需要一些原始数据的抓取,用于测试,在网上找到了PHP Simple HTML Dom,是一个简单的HTML DOM解析器,支持PHP5+以上版本,支持无效的HTML,提供了比较简单的方法来处理HTML元素。是一个开源项目。

在使用中基本能够满足目前的需要,相对对于HTML的处理还是比较方便的,就是效率跟占用内存貌似不太理想,可能是对其使用上不是很对路。总来的来说,用这个东西入门还是比较快速的。

1. 开始使用

首先下载解压缩,然后将simple_html_dom.php文件包含进要编写的脚本文件中,加载要处理的html,支持三种模式的html加载,分别是『从url中加载,从字符串中加载,从文件中加载』。

Hello World!');
//从文件中加载
$html = file_get_html('example.htm');

从字符串加载网上文件需要先从网络下下载,使用cURL比较好一些,需要在php配置文件中打开php扩展php_curl。

$url = 'http://www.example.com';
$ci = curl_init();
curl_setopt($ci,CURLOPT_URL,$url);
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ci);

2. 查找html元素

使用find函数查找,返回包含对象的数组,常见的查找如下。

//查找超链接元素
$alink = $html->find('a');
//查找第n个连接元素
$alink = $html->find('a',5);
//查找id为main的div
$mainDiv = $html->find('div[id=main]');
//查找所有定义了id的div
$idDiv = $html->find('div[id]');
//查找所有定义了id的元素
$idAll = $html->find('[id]');
//查找样式类为info的元素
$classInfo = $html->find('.info');
//支持嵌套子元素查找
$ret = $html->find('ul li');
//查找多个html元素
$ret = $html->find('a,img,p');
//....

3. 其他

可以使用内置的函数来进行元素的定位,返回父元素parent,返回子元素数组children,返回第一个子元素first_child,返回最后一个子元素last_child,返回前一个相邻元素prev_sibling,返回后一个相邻元素next_sibling等。

提供简单的正则表达式来过滤属性选择器,类似于[attribute]的格式。

每个对象都有4个基本属性:
tag — 返回html标签名
innertext — 返回innerHTML
outertext — 返回outerHTML
plaintext — 返回HTML标签中的文本

返回元素属性值

//返回$alink的href值
$link = $alink->href;

通过设置元素的属性值可以对元素进行添加、修改、删除操作。

//删除url连接
$alink->href = null;
//元素的修改
$ret->outertext = '
';
$ret->outertext = '';
$ret->outertext = $ret->outertext . '
other
';
$ret->outertext = '
Welcome
' . $ret->outertext;

-EOF-