November 11th, 2007用htmlparser解析google搜索结果页面里的url
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; }