400-685-0732

WJMonitor舆情之声

企业大数据智能舆情监测管理解决方案

全网监测海量数据按需发布监测预警

实时把握舆情动态精准追溯信息源头

获取验证码
企业采购 个人使用
当前位置: 首页 > SEO博客 > htmlparser中filter使用实战

htmlparser中filter使用实战

时间:2012-02-10 18:25:02
对于java开发人员来说,哪一个开源框架代码适合于页面内容的抓取?毫无疑问,htmlparser是一个不错的选择。而htmlparser的使用中,由于页面代码的复杂性,所以为了让页面内容抓取的源代码更优雅,为了将if的显式判断语句更少,多采用htmlparser的过滤器即filter是相当重要的。今天bruce分享一下htmlparser实战中filter的用法。

htmlparser

在htmlparser中,filter还是挺多的,比如,对于判断类Filter,有TagNameFilter,HasAttributeFilter,HasChildFilter,HasParentFilter,HasSiblingFilter,IsEqualFilter;
对于逻辑运算Filter,则有AndFilter,NotFilter,OrFilter,XorFilter;其他Filter,有NodeClassFilter,StringFilter,LinkStringFilter,LinkRegexFilter,RegexFilter,CssSelectorNodeFilter。

在这里,我主要介绍一下TagNameFilter、HasChildFilter、HasAttributeFilter 和AndFilter这几个filter的组合使用方法。

1,场景一,如果你想抓取页面中带有图片的链接,如何实现?方法很简单,采用一个链接的TagNameFilter,以及 具有图片的HasChildFilter,最后采用AndFilter将这两个串联起来,代码如下:

Parser parser = new Parser (url);
NodeFilter filter =new AndFilter (new TagNameFilter ("a"),new HasChildFilter (new TagNameFilter ("img")));
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if (nodes != null) {
for (int i = 0; i < nodes.size(); i++) {
//to do
}
}

2,场景二,对于<div class="f">或<li class="m">这种类型的页面代码,如何抓取里面的内容。方式也不难,还是采用三个filter来实现,TagNameFilter,HasAttributeFilter 和AndFilter,代码如下:

TagNameFilter filter = new TagNameFilter("div");
HasAttributeFilter haf = new HasAttributeFilter("class", "f");
AndFilter af = new AndFilter(filter,haf);
NodeList nodes = parser.extractAllNodesThatMatch(af);
if (nodes != null) {
for (int i = 0; i < nodes.size(); i++) {
//to do
}
}

今天暂时介绍到这里,如果想了解更多,可以了解htmlparser的官网,或者搜索一下其它人写的博客,资源很多,主要是多借鉴别人并自己去不断的实战,更好的利用htmlparser来开发出实用的工具来。
分享按钮