使用Perl的HTML::TreeBuilder::XPath来解析网页内容
原文地址:http://www.php-oa.com/2009/09/24/perl-html-tree-builder-xpath.html
转过来 慢慢研究
强大的Perl中,有超级多强大的模块,让我们不在需要重复的发明轮子.下面这个就是一个强大的模块.HTML::TreeBuilder::XPath.它能象xml一样解析网站.怎么使用就不细讲了,如下,见实例,我是从alexa.com网站得到我的网站排名的一个例子.会显示如下的结果
1
2
#perl test.pl
你的网站排名为: 199,954
HTML::TreeBuilder::XPath的实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use LWP::Simple;
use HTML::TreeBuilder::XPath;
use Data::Dumper;
my $url = "http://www.alexa.com/siteinfo/www.php-oa.com";
my $html = get( $url );
my $tree = new HTML::TreeBuilder::XPath;
$tree->parse( $html );
$tree->eof;
#$tree->dump;
my $srt;
my $items = $tree->findnodes( '/html/body/descendant::div[@class[.=~/data down/]]' );
for my $item ( $items->get_nodelist() ){
eval{
$srt = $item->content->[1];
};
print "你的网站排名为:".$srt."\n";
}
怎么使用最麻烦的一点在于这个XPath的语法.下面是简单的语法介绍.
XPATH的简单语法介绍
XPATH基本上是用一种类似目录树的方法来描述在XML文档中的路径。比如用“/”来作为上下层级间的分隔。第一个“/”表示文档的根节点(注意,不是指文档最外层的tag节点,而是指文档本身)。比如对于一个HTML文件来说,最外层的节点应该是"/html"。
同样的,“..”和“.”分别被用来表示父节点和本节点。
XPATH返回的不一定就是唯一的节点,而是符合条件的所有节点。比如在HTML文档里使用“/html/head/scrpt”就会把head里的所有script节点都取出来。
为了缩小定位范围,往往还需要增加过滤条件。过滤的方法就是用“[”“]”把过滤条件加上。比如在HTML文档里使用“/html/body/div[@id='main']”,即可取出body里id为main的div节点。
其中@id表示属性id,类似的还可以使用如@name, @value, @href, @src, @class….
而函数text()的意思则是取得节点包含的文本。比如:<div>hello<p>world</p>< /div>中,用"div[
相关文档:
使用Objective-C解析HTML或者XML,系统自带有两种方式一个是通过libxml,一个是通过NSXMLParser。不过这两种方式都需要自己写很多编码来处理抓取下来的内容,而且不是很直观。
有一个比较好的类库hpple,它是一个轻量级的包装框架,可以很好的解决这个问题。它是用XPath来定位和解析HTML或者XML。
安装步骤:
-加入 libx ......
Dim objReg,objMatches,objMatch
Set objReg=new RegExp
objReg.Global=True
objReg.IgnoreCase=True
objReg.Pattern="<('[^']*'|""[^""]*""|[^'"">])*?>"
Set objMatches=objReg.Execute(字符串)
For Each objMatch In objMatches
找到的HTML :objMatch.value
Next
Set objMatches=Nothing
Set objRe ......
对于"&# 24038;&# 36793;"这种&#开始的字符,应该为html unicode编码类型,解码方法如下:
s="&# 24038;& # 36793;"
s="左边"
import re
_=re.compile('&#(x)?([0-9a-fA-F]+);')
to_str=lambda s,charset='utf-8':_.sub(lambda result:unichr(int(result.group(2),result.group ......
因为Wap2.0使用XHTML语言并兼容WML,以下是网上找的XHTML和HTML的区别
XHTML相比于HTML
1.所有的标记都必须要有一个相应的结束标记
以前在HTML中,你可以打开许多标签,例如和<li>而不一定写对应的
和</li>来关闭它们。但在XHTML中这是不合法的。XHTML要求有严谨的结构,所有标签必须 ......
作者
崔康
发布于
2010年5月13日 下午10时14分
随着Web2.0技术的不断发展,Web前端的优化受到越来越多的关注,特别是JavaScript和CSS优化的讨论一直是热点,工具也
相对丰富,而对HTML优化则有所忽视,最近,来自百度泛用户体 ......