HTMLPARSER 爬取 html网页 获取标题 关键字 内容 url

package com.bonc.pure.util;


import java.awt.List;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Blob;
import java.sql.Clob;
import java.util.Date;
import org.hibernate.Hibernate;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.beans.StringBean;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.BaseHrefTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.MetaTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.TextExtractingVisitor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.util.HtmlUtils;


import com.bonc.pure.util1.HtmlText;




/**
* 解析HTML工具类
* <p>Title:ZolParser </p>
* @author 施海洲
* @date 2015-10-29上午11:27:21
*/
public class ZolParser {
private static Logger log = LoggerFactory.getLogger(ZolParser.class);
HtmlText htmlText=new HtmlText();
String path ="D://bonc_test_bin//黑客hackjd.com.htm";
public HtmlText test() throws Exception
{
/** 开始时间 */
long now = System.currentTimeMillis();
// 获取源代码
String htmlCode = setHtmlCode();
/** 获取标题 */
String ss=getTitle(htmlCode);
htmlText.setHtml_Title(ss);
/** 获取关键字 */
htmlText.setHtml_Keyword(getkeywords(htmlCode));
/** 获取源URL */
htmlText.setHtml_Url(geturl(htmlCode));
/**上传时间*/
Date time=new Date();
htmlText.setHtml_date(time);
/**获取内容*/
String s= getPlainText(htmlCode);
@SuppressWarnings("deprecation")
Clob clob = (Clob) Hibernate.createBlob(s.getBytes("GBK"));
// htmlText.setHtml_Content(clob);
/**获取文件名*/
htmlText.setHtml_name(getName());

/** 结束时间 */
long current = System.currentTimeMillis();
// 消耗时间
log.info("全文消耗时间:" + (current - now));
return htmlText;
}

/**
* 获取HTML代码
*
* @return
* @throws Exception
*/
public String setHtmlCode() throws Exception
{
/** 通过HttpParser解析器解析HTML */
StringBuffer abstr = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(path), "GBK"));
String temp="";
while((temp=reader.readLine())!=null){
abstr.append(temp);
abstr.append("\r\n");
}

String result =abstr.toString(); // 在这里得到文件中所有的字符串
//Parser parsers = Parser.createParser(result, "GB2312");// creat a parser ,which you want to parse.
Parser parsers = new Parser(result);
// 设置编码
parsers.setEncoding("utf-8");
// 设置标签过滤器
NodeFilter filter = new TagNameFilter("html");
// 过滤标签
NodeList nList = parsers.extractAllNodesThatMatch(filter);
// 返回字符串
return nList.toHtml();

}
/**
* 获取文件名
* @param
* @return fileName
* @throws ParserException
*/
public String getName() throws ParserException
{
File tempFile =new File( path.trim());
String fileName = tempFile.getName();
System.out.println("fileName = " + fileName);
return fileName;
}


/**
* 获取标题信息
*
* @param htmlCode
* @return
* @throws ParserException
*/
public String getTitle(String htmlCode) throws ParserException
{

Parser parser = new Parser();
parser.setInputHTML(htmlCode);

List list=new List();
/* 配置过滤器 */
NodeFilter newFilter = new NodeClassFilter() {
public boolean accept(Node node) {
if (node instanceof TitleTag) {
TitleTag mt = (TitleTag) node;
if (mt.getTagName() != null) {
return true;
} else {
return false;
}
}
return false;

}
};
String title=null;
NodeList Title = parser.extractAllNodesThatMatch(newFilter);
for (int i = 0; i < Title.size(); i++) {
if (Title.elementAt(i) instanceof TitleTag) {
TitleTag tt = (TitleTag) Title.elementAt(i);
title=tt.getTitle();

}

}

return title;







}

/**
* 获取关键字信息
*
* @param htmlCode
* @throws ParserException
*/
public String getkeywords(String htmlCode) throws ParserException
{
Parser parser = new Parser();
parser.setInputHTML(htmlCode);
List list=new List();
// Map<String, String> map = new HashMap<String, String>();
/* 配置过滤器 */
NodeFilter newFilter = new NodeClassFilter() { // 将Meta下面的keywords和description过滤出来
public boolean accept(Node node) {
if (node instanceof MetaTag) {
MetaTag mt = (MetaTag) node;
if (mt.getMetaTagName() != null) {
return true;
} else {
return false;
}
} else if(node instanceof TitleTag ) {
return true;
}
return false;
}
};
String t=null;
NodeList keywords = parser.extractAllNodesThatMatch(newFilter);
for (int i = 0; i < keywords.size(); i++) {
if (keywords.elementAt(i) instanceof TitleTag) {
TitleTag tt = (TitleTag) keywords.elementAt(i);

} else {
MetaTag mt = (MetaTag) keywords.elementAt(i);
if (mt.getMetaTagName().equals("keywords") | mt.getMetaTagName().equals("Keywords")) {
log.info("keywords:"+ mt.getMetaContent());
t=mt.getMetaContent();
}
}
}

return t;


}
/**
*获取URL
*
* @param htmlCode
* @throws ParserException
*/
@SuppressWarnings("serial")
public String geturl(String htmlCode) throws ParserException
{
Parser parser = new Parser();
parser.setInputHTML(htmlCode);
/* 配置过滤器 */
NodeFilter newFilter = new NodeClassFilter() {
public boolean accept(Node node) {
if (node instanceof BaseHrefTag) {
BaseHrefTag mt = (BaseHrefTag) node;
if (mt.getTagName()!= null) {
return true;
} else {
return false;
}
}
return false;

}
};
String url=null;
NodeList URL = parser.extractAllNodesThatMatch(newFilter);
for (int i = 0; i < URL.size(); i++) {
if (URL.elementAt(i) instanceof LinkTag) {
LinkTag tag = (LinkTag) URL.elementAt(i);
url= HtmlUtils.htmlUnescape(tag.getLink());

}

}

return url;
}

/**
* 获取纯文本信息
*
* @param htmlCode
* @return

* @throws Exception */
public String getPlainText(String htmlCode) throws Exception {

Parser parser = new Parser();
parser.setInputHTML(htmlCode);

StringBean sb = new StringBean();
TextExtractingVisitor visitor = new TextExtractingVisitor();
// 设置不需要得到页面所包含的链接信息
sb.setLinks(false);
// 设置将不间断空格由正规空格所替代
sb.setReplaceNonBreakingSpaces(true);
// 设置将一序列空格由一个单一空格所代替
sb.setCollapse(true);

parser.visitAllNodesWith(visitor);
String html = visitor.getExtractedText();
return html;
}


}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值