通过java如何使用htmlparser获取页面的字符编码
在抓取页面内容的时候,获取到页面的字符编码是非常重要的,要不然抓取到的内容由于编码的不同很容易出现乱码,那么如何获取页面的编码呢,在这里我用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;
}
先介绍到这里,希望这篇文章能给你带来页面字符编码获取方式的另外一种思路。
分享按钮
一般来说,在网上查到的代码都是采用这种方式来获取:
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;
}
先介绍到这里,希望这篇文章能给你带来页面字符编码获取方式的另外一种思路。