hyadijxp 发表于 2017-4-10 12:42:13

简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册

  简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册
目录

[*]快速入门
[*]如何创建HTML DOM 对象?
[*]如何查找HTML元素?
[*]如何访问HTML元素的属性?
[*]如何遍历DOM树?
[*]如何储存DOM对象中的内容?
[*]如何自定义解析器方法?
[*]API 参考
[*]FAQ
快速入门
Top

[*]获取HTML元素
[*]修改HTML元素
[*]从HTML中提取内容
[*]提取Slashdot!
//从一个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>';

//从字符串创建一个DOM对象
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div', 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 DOM 对象?
Top

[*]一般的方法
[*]面向对象的方法
//从字符串创建一个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');


//创建一个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元素?
Top

[*]基本方法
[*]高级方法
[*]后代选择器
[*]嵌套选择器
[*]属性过滤器
[*]文本与评论
// 查找所有的锚, 返回一个元素对象数组
$ret = $html->find('a');

//查找第N个 锚, 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', 0);

//查找最后一个 锚, 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', -1); 

//通过id属性 查找所有的<div>
$ret = $html->find('div');

// 查找所有属性id=foo的<div>标签
$ret = $html->find('div'); 


//查找所有id=foo的元素
$ret = $html->find('#foo');

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

//查找所有包含id属性的的元素
$ret = $html->find('*'); 

//查找所有的锚与图片
$ret = $html->find('a, img'); 

//查找所有包含title属性的锚与图片
$ret = $html->find('a, img');


在属性过滤器中支持如下运算符:

过滤器描述[属性]匹配包含指定属性的元素.[!属性]匹配不包含指定属性的元素.[属性=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(''tabletd');


//查找所有的text区块
$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);



如何访问HTML元素的属性?
Top

[*]获取,设置以及删除属性
[*]魔法属性
[*]提示
// 获取属性(如果是一个空值属性(例如. 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!';


// 列子
$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->tagRead or write the tag name of element.$e->outertextRead or write the outer HTML text of element.$e->innertextRead or write the inner HTML text of element.$e->plaintextRead 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;



如何遍历DOM树?
Top

[*]背景知识
[*]遍历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');

你也可以使用骆驼命名法调用.
方法描述mixed
$e->children (  )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, ornull if not found.element
$e->prev_sibling ()Returns the previous sibling of element, or null if not found.


如何储存DOM对象中的内容?
Top

[*]一般的方法
[*]面向对象的方法
// 将DOM树中的内容储存在字符串中
$str = $html->save();

//将DOM树中的内容储存在文件中 
$html->save('result.htm');

// 将DOM树中的内容储存在字符串中 
$str = $html;

//打印输出!
echo $html; 



如何自定义解析器方法?
Top

[*]Callback 函数
//创建一个带有"$element"参数的函数
function my_callback($element) {
        //隐藏所有的<b>标签
        if ($element->tag=='b')
                $element->outertext = '';


//用它的函数名注册callback函数
$html->set_callback('my_callback');

//当输出时就会引用Callback函数
echo $html;



作者: S.C. Chen (me578022@gmail.com)
本程序创意来自Jose Solorzano的HTML Parser for PHP 4. 
贡献者: Yousuke Kumakura, Vadim Voituk, Antcs
中文手册翻译:蜗牛 
指正翻译中的错误,以及该程序的讨论地址:蜗牛的牛窝
ComSing 开发者之家

页: [1]
查看完整版本: 简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册