simple_html_dom让你像jquery一样操作抓取的html网页dom用法

simple_html_dom让你像jquery一样操作抓取的html网页dom用法

simple_html_dom让你像jquery一样操作抓取的html网页dom用法

simple_html_dom是php版本类似jquery操作dom树的插件,使用它可以快速地查找dom树元素,增删改查dom树,适合网页蜘蛛爬虫分析数据使用,下面我们来讲讲他的一些用法

一、simple_html_dom三种加载方式

<?php
 
// 从字符串中加载
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
 
// 从url中加载
$html = file_get_html('http://www.bfw.wiki/');
 
//从本地文件中加载
$html->file_get_html('path/file/test.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]');

2.1还可以使用类似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]');

2.2他还支持对子元素的查找

<?php
// 查找 ul列表中所有的li项
$ret = $html->find('ul li');
 
//查找 ul 列表指定class=selected的li项
$ret = $html->find('ul li.selected');

2.3还可查找子元素父元素及相邻元素

<?php
// 返回父元素
$e->parent;
 
// 返回子元素数组
$e->children;
 
// 通过索引号返回指定子元素
$e->children(0);
 
// 返回第一个资源速
$e->first_child ();
 
// 返回最后一个子元素
$e->last _child ();
 
// 返回上一个相邻元素
$e->prev_sibling ();
 
//返回下一个相邻元素
$e->next_sibling ();

2,.4正则匹配属性操作

使用简单的正则表达式来操作属性选择器。

[attribute] – 选择包含某属性的html元素

[attribute=value] – 选择所有指定值属性的html元素

[attribute!=value]- 选择所有非指定值属性的html元素

[attribute^=value] -选择所有指定值开头属性的html元素

[attribute$=value] 选择所有指定值结尾属性的html元素

[attribute*=value] -选择所有包含指定值属性的html元素

三、获取或修改dom元素的属性值


在解析器中调用元素属性

在DOM中元素属性也是对象:

<?php
// 本例中将$a的锚链接值赋给$link变量
$link = $a->href;
//或者:
$link = $html->find('a',0)->href;
每个对象都有4个基本对象属性:

tag – 返回html标签名

innertext – 返回innerHTML

outertext – 返回outerHTML

plaintext – 返回html标签中的文本

3.2 在解析器中编辑元素

编辑元素属性的用法和调用它们是类似的:

<?php
//给$a的锚链接赋新值
$a->href = 'http://www.bfw.wiki';

// 删除锚链接
$a->href = null;

// 检测是否存在锚链接
if(isset($a->href)) {
//代码
}

3.2添加删除元素


<?php
// 封装元素
$e->outertext = '<div class="wrap">' . $e->outertext . '<div>';

// 删除元素
$e->outertext = '';

// 添加元素
$e->outertext = $e->outertext . '<div>foo<div>';

// 插入元素
$e->outertext = '<div>foo<div>' . $e->outertext;

保存修改后的html DOM文档也非常简单:

$doc = $html;

// 输出
echo $doc;

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

只要在使用完后释放对象

$html->clear();

五、项目webide在线地址,可在线直接修改源码调试

http://studio.bfw.wiki/Studio/Open.html?projectid=15868571942752150037

{{collectdata}}

网友评论0