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