网页关键信息抓取,编码转换

情况是这样的:从别人网站上抓取股票交易信息,结果网站上代码如下


日期开盘价最高价最低价收盘价成交量
2010-04-2318.1818.5017.9918.184,317,567
2010-04-2218.1118.1118.1118.110
2010-04-2117.6018.2517.6018.114,993,918

想把日期这种转换成汉字:日期,并且把有关数据提取出来,关键它不符合xml

使用htmlparser 直接转换编码

[quote]把日期这种转换成汉字:日期,并且把有关数据提取出来,关键它不符合xml [/quote]
说它不符合xml,主要原因在于&在xml中严格禁止使用的。

解决办法是使用xml实体,所谓的实体就是以符号"&"开头,以符号";"结尾。

在这里 ,&(“and”符)的实体为“&”,所以在解析这个html时,用String.replace方法将&符号替换成[size=medium]&[/size]。
[code="java"]str.replace("&","&")[/code]

像这种 日期 是HTML中的Latin-1字符实体,日表示ASCII码为26085的字符,像这种实体,只需要把实体开头的&#和结尾的;去掉,然后把中间的数字串转为整型,再转为字符就OK了,见代码:
[code="java"]
package org.zergle.test.w3c.html;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CharEscaper {

/**
 * @param args
 */
public static void main(String[] args) {
    String s = "日期";
    Pattern p = Pattern.compile("\\&#(\\d+);");
    Matcher m = p.matcher(s);
    int start = 0;
    while (m.find(start)) {
        start = m.end();
        System.out.print((char) Integer.parseInt(m.group(1)));
    }
    System.out.println();
}

}
[/code]

补充一点:详细的关于xml非法符号及其实体
http://hi.baidu.com/dongkundjy/blog/item/523fd836ae48e9d4a2cc2b43.html
权威文档:http://msdn.microsoft.com/zh-cn/library/ms748250(VS.90).aspx

首先,你想提取你需要的内容出来,存放到XML中。
比如说
日期是我最关心的内容。
日期在浏览器中是可以识别。你设置编码方式成GB2312就行了。
如果你还需要进行日期成中文。上面的johnson.lee已经提供办法。
[code="java"]
public void HexToStr(String str) {

Pattern p = Pattern.compile("\&\#(\d+);");

Matcher m = p.matcher(str);

int start = 0;

while (m.find(start)) {

start = m.end();

System.out.print((char) Integer.parseInt(m.group(1)));

}

}
[/code]

这个比较简单啊。你可以用htmlparser进行解析。这个API专门解析HTML一些标签的。

[quote]谢其实我说不符合xml还有一个重要的就是他的table,里面不符合xml标准,我最主要的是想解析出来股票的信息


2010-04-23
18.18
18.50
17.99
18.18
4,317,567

关键是把这段里面的日期和金额解析出来。 [/quote]
明白你的意思,如果是这样的html,它并不满足Html代码规范,更不符合xml解析的基本要求。
在这种情况下,只能通过java字符串的操作或者java中正则表达式解析出来。
如果你使用String操作,最好是使用JDK帮助文档,有助于学习。
如果你想使用正则表示解析,参考java中的正则表达式:http://www.sciencenet.cn/blog/user_content.aspx?id=311572