我最近在用Java做一个信息抽取的工具,我用了Html Parser想从一个天气网站上http://www.weather.unisys.com/forecast.pl?Name=Shanghai抽取上海天气的信息,但是网页源文件中内容太多了,我用Filter,visitor都没法把要的信息抽取过来,我想问问大家有没有什么方法可以用Html Parser从html DOM里面精确的抽取信息。下面是我要从网页源文件里面抽取的信息
Latest Observation for Shanghai, CITemp: 22C (72F)
Site: ZSSS (Shanghai, CI)
Time: 03Z 23 APR 09
Temp: 22 C (72 F)
Dewpt: 5 C (41 F)
Rel Hum: 33%
Winds: SE at 15 knt
Pressure(alt): 1016.0 mb (30.01 in)
Skies: 
Weather: 
 Almanac
Sunrise: 5:17 AM
Sunset: 6:27 PM 
希望大家多多帮忙,谢谢!

解决方案 »

  1.   

    我觉得好像html Parser很难实现,如果这样的话我只能改用其他用具了
      

  2.   

    做了一个,试验了一下,勉强能用:
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    /**
     * 
     * 分析气象信息,
     * 通过查看页面代码,确定:
     * 第一步,先去掉信息中的无效html标签
     * 第二步,用万能的正则表达式抓取出需要的信息
     * 
     * @author jinxfei
     *
     */
    public class Test {

    public static void main(String[] args) throws Exception{                 //我把网页的内容存在文件里了,你只需要关系htmlStr最终包含的是网页信息就可以
    BufferedReader r=new BufferedReader(new FileReader("d:/temp/forecast.txt"));
    StringBuffer sb=new StringBuffer();
    String curLine;
    while((curLine=r.readLine())!=null){
    sb.append(curLine+"\n");
    }
    String htmlStr=sb.toString();
    //第一遍去掉信息中的<b>标签
    htmlStr=htmlStr.replaceAll("(<b>|</b>)", "");
    //第二遍过滤有用的信息
    Pattern infoPattern=Pattern.compile("((Temp|Site|Time|Dewpt|Rel Hum|Winds|Pressure\\(alt\\)|Skies|Weather|Sunrise|Sunset):.*?)<");
    Matcher m=infoPattern.matcher(htmlStr);
    while(m.find()){
    System.out.println(m.group(1));
    }
    } }