======================================================
注:本文源代码点此下载
======================================================
背景:
htmlparser原本是一个在sourceforge上的一个java开源项目,使用这个java类库可以用来线性地或嵌套地解析html文本。他的 功能强大和开源等特性吸引了大量web信息提取的工作者。然而,许多.net开发者朋友一直在寻找一种能在.net中使用的htmlparser类库,笔 者将介绍winista.htmlparser类库,对比于其他原本数量就非常少的.net版htmlparser类库,winista的版本的类库结构 可以说更接近于原始java版本。
该类库目前分为utltimate、pro、lite和community四个版本,前三个版本都是收费的。只有community版本可以免费下载并查看所有的源码。
(一)filter类
filter一看就知道,肯定是对结果进行过滤,取得需要的内容。htmlparser在org.htmlparser.filters包之内一共界说了16个差别的filter,也可以分为几类。
判定类filter:
tagnamefilter
hasattributefilter
haschildfilter
hasparentfilter
hassiblingfilter
isequalfilter
逻辑运算filter:
andfilter
notfilter
orfilter
xorfilter
其他filter:
nodeclassfilter
stringfilter
linkstringfilter
linkregexfilter
regexfilter
cssselectornodefilter
所有的filter类都实现了org.htmlparser.nodefilter接口。这个接口只有一个主要函数:
boolean accept (node node);
各个子类分别实现这个函数,用于判定输入的node是否相符这个filter的过滤条件,假如相符,返回true,不然返回false。
(二)判定类filter
2.1 tagnamefilter
tabnamefilter是最轻易理解的一个filter,凭据tag的名字进行过滤。
下面是用于测试的html文件:
新灵感网站自动更新系统-www.xinlg.com
新灵感网站自动更新系统-www.xinlg.com
http://www.xinlg.com">新灵感网站自动更新系统-www.xinlg.com
新灵感网站自动更新系统-www.xinlg.com
测试源代码:(这里只列出了main函数,全部源代码请参考 htmlparser使用入门(2)- node内容,自己添加import局部)
public static void main(string[] args) {
try{
parser parser = new parser( (httpurlconnection) (new url("http://127.0.0.1:8080/htmlparsertester.html")).openconnection() );
// 这里是控制测试的局部,后面的例子修改的就是这个地方。
nodefilter filter = new tagnamefilter ("div");
nodelist nodes = parser.extractallnodesthatmatch(filter);
if(nodes!=null) {
for (int i = 0; i
新灵感网站自动更新系统-title-www.xinlg.com& lt;/head>
新灵感网站自动更新系统-字符串1-www.xinlg.com
http://www.xinlg.com">新灵感网站自动更新系统-链接文本-www.xinlg.com
新灵感网站自动更新系统-字符串2-www.xinlg.com
测试源代码:
nodefilter filter = new stringfilter("http://blog.csdn.net/javazhuanzai">www.xinlg.com");
nodelist nodes = parser.extractallnodesthatmatch(filter);
输出结果:
gettext:新灵感网站自动更新系统-title-www.xinlg.com
=================================================
gettext:
新灵感网站自动更新系统-字符串1-www.xinlg.com
=================================================
gettext:新灵感网站自动更新系统-链接文本-www.xinlg.com
=================================================
gettext:
新灵感网站自动更新系统-字符串2-www.xinlg.com
=================================================
可以看到包括title,两个内容字符串和链接的文本字符串的tag都被输出了,但是注释和链接tag自己没有输出。
4.3 linkstringfilter
这个filter用于判定链接中是否包括某个特定的字符串,可以用来过滤出指向某个特定网站的链接。
测试源代码:
nodefilter filter = new linkstringfilter("http://blog.csdn.net/javazhuanzai">www.xinlg.com");
nodelist nodes = parser.extractallnodesthatmatch(filter);
输出结果:
gettext:a href="http://blog.csdn.net/javazhuanzai">http://www.xinlg.com"
=================================================
4.4 其他几个filter
其他几个filter也是凭据字符串对差别的域进行判定,与前面这些的区别主要就是支持正则表达式。这个不在本文的讨论范畴以内,大众可以自己实验一下。
请各位站长看看下面>>>
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/