htmlparser是一个非常棒的html页面解析器,它自带的filterbuilder很不错。到sourceforge下载后,解压好就可以用了。运行安装目录下的bin里面的filterbuilder.bat就可打开filterbuilder,如下图(点击看大图):
在窗口最底下的文本框里输入要parse的页面的url, 在Operation菜单里选择Fetch Page就会载入页面。左边的区域可以放置各种过滤器。先选中左边过滤器区域里的某个过滤器,再点击工具栏上要使用的过滤器,就会把过滤器加到之前选中的过滤器里面了。点击Operation菜单里的Excute Filter,就会把当前的过滤器应用到载入的页面了,新结果会显示在校窗口里。最后保存,就会得到一个java文件,里面包含了过滤html的代码。
我用这个工具做了一个从google搜索返回页面里取出搜索结果url 的方法,非常简单,代码如下:
private List<string> getUrlsBySearchGoogle(String keywords, int start)
throws UnsupportedEncodingException {
TagNameFilter filter0 = new TagNameFilter ();
filter0.setName ("A");
HasAttributeFilter filter1 = new HasAttributeFilter ();
filter1.setAttributeName ("class");
filter1.setAttributeValue ("l");
NodeFilter[] array0 = new NodeFilter[2];
array0[0] = filter0;
array0[1] = filter1;
AndFilter filter2 = new AndFilter ();
filter2.setPredicates (array0);
NodeFilter[] array1 = new NodeFilter[1];
array1[0] = filter2;
FilterBean bean = new FilterBean ();
bean.setFilters (array1);
bean.setURL("http://www.google.com/search?complete=1&start="+start+"&q="
+ URLEncoder.encode(keywords, "UTF-8"));
NodeList nodes = bean.getNodes();
List<string> result = new ArrayList<string>();
for(int i = 0; i < nodes.size(); i++) {
LinkTag link = (LinkTag) nodes.elementAt(i);
result.add(link.getLink());
}
return result;
}