400-685-0732

WJMonitor舆情之声

企业大数据智能舆情监测管理解决方案

全网监测海量数据按需发布监测预警

实时把握舆情动态精准追溯信息源头

获取验证码
企业采购 个人使用
当前位置: 首页 > SEO博客 > 通过java如何使用htmlparser获取页面的字符编码

通过java如何使用htmlparser获取页面的字符编码

时间:2012-02-23 16:12:41
在抓取页面内容的时候,获取到页面的字符编码是非常重要的,要不然抓取到的内容由于编码的不同很容易出现乱码,那么如何获取页面的编码呢,在这里我用java语言来作一下演示。

字符编码

一般来说,在网上查到的代码都是采用这种方式来获取:

HttpURLConnection a = (HttpURLConnection) new URL("http://"+domain).openConnection();
String encoding = a.getContentEncoding();
log.info(encoding);

不过,很遗憾,采用这段代码来实现java获取页面的编码,好像没什么效果,返回不了页面的编码。

既然这种办法不灵,那就换种方法。平时使用java来获取页面的内容,用的最多的就是htmlparser,于是,我决定还是采用htmlparser来实现页面编码的获取。

1,确定目标。对于html页面来说,一般都有确定编码的语句:

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

可以通过这一行的特征来取出网页的编码。

2,选出特征。

1)它是meta标签

2)具有http-equiv属性值为Content-Type

3)将属性content中的值取出,先采用“;”分拆取第二个元素,再采用“=”分拆取第二个元素

3,一切就绪,编码实现。通过目标的选取,以及特征的勾画,已经可以找到解决方法了,像我上一遍htmlparser中filter使用实战中讲的类似,还是采用AndFilter、NodeFilter以及HasAttributeFilter实现,代码如下:

public static String getContentEncoding(String url){
String encoding = "";
Parser parser;
try {
parser = new Parser();
parser.setURL(url);
parser.setEncoding(parser.getEncoding());
NodeFilter tagFilter = new TagNameFilter("meta");
HasAttributeFilter haf = new HasAttributeFilter("http-equiv", "Content-Type");
AndFilter af = new AndFilter(tagFilter,haf);
NodeList nodes = parser.extractAllNodesThatMatch(af);
if (nodes != null) {
TagNode liTag = (TagNode) nodes.elementAt(0);
encoding = liTag.getAttribute("content").split(";")[1].trim();
encoding = encoding.split("=")[1].trim();
}
} catch (ParserException e) {
}
return encoding;
}

先介绍到这里,希望这篇文章能给你带来页面字符编码获取方式的另外一种思路。
分享按钮