PHP HTML DOM 解析器 中文手册
简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册
目录
快速入门
//从一个URL或者文件创建一个DOM对象
$html = file_get_html('http://www.google.cn/');
// 寻找所有的img标签
foreach($html->find('img') as $element)
echo $element->src . '<br>';
// 寻找所有的链接标签
foreach($html->find('a') as $element)
echo $element->href . '<br>';
$html = file_get_html('http://www.google.cn/');
// 寻找所有的img标签
foreach($html->find('img') as $element)
echo $element->src . '<br>';
// 寻找所有的链接标签
foreach($html->find('a') as $element)
echo $element->href . '<br>';
//从字符串创建一个DOM对象
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
$html->find('div', 1)->class = 'bar';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html; // 输出: <div id="hello">foo</div><div id="world" class="bar">World</div>
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
$html->find('div', 1)->class = 'bar';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html; // 输出: <div id="hello">foo</div><div id="world" class="bar">World</div>
// 从HTML中提取内容(不包含标签)
echo file_get_html('http://www.google.com/')->plaintext;
//从URL创建一个DOM对象
$html = file_get_html('http://slashdot.org/');
// 寻找所有的article块
foreach($html->find('div.article') as $article) {
$item['title'] = $article->find('div.title', 0)->plaintext;
$item['intro'] = $article->find('div.intro', 0)->plaintext;
$item['details'] = $article->find('div.details', 0)->plaintext;
$articles[] = $item;
}
print_r($articles);
$html = file_get_html('http://slashdot.org/');
// 寻找所有的article块
foreach($html->find('div.article') as $article) {
$item['title'] = $article->find('div.title', 0)->plaintext;
$item['intro'] = $article->find('div.intro', 0)->plaintext;
$item['details'] = $article->find('div.details', 0)->plaintext;
$articles[] = $item;
}
print_r($articles);
如何创建HTML DOM 对象?
//从字符串创建一个DOM对象
$html = str_get_html('<html><body>Hello!</body></html>');
//从一个URL创建一个DOM对象
$html = file_get_html('http://www.google.com/');
//从一个HTML文件创建一个DOM对象
$html = file_get_html('test.htm');
$html = str_get_html('<html><body>Hello!</body></html>');
//从一个URL创建一个DOM对象
$html = file_get_html('http://www.google.com/');
//从一个HTML文件创建一个DOM对象
$html = file_get_html('test.htm');
//创建一个DOM对象
$html = new simple_html_dom();
//从字符串中载入HTML
$html->load('<html><body>Hello!</body></html>');
//从URL中载入HTML
$html->load_file('http://www.google.cn/');
//从文件中载入HTML
$html->load_file('test.htm');
//输出
echo $html;
$html = new simple_html_dom();
//从字符串中载入HTML
$html->load('<html><body>Hello!</body></html>');
//从URL中载入HTML
$html->load_file('http://www.google.cn/');
//从文件中载入HTML
$html->load_file('test.htm');
//输出
echo $html;
如何查找HTML元素?
// 查找所有的锚, 返回一个元素对象数组
$ret = $html->find('a');
//查找第N个 锚, 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', 0);
//查找最后一个 锚, 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', -1);
//通过id属性 查找所有的<div>
$ret = $html->find('div[id]');
// 查找所有属性id=foo的<div>标签
$ret = $html->find('div[id=foo]');
$ret = $html->find('a');
//查找第N个 锚, 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', 0);
//查找最后一个 锚, 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', -1);
//通过id属性 查找所有的<div>
$ret = $html->find('div[id]');
// 查找所有属性id=foo的<div>标签
$ret = $html->find('div[id=foo]');
//查找所有id=foo的元素
$ret = $html->find('#foo');
//查找所有class=foo的元素
$ret = $html->find('.foo');
//查找所有包含id属性的的元素
$ret = $html->find('*[id]');
//查找所有的锚与图片
$ret = $html->find('a, img');
//查找所有包含title属性的锚与图片
$ret = $html->find('a[title], img[title]');
$ret = $html->find('#foo');
//查找所有class=foo的元素
$ret = $html->find('.foo');
//查找所有包含id属性的的元素
$ret = $html->find('*[id]');
//查找所有的锚与图片
$ret = $html->find('a, img');
//查找所有包含title属性的锚与图片
$ret = $html->find('a[title], img[title]');
在属性过滤器中支持如下运算符:
过滤器 描述
过滤器 描述
[属性] | 匹配包含指定属性的元素. |
[!属性] | 匹配不包含指定属性的元素. |
[属性=value] | 匹配等于特定值的指定属性的元素. |
[属性!=value] | 匹配除包含特定值的指定属性之外的元素 |
[属性^=value] | 匹配包含特定前缀的值的指定属性的元素. |
[属性$=value] | 匹配包含特定后缀的值的指定属性的元素. |
[属性*=value] | 匹配包含特定值的指定属性的元素.. |
//在<ul>中查找所有的<li>后代
$es = $html->find('ul li');
//查找所有的<div>嵌套标签
$es = $html->find('div div div');
//在<table>中查找所有的class=hello的<td>后代
$es = $html->find('table.hello td');
//在table标签中查找所有属性align=center的td
$es = $html->find(''table td[align=center]');
$es = $html->find('ul li');
//查找所有的<div>嵌套标签
$es = $html->find('div div div');
//在<table>中查找所有的class=hello的<td>后代
$es = $html->find('table.hello td');
//在table标签中查找所有属性align=center的td
$es = $html->find(''table td[align=center]');
//查找所有的text区块
$es = $html->find('text');
//查找所有的comment (<!--...-->)区块
$es = $html->find('comment');
$es = $html->find('text');
//查找所有的comment (<!--...-->)区块
$es = $html->find('comment');
//在<ul>中查找所有的<li>
foreach($html->find('ul') as $ul)
{
foreach($ul->find('li') as $li)
{
//在这里执行操作...
}
}
//在第一个<ul>中查找第一个<li>
$e = $html->find('ul', 0)->find('li', 0);
foreach($html->find('ul') as $ul)
{
foreach($ul->find('li') as $li)
{
//在这里执行操作...
}
}
//在第一个<ul>中查找第一个<li>
$e = $html->find('ul', 0)->find('li', 0);
如何访问HTML元素的属性?
// 获取属性(如果是一个空值属性(例如. checked, selected...这些属性),则返回true或者false)
$value = $e->href;
// 设置属性(如果是一个空值属性(例如. checked, selected...这些属性),则让值等于true或者false)
$e->href = 'my link';
// 删除属性,让其值为空!
$e->href = null;
// 确定某个属性是否存在?
if(isset($e->href))
echo 'href exist!';
$value = $e->href;
// 设置属性(如果是一个空值属性(例如. checked, selected...这些属性),则让值等于true或者false)
$e->href = 'my link';
// 删除属性,让其值为空!
$e->href = null;
// 确定某个属性是否存在?
if(isset($e->href))
echo 'href exist!';
// 列子
$html = str_get_html("<div>foo <b>bar</b></div>");
$e = $html->find("div", 0);
echo $e->tag; // 返回: " div"
echo $e->outertext; // 返回: " <div>foo <b>bar</b></div>"
echo $e->innertext; // 返回: " foo <b>bar</b>"
echo $e->plaintext; // 返回: " foo bar"
属性名 用法
$html = str_get_html("<div>foo <b>bar</b></div>");
$e = $html->find("div", 0);
echo $e->tag; // 返回: " div"
echo $e->outertext; // 返回: " <div>foo <b>bar</b></div>"
echo $e->innertext; // 返回: " foo <b>bar</b>"
echo $e->plaintext; // 返回: " foo bar"
属性名 用法
$e->tag | Read or write the tag name of element. |
$e->outertext | Read or write the outer HTML text of element. |
$e->innertext | Read or write the inner HTML text of element. |
$e->plaintext | Read or write the plain text of element. |
// Extract contents from HTML
echo $html->plaintext;
// Wrap a element
$e->outertext = '<div class="wrap">' . $e->outertext . '<div>';
// Remove a element, set it's outertext as an empty string
$e->outertext = '';
// Append a element
$e->outertext = $e->outertext . '<div>foo<div>';
// Insert a element
$e->outertext = '<div>foo<div>' . $e->outertext;
echo $html->plaintext;
// Wrap a element
$e->outertext = '<div class="wrap">' . $e->outertext . '<div>';
// Remove a element, set it's outertext as an empty string
$e->outertext = '';
// Append a element
$e->outertext = $e->outertext . '<div>foo<div>';
// Insert a element
$e->outertext = '<div>foo<div>' . $e->outertext;
如何遍历DOM树?
//如果你不是很熟悉HTML DOM,那么请点击这个链接查看更多资料...
//列子
echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id;
//或者
echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');
//列子
echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id;
//或者
echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');
你也可以使用骆驼命名法调用.
方法 描述
方法 描述
mixed
$e->children ( [int $index] ) |
Returns the Nth child object if index is set, otherwise return an array of children. |
element
$e->parent () |
Returns the parent of element. |
element
$e->first_child () |
Returns the first child of element, or null if not found. |
element
$e->last_child () |
Returns the last child of element, or null if not found. |
element
$e->next_sibling () |
Returns the next sibling of element, or null if not found. |
element
$e->prev_sibling () |
Returns the previous sibling of element, or null if not found. |
如何储存DOM对象中的内容?
// 将DOM树中的内容储存在字符串中
$str = $html->save();
//将DOM树中的内容储存在文件中
$html->save('result.htm');
$str = $html->save();
//将DOM树中的内容储存在文件中
$html->save('result.htm');
// 将DOM树中的内容储存在字符串中
$str = $html;
//打印输出!
echo $html;
$str = $html;
//打印输出!
echo $html;
如何自定义解析器方法?
//创建一个带有"$element"参数的函数
function my_callback($element) {
//隐藏所有的<b>标签
if ($element->tag=='b')
$element->outertext = '';
}
//用它的函数名注册callback函数
$html->set_callback('my_callback');
//当输出时就会引用Callback函数
echo $html;
function my_callback($element) {
//隐藏所有的<b>标签
if ($element->tag=='b')
$element->outertext = '';
}
//用它的函数名注册callback函数
$html->set_callback('my_callback');
//当输出时就会引用Callback函数
echo $html;