<<<<<<< .mine =======
当前位置: 首页 > 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来开发出实用的工具来。

相关文章

SEOTcs新版中会员权限的设置问题

SEOTcs系统内测了很久,大概1千个左右的网站,10几万的关键词,每天抓取并存储几十万条的数据,包括百度,谷歌,搜狗这...

针对日本SEO服务的观察汇总

近日,笔者有幸接触了一家日本SEO公司,这里就不透露详细信息了,留个悬念。产品推的就是SEO服务,自身主页的优化成效就毋...

使用crontab和linux脚本编程简单实现mysql自动备份

在linux中如何对mysql数据库进行自动定期备份,今天bruce来分享一下这个小经验。 1,写一个小脚...

如何快速拓展适合的关键词

培训要求:不讲虚的,只讲实际的挑词方案,需要用实例,比如举几个关键词拓展的例子,几个网站拓展关键词的例子。 包含2...

dedecms后台广告管理所想不到的用处

今天在对绿色海派站内优化的时候,需要修改底部导航文件中的网站地图链接地址, 一般我们修改底部文件,就会去找...
沪ICP备10034044号-12
400-685-0732
400-685-0732 在线咨询