htmlparser解析网页代码实现网站自动抓取新闻并定时更新

参加工作快有两年了,一直都是从网上谷歌人家的经验,这次也把自己的开发经验写下来与别人分享下。刚不久,换了一份新工作,新的公司在刚结束了一个网站。网站的新闻内容都是自己编辑添加上去的,全手动的,于是接受任务,做个自动更新新闻内容的功能。
开始整理思路,第一步通过网站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;
}

定时器在这就不写了,相信大家都能搞定。希望跟大家能共同交流学习哈!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值