使用Filter抓取页面Tag--HTMLParser

在之前的文章中提到使用两个Filter是不能得到预想中的结果的,而只能得到第一个Filter的结果,但是还有一个OrFilter,可以将几个Filter联合起来,获得需要的Tag。而且这些Filter可以用AndFilter联合几个属性,以抓取特定的Tag。实例如下:
NodeFilter[] filterArray = {
                new AndFilter(new TagNameFilter("a"), new HasAttributeFilter(
                        "href")),
                new AndFilter(new TagNameFilter("form"),
                        new HasAttributeFilter("action")),
                new AndFilter(new TagNameFilter("frame"),
                        new HasAttributeFilter("src")),
                new AndFilter(new TagNameFilter("iframe"),
                        new HasAttributeFilter("src")), };
NodeFilter filter = new OrFilter(filterArray);
这样就可以抓取特定的Tag,我们所需要的。
在建立HTMLParser实例之后,使用parser.extractAllNodesThatMatch(filter);获取一个NodeList,然后从中取出每个Node,具体操作。
if (tag instanceof LinkTag){
    操作
}else if(tag instanceof FormTag){
    操作
}else if(tag instanceof FrameTag){
    操作
}else{
    if (tag.getName().toLowerCase().equals("iframe")){
       操作
    }
}
这里注意,没有IFrameTag,你可以自己去扩展,但是我当时按照FrameTag写一个IFrameTag出来,强制想要将tag转换为IFrameTag的时候,出现了Cast错误。当然,现在这样也能解决问题,但是对于FormTag,没有办法从这个FormTag中得到里边的SelectTag,这样在分析form的时候总是有很多不便的。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值