`

perl 解析html, 自己写的几个比较常用方法

    博客分类:
  • perl
阅读更多

perl解析html, 比较常用的模块是 HTML::TreeBuilder,该模块将html字符转化dom树,方便操作

一个dom元素对应 一个HTML::Element对象,dom的

属性方法都定义在该类中,以下是代码

 

# 一个dom元素,比较重要的属性,方法
# attr: $e->attr('id')                 返回标签的某个属性值
# text: $e->as_text                    返回标签包裹的内容,如<a>click me</a> 返回的是 click me
# html: $e->as_HTML                    返回该元素的html文本
# tagname: $e->tag() ,                 返回标签名,如a,div, 小写形式
# parent node: $e->parent           , 返回父节点
# children node: $e->content_list() ,  返回所有子节点,只是直接子节点

use HTML::TreeBuilder;
@d=<DATA>;
$html = join "",@d;
#print get_elements_by_attr_regex($html, 'id', qr/^\d+$/)->as_HTML;
# @elist = get_elements($html,'table','id',qr/\d+/);
# print $elist[0]->as_HTML;


$table = get_element_by_id($html, 'table1');
@children = $table->content_list();
foreach $child (@children){
	print "child tag:",$child->tag(), "\n";
}





#function defined........................

#$html: a html content
#$attr: attribute name
#$attr_regex: a pattern of attr value
sub get_elements_by_attr_regex{
	my ($html, $attr, $attr_regex) = @_;
	my $tree = new HTML::TreeBuilder;
	$tree->parse_content($html);
	my @list = $tree->look_down($attr, $attr_regex);
	return @list;
}



#$html: a html content
#$idvalue: id value
#
sub get_element_by_id{
	my ($html, $idvalue) =@_;
	my $tree = new HTML::TreeBuilder;
	$tree->parse_content($html);
	my @list = $tree->look_down('id',$idvalue);
	die "not unique element by id:$idvalue" if scalar(@list) != 1;
	return $list[0];
}

#$html: a html content
#$tagname: tag name
#
sub get_elements_by_tag_name{
	my ($html, $tagname) =@_;
	my $tree = new HTML::TreeBuilder;
	$tree->parse_content($html);
	return $tree->find_by_tag_name($tagname);
}

#$html: a html string
#$tag:  tag name
#$attr: attr name
#$attr_regex: attr value pattern
sub get_elements{
	my ($html, $tag, $attr, $attr_regex) = @_;
	my @list = get_elements_by_attr_regex($html, $attr, $attr_regex);
	$tag = lc $tag;
	@list = grep $_->tag() eq $tag, @list;
	return @list;
}


__DATA__
<table	id="table1" border="1" cellspacing="0" cellpadding="6">
  <tr><td><a href="x">x text</a></td><td><a href="y">y</a></td></tr>
  <tr><td id='1s'>1</td><td >2</td></tr>
</table>
 

 

 

 

 

 

分享到:
评论

相关推荐

    PHP基础教程 是一个比较有价值的PHP新手教程!

    与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...

    正则表达式

    JavaScript采用的是Perl语言正则表达式语法的一个相当完整的子集. 正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/...

    x-scan-v3.3-cn

    这个命令的意思是让xscanner扫描服务器211.100.8.87的开放端口,扫描器不会对65535个端口全部进行扫描(太慢),它只会检测网络上最常用的几百个端口,而且每一个端口对应的网络服务在扫描器中都已经做过定义,从...

    精通正则表达式~~~

    Pattern的split方法,两个参数... 396 拓展示例... 397 为Image Tag添加宽度和高度属性... 397 对于每个Matcher,使用多个Pattern校验HTML. 399 解析CSV文档... 401 Java版本差异... 401 1.4.2和1.5.0之间的...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    在这是junit测试单元类我就不提交了,在main()方法中有几个小测试,有兴趣自己玩吧. 这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1....

    freemarker总结

    表达式中支持的比较运算符有如下几个: 1. =或者==:判断两个值是否相等. 2. !=:判断两个值是否不等. 3. &gt;或者gt:判断左边值是否大于右边值 4. &gt;=或者gte:判断左边值是否大于等于右边值 5. &lt;或者lt:判断左边值...

    JAVA上百实例源码以及开源项目

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    JAVA上百实例源码以及开源项目源代码

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    java开源包1

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包11

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包2

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包3

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包6

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包5

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包10

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包4

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包8

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包7

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

    java开源包9

    JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long() Java的HTTP代理服务器 Smart Cache Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的...

Global site tag (gtag.js) - Google Analytics