`

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>
 

 

 

 

 

 

分享到:
评论

相关推荐

    Perl-CGI.rar_CGI Perl_CGI编程_cgi

    Perl CGI编程涉及到的知识点广泛,主要包括以下几个方面: 1. **Perl语言基础**:在学习Perl CGI之前,需要掌握Perl的基本语法、数据类型、控制结构、函数等。例如,了解如何声明变量、字符串操作、数组和哈希的...

    Teach_Yourself_CGI_Programming_With_Perl_5_In_A_Week

    - **变量操作**:通过几个练习了解Perl中的变量类型和使用方法。 **3.2 HTTP与浏览器通信** - **URI**:理解统一资源标识符的构成。 - **请求网页**:介绍用户通过浏览器向服务器发送请求的过程。 - **TCP/IP协议*...

    CGI-Perl实例起步(HTM).rar

    在Perl中编写CGI程序涉及以下几个关键知识点: 1. **环境变量**:CGI程序通过一系列预定义的环境变量获取来自Web服务器的信息,如`REQUEST_METHOD`(GET或POST请求)、`QUERY_STRING`(URL中的查询字符串)和`...

    Perl编程思想

    Maypole将请求处理过程分为几个阶段,每个阶段都有特定的任务。 **4.5 BuySpy实现** - **4.5.1 组件和模版** BuySpy是一个具体的Maypole应用实例。 - **4.5.2 ASP到模版工具箱** ASP(Active Server Pages)是...

    update-weather.zip_WEB开发_Perl_

    - 学习Perl基础,了解其语法和常用模块,如LWP::UserAgent(用于HTTP请求)和HTML::Parser(用于解析HTML)。 - 研究网络爬虫的基本原理和编写技巧,了解如何处理反爬机制和数据提取。 - 学习HTML和CSS,以便正确...

    PHP网页编程实例解析

    其语法吸收了C语言、Java和Perl的特点,易于学习且功能强大,支持多种数据库接口。 - **发展历程**:PHP最初由Rasmus Lerdorf在1995年创建,随着版本的不断更新和完善,PHP逐渐成为一种成熟的、面向对象的编程语言。...

    常用的网页格式文件有哪些?.docx

    ### 常用的网页格式文件 随着互联网技术的发展,网页作为信息传递的重要载体,其格式也变得多样化。本文将详细介绍几种常见的网页格式文件及其特点。 #### 一、静态网页 1. **HTML (HyperText Markup Language)**...

    PHP实例开发源码—网址导航系统3号(php生成静态).zip

    对于初学者,这是一个很好的学习项目,可以从以下几个方面入手: 1. 了解PHP基础语法和常用函数。 2. 学习如何连接和操作MySQL数据库。 3. 理解MVC架构,分析源码中的模型、视图和控制器。 4. 探究PHP生成静态页面的...

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

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

    公司面试题之-腾讯PHP工程师笔试题.doc

    ereg、preg_match、ereg_replace、preg_replace 是 PHP 中四个常用的正则表达式函数。ereg 函数使用 POSIX 风格的正则表达式,而 preg_match 函数使用 Perl 风格的正则表达式。ereg 函数已经废弃,不推荐使用。preg_...

    网络爬虫-Python和数据分析

    BeautifulSoup是Python语言中一个常用的库,用于解析HTML和XML文档,它通过查找、导航、修改分析树等方式轻松处理文档。FindAll()是BeautifulSoup库中非常方便的一个函数,用于找出文档中符合特定条件的所有标签,极...

    Bernese5.0软件的安装与使用

    本文将详细介绍Bernese 5.0在Windows XP系统下的安装方法,并对其程序结构、文件结构以及数据处理流程进行深入解析。 #### 二、Bernese5.0软件的安装 ##### 1. 安装要求 - **硬件要求**:Bernese 5.0对硬件的要求...

    正则表达式

    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之间的...

    在IIS服务器上用ASP设计网上在线投票系统

    常用的编程工具包括Perl、C和Visual Basic等。微软的IIS(Internet Information Server)服务器支持CGI,能够根据客户端请求执行相应的应用程序。然而,CGI程序每次都需要重新加载,当并发用户数量增加时,会显著...

    php程序员菜鸟成长手记——php入门教程

    其工作原理主要包括以下几个方面: - **解析HTML**:读取HTML文件,构建DOM树。 - **渲染页面**:根据CSS样式和DOM树绘制页面。 - **执行JavaScript**:解析和执行JavaScript代码,实现动态效果和与服务器通信。 #...

Global site tag (gtag.js) - Google Analytics