参加工作快有两年了,一直都是从网上谷歌人家的经验,这次也把自己的开发经验写下来与别人分享下。刚不久,换了一份新工作,新的公司在刚结束了一个网站。网站的新闻内容都是自己编辑添加上去的,全手动的,于是接受任务,做个自动更新新闻内容的功能。
开始整理思路,第一步通过网站URL得到整个网站新闻链接所有的URL,第二步把得到的URL返回它的源代码,第三步解析出源代码里的内容和标题,第四步存入数据库。最后使用java定时器定时自动更新。
过程中最棘手的是解析HTML源码,果断决定使用htmlparser,废话少说,上一部分代码。代码部分注释,写的不好,还请指教。
/** * 返回网页中所有URL * @return type:NodeList */ public static NodeList getAllUrl(String Url) throws Exception { //使用htmlparser获取 Parser parser = new Parser(); parser.setResource(Url); //待定的编码格式 parser.setEncoding("gbk"); //遍历所有节点 自定义内部类(自定义过滤器) NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() { private static final long serialVersionUID = 1L; public boolean accept(Node node) { //判断node是否是LinkTag的一个实例 if (node instanceof LinkTag) return true; else{ return false; } } }); return nodeList; }
/* * 返回新闻内容 */ public static String getContent(String urlpath){ Parser parser = new Parser(); String content = ""; try { parser.setResource(urlpath);//传入url NodeFilter divFilter = new NodeClassFilter(Div.class);//自定义过滤器 NodeList divlist = parser.parse(divFilter);//加载过滤器 for(int i=0;i<divlist.size();i++){ Node node = divlist.elementAt(i); //遍历所有div标签 if (node.getText().toString().equals("div id='zoom'")){ content = node.toPlainTextString(); //得到指定div内容 }; } } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } return content; } } /* *返回新闻title * */ public static String getTitle(String urlpath)throws Exception{ Parser parser = new Parser(); parser.setResource(urlpath); parser.setEncoding("gbk"); NodeFilter titleFilter = new NodeClassFilter(TitleTag.class); NodeList titleList = parser.parse(titleFilter); String title = ""; for (int i = 0; i < titleList.size(); i++) { Node node = titleList.elementAt(i); if (node instanceof TitleTag) { TitleTag titleTage = (TitleTag) node; title = titleTage.getStringText(); } } return title; }
定时器在这就不写了,相信大家都能搞定。希望跟大家能共同交流学习哈!