网页信息提取的两种方式

 网页信息的提取是一个很大的研究课题,可能涉及到并行计算、人工智能、机器学习等领域。今天,我们来学一下如何用正则表达式和HTMLParser提取网页内容。

正则表达式:

基本格式:

Pattern pattern=Pattern.compile(匹配表达式,flag);

Matcher mc=pattern.matcher(匹配域)

while(mc.find())

{

       string=mc.group(index).trim();

}

提示:

匹配表达式要到匹配域中匹配;

flag表示pattern的一些特殊模式,比如Pattern.MULTILINE或Pattern.DOTALL。但这些主要是注重一些细节,一般对大体上没 什 么妨碍。但是现在我对'^'和 '$'匹配每一行的开始和结束还不是很了解。

据我的理解,string的内容就是匹配表达式中第index的(.*)所匹配的内容。

举一个简单的例子:

Pattern   pattern=Pattern.compile("<TD CLASS=btd WIDTH=198 BGCOLOR=/"#FCFCFC/"><B>(.*)</B></TD>",Pattern.DOTALL);

Matcher mc=pattern.matcher(content);

while(mc.find())

{

       string=mc.group(1).trim();

}

String的内容就是上面匹配表达式中红色区域缺少的内容。

注:index是从‘1’开始的,而不是从‘0’开始。

HTMLParser:

举例说明;

NodeFilter filter=new AndFilter(new TagNameFilter("td"),new HasChildFilter(new TagNameFilter("b")));

NodeList nodeList=parser.parse(filter)

Node node=nodeList.elementAt(0)

这里是网页中标签符合<td>含有子标签<b>的第一个节点。

nodeText=node.getFistChild.getNextSibling().toHtml();

这里举的例子如<td class=""><b>好人</b></td>,则可知FirstChild为<b>,而NextSibling()就是‘好人’。

Node node1=nodeList.elementAt(1)

这里是网页中标签符合<td>含有子标签<b>的第二个节点。

NodeList scdList=node1.getChildren()

提取这个<td>标签下的所用孩子节点。

scdtext=scdList.elementAt(3).toHtml().

取得第三个节点。例如:<td class=""><font color=""><b>好人</b></font></td>.

                 elementAt    0                    1                 2    3

主要内容讲的差不多了,现在补充一下吧:

比如,node.getNextSibliing().getNextSiblint().toHtml();与上述的孩子节点不同,这种情况一般用在属性Filter当中;

NodeFilter filter=new AndFilter(new TagNameFilter("td"),new HasAttributeFilter("class","");

<td class="">          <b>                      好人                  </b></td>

       node          NextSibling()           NextSibling()

注意:getFirstChild与getNextSibling的取决并不是绝对的,比如说<H1 class="">就与<td class="">恰好相反。

这类例子这我的博客里很多,可以随便看看。

技巧:不知道是什么原因时可以把Node节点的实例node打印出来(就用System.out.println())。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值